使用 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 文檔的附加功能,您可以通過訪問 官方文檔 來詳細了解這些功能。如有任何疑問,請隨時通過我們的免費支持論壇與我們聯繫。

也可以看看