XPS 和 OXPS 文档定义了布局、外观和打印信息。这些文档类似于 PDF 文件。由于 PDF 格式的高度流行,您可能会发现自己需要将 XPS 和 OXPS 文档转换为 PDF 格式。为此,本文将教您如何使用 C++ 将 XPS 和 OXPS 文档转换为 PDF 格式。
用于将 XPS 和 OXPS 文档转换为 PDF 格式的 C++ API
Aspose.Page for C++ 是一个用于渲染和操作 XPS 和 PostScript 文件的 C++ 库。它允许您创建、阅读和更新 XPS 文档。此外,API 支持将 XPS 和 OXPS 文档转换为 PDF 格式。您可以通过 NuGet 安装 API,也可以直接从 下载 部分下载。
PM> Install-Package Aspose.Page.Cpp
将 XPS/OXPS 文档转换为 PDF 格式
以下是将 XPS 和 OXPS 文档转换为 PDF 格式的步骤。
- 使用输出 PDF 文件初始化流。
- 使用源 XPS/OXPS 文件初始化流。
- 使用 XPS/OXPS 流创建 XpsDocument 类的实例。
- 创建 PdfSaveOptions 类的实例。
- 指定 JpegQualityLevel 和 ImageCompression 等选项。
- 使用 XpsDocument->Save(System::SharedPtr设备,系统::SharedPtr选项) 方法。
以下示例代码展示了如何使用 C++ 将 XPS/OXPS 文档转换为 PDF 格式。
// 输出文件
System::SharedPtr<System::IO::Stream> pdfStream = System::IO::File::Open(u"OutputDirectory\\XPStoPDF.pdf", System::IO::FileMode::Create, System::IO::FileAccess::Write);
// 在“使用”语句下清除资源
System::Details::DisposeGuard<1> __dispose_guard_1({ pdfStream });
// ------------------------------------------
try {
// 源文件
System::SharedPtr<System::IO::Stream> xpsStream = System::IO::File::Open(u"SourceDirectory\\sample.xps", System::IO::FileMode::Open, System::IO::FileAccess::Read);
// 在“使用”语句下清除资源
System::Details::DisposeGuard<1> __dispose_guard_0({ xpsStream });
// ------------------------------------------
try
{
// 从流中加载 XPS 文档
System::SharedPtr<XpsDocument> document = System::MakeObject<XpsDocument>(xpsStream, System::MakeObject<XpsLoadOptions>());
// 或直接从文件加载 XPS 文档。那时不需要 xpsStream。
// XpsDocument 文档 = new XpsDocument(inputFileName, new XpsLoadOptions());
// 使用必要的参数初始化 PdfSaveOptions 对象。
System::SharedPtr<Aspose::Page::XPS::Presentation::Pdf::PdfSaveOptions> options = [&] {
auto tmp_0 = System::MakeObject<Aspose::Page::XPS::Presentation::Pdf::PdfSaveOptions>();
tmp_0->set_JpegQualityLevel(100);
tmp_0->set_ImageCompression(Aspose::Page::XPS::Presentation::Pdf::PdfImageCompression::Jpeg);
tmp_0->set_TextCompression(Aspose::Page::XPS::Presentation::Pdf::PdfTextCompression::Flate);
return tmp_0;
}();
// 为 PDF 格式创建渲染设备
System::SharedPtr<Aspose::Page::XPS::Presentation::Pdf::PdfDevice> device = System::MakeObject<Aspose::Page::XPS::Presentation::Pdf::PdfDevice>(pdfStream);
// 保存 PDF 文件
document->Save(device, options);
}
catch (...)
{
__dispose_guard_0.SetCurrentException(std::current_exception());
}
}
catch (...)
{
__dispose_guard_1.SetCurrentException(std::current_exception());
}
将 XPS/OXPS 文档的选定页面转换为 PDF 格式
在将 XPS 和 OXPS 文件转换为 PDF 格式时,您还可以指定要转换的页面。输出 PDF 文件将仅包含您选择的页面。为此,请按照以下步骤操作。
- 使用输出 PDF 文件初始化流。
- 使用源 XPS/OXPS 文件初始化流。
- 使用 XPS/OXPS 流创建 XpsDocument 类的实例。
- 创建 PdfSaveOptions 类的实例。
- 指定 JpegQualityLevel 和 ImageCompression 等选项。
- 使用 PdfSaveOptions->setPageNumbers(System::ArrayPtr) 指定要转换的页面值) 方法。
- 使用 XpsDocument->Save(System::SharedPtr设备,系统::SharedPtr选项) 方法。
以下示例代码演示了如何使用 C++ 将 XPS 和 OXPS 文档的选定页面转换为 PDF 格式。
// 输出文件
System::SharedPtr<System::IO::Stream> pdfStream = System::IO::File::Open(u"OutputDirectory\\XPStoPDF.pdf", System::IO::FileMode::Create, System::IO::FileAccess::Write);
// 在“使用”语句下清除资源
System::Details::DisposeGuard<1> __dispose_guard_1({ pdfStream });
// ------------------------------------------
try {
// 源文件
System::SharedPtr<System::IO::Stream> xpsStream = System::IO::File::Open(u"SourceDirectory\\sample.xps", System::IO::FileMode::Open, System::IO::FileAccess::Read);
// 在“使用”语句下清除资源
System::Details::DisposeGuard<1> __dispose_guard_0({ xpsStream });
// ------------------------------------------
try
{
// 从流中加载 XPS 文档
System::SharedPtr<XpsDocument> document = System::MakeObject<XpsDocument>(xpsStream, System::MakeObject<XpsLoadOptions>());
// 或直接从文件加载 XPS 文档。那时不需要 xpsStream。
// XpsDocument 文档 = new XpsDocument(inputFileName, new XpsLoadOptions());
// 使用必要的参数初始化 PdfSaveOptions 对象。
System::SharedPtr<Aspose::Page::XPS::Presentation::Pdf::PdfSaveOptions> options = [&] {
auto tmp_0 = System::MakeObject<Aspose::Page::XPS::Presentation::Pdf::PdfSaveOptions>();
tmp_0->set_JpegQualityLevel(100);
tmp_0->set_ImageCompression(Aspose::Page::XPS::Presentation::Pdf::PdfImageCompression::Jpeg);
tmp_0->set_TextCompression(Aspose::Page::XPS::Presentation::Pdf::PdfTextCompression::Flate);
tmp_0->set_PageNumbers(System::MakeArray<int32_t>({ 1, 3 }));
return tmp_0;
}();
// 为 PDF 格式创建渲染设备
System::SharedPtr<Aspose::Page::XPS::Presentation::Pdf::PdfDevice> device = System::MakeObject<Aspose::Page::XPS::Presentation::Pdf::PdfDevice>(pdfStream);
// 保存 PDF 文件
document->Save(device, options);
}
catch (...)
{
__dispose_guard_0.SetCurrentException(std::current_exception());
}
}
catch (...)
{
__dispose_guard_1.SetCurrentException(std::current_exception());
}
获得免费许可证
您可以通过请求 免费的临时许可证 来试用该 API,而不受评估限制。
结论
在本文中,您学习了如何使用 C++ 将 XPS 和 OXPS 文档转换为 PDF 格式。此外,您还了解了如何使用 Aspose.Page for C++ API 将 XPS/OXPS 文档的选定页面转换为 PDF 格式。 API 提供了许多用于处理 XPS 文档的附加功能,您可以通过访问 官方文档 来详细了解这些功能。如有任何问题,请随时通过我们的 免费支持论坛 与我们联系。