C++を使用してXPSまたはOXPSファイルをPDF形式に変換する

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形式への変換をサポートしています。 APIは、NuGetからインストールするか、ダウンロードセクションから直接ダウンロードできます。

PM> Install-Package Aspose.Page.Cpp

XPS/OXPSドキュメントをPDF形式に変換する

以下は、XPSおよびOXPSドキュメントをPDF形式に変換する手順です。

  • 出力PDFファイルでストリームを初期化します。
  • ソースXPS/OXPSファイルを使用してストリームを初期化します。
  • XPS / OXPSストリームを使用して、XpsDocumentクラスのインスタンスを作成します。
  • PdfSaveOptionsクラスのインスタンスを作成します。
  • JpegQualityLevelImageCompressionなどのオプションを指定します。
  • [XpsDocument->Save(System::SharedPtr device, System::SharedPtr options)]メソッドを使用して出力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);
// 'using'ステートメントでリソースをクリアしています
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);
	// 'using'ステートメントでリソースをクリアしています
	System::Details::DisposeGuard<1> __dispose_guard_0({ xpsStream });
	// ------------------------------------------

	try
	{
		// ストリームからXPSドキュメントをロードする
		System::SharedPtr<XpsDocument> document = System::MakeObject<XpsDocument>(xpsStream, System::MakeObject<XpsLoadOptions>());
		// または、ファイルから直接XPSドキュメントをロードします。その場合、xpsStreamは必要ありません。
		// XpsDocument document = 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);
// 'using'ステートメントでリソースをクリアしています
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);
	// 'using'ステートメントでリソースをクリアしています
	System::Details::DisposeGuard<1> __dispose_guard_0({ xpsStream });
	// ------------------------------------------

	try
	{
		// ストリームからXPSドキュメントをロードする
		System::SharedPtr<XpsDocument> document = System::MakeObject<XpsDocument>(xpsStream, System::MakeObject<XpsLoadOptions>());
		// または、ファイルから直接XPSドキュメントをロードします。その場合、xpsStreamは必要ありません。
		// XpsDocument document = 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ドキュメントを操作するための多くの追加機能を提供します。ご不明な点がございましたら、無料サポートフォーラムまでお気軽にお問い合わせください。

関連項目