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