使用 C++ 将 XPS 或 OXPS 文件转换为 PDF 格式

XPSOXPS 文档定义了布局、外观和打印信息。这些文档类似于 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 格式的步骤。

以下示例代码展示了如何使用 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());
}
示例代码生成的输出 PDF 文件的图像

示例代码生成的输出 PDF 文件的图像

将 XPS/OXPS 文档的选定页面转换为 PDF 格式

在将 XPS 和 OXPS 文件转换为 PDF 格式时,您还可以指定要转换的页面。输出 PDF 文件将仅包含您选择的页面。为此,请按照以下步骤操作。

以下示例代码演示了如何使用 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());
}
示例代码生成的输出 PDF 文件的图像

示例代码生成的输出 PDF 文件的图像

获得免费许可证

您可以通过请求 免费的临时许可证 来试用该 API,而不受评估限制。

结论

在本文中,您学习了如何使用 C++ 将 XPS 和 OXPS 文档转换为 PDF 格式。此外,您还了解了如何使用 Aspose.Page for C++ API 将 XPS/OXPS 文档的选定页面转换为 PDF 格式。 API 提供了许多用于处理 XPS 文档的附加功能,您可以通过访问 官方文档 来详细了解这些功能。如有任何问题,请随时通过我们的 免费支持论坛 与我们联系。

也可以看看