C++を使用して、XPS、OXPSをJPGまたはPNG画像に変換します

XPSおよびOXPSドキュメントはPDFファイルに類似しており、ドキュメントのレイアウト、外観、および印刷情報を定義します。 XPSおよびOXPSドキュメントをJPGおよびPNG画像形式に変換する必要があるシナリオがあります。そのために、この記事では、C++を使用してXPSおよびOXPSドキュメントをJPGおよびPNG画像形式に変換する方法を説明します。

XPS、OXPSファイルをJPGまたはPNG形式に変換するためのC++ API

Aspose.Page for C++は、XPSおよびPostScriptファイルをレンダリングおよび操作するためのC++ライブラリです。 XPSドキュメントを作成、読み取り、更新できます。さらに、APIは、XPSおよびOXPSドキュメントのJPGおよびPNG画像形式への変換をサポートしています。 APIは、NuGetからインストールするか、ダウンロードセクションから直接ダウンロードできます。

PM> Install-Package Aspose.Page.Cpp

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

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

次のサンプルコードは、C++を使用してXPS/OXPSドキュメントをJPG形式に変換する方法を示しています。

// 入力ファイル
System::String inputFileName = u"SourceDirectory\\sample.xps";
//出力ファイル 
System::String outputFileName = u"OutputDirectory\\XPStoImage_out.jpeg";
// XPS入力ストリームを初期化します
{
	System::SharedPtr<System::IO::Stream> xpsStream = System::IO::File::Open(inputFileName, System::IO::FileMode::Open, System::IO::FileAccess::Read);
	// 'using'ステートメントでリソースをクリアしています
	System::Details::DisposeGuard<1> __dispose_guard_1({ xpsStream });
	// ------------------------------------------

	try
	{
		// ストリームからXPSドキュメントをロードする
		System::SharedPtr<XpsDocument> document = System::MakeObject<XpsDocument>(xpsStream, System::MakeObject<XpsLoadOptions>());
		// または、ファイルから直接XPSドキュメントをロードします。その場合、xpsStreamは必要ありません。
		// XpsDocument document = new XpsDocument(inputFileName、new XpsLoadOptions());

		// 必要なパラメータを使用してJpegSaveOptionsオブジェクトを初期化します。
		System::SharedPtr<JpegSaveOptions> options = [&] { 
			auto tmp_0 = System::MakeObject<JpegSaveOptions>(); 
			tmp_0->set_SmoothingMode(System::Drawing::Drawing2D::SmoothingMode::HighQuality); 
			tmp_0->set_Resolution(300); 
			tmp_0->set_PageNumbers(System::MakeArray<int32_t>({ 1, 2, 6 })); 
			return tmp_0; 
		}();

		// JPG形式のレンダリングデバイスを作成します
		System::SharedPtr<ImageDevice> device = System::MakeObject<ImageDevice>();

		document->Save(device, options);

		// ドキュメントパーティション(XPS用語での固定ドキュメント)を反復処理します
		for (int32_t i = 0; i < device->get_Result()->get_Length(); i++)
		{
			for (int32_t j = 0; j < device->get_Result()[i]->get_Length(); j++)
			{
				// 画像出力ストリームを初期化します
				{
					System::SharedPtr<System::IO::Stream> imageStream = System::IO::File::Open(System::IO::Path::GetDirectoryName(outputFileName) + u"\\" + System::IO::Path::GetFileNameWithoutExtension(outputFileName) + u"_" + (i + 1) + u"_" + (j + 1) + System::IO::Path::GetExtension(outputFileName), System::IO::FileMode::Create, System::IO::FileAccess::Write);
					// 'using'ステートメントでリソースをクリアしています
					System::Details::DisposeGuard<1> __dispose_guard_0({ imageStream });
					// ------------------------------------------

					try
					{
						imageStream->Write(device->get_Result()[i][j], 0, device->get_Result()[i][j]->get_Length());
					}
					catch (...)
					{
						__dispose_guard_0.SetCurrentException(std::current_exception());
					}
				}
			}
		}
	}
	catch (...)
	{
		__dispose_guard_1.SetCurrentException(std::current_exception());
	}
}
サンプルコードによって生成されたJPG画像

サンプルコードによって生成されたJPG画像

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

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

次のサンプルコードは、C++を使用してXPS/OXPSドキュメントをPNG形式に変換する方法を示しています。

// 入力ファイル
System::String inputFileName = u"SourceDirectory\\sample.xps";
//出力ファイル 
System::String outputFileName = u"OutputDirectory\\XPStoImage_out.png";
// XPS入力ストリームを初期化します
{
	System::SharedPtr<System::IO::Stream> xpsStream = System::IO::File::Open(inputFileName, System::IO::FileMode::Open, System::IO::FileAccess::Read);
	// 'using'ステートメントでリソースをクリアしています
	System::Details::DisposeGuard<1> __dispose_guard_1({ xpsStream });
	// ------------------------------------------

	try
	{
		// ストリームからXPSドキュメントをロードする
		System::SharedPtr<XpsDocument> document = System::MakeObject<XpsDocument>(xpsStream, System::MakeObject<XpsLoadOptions>());
		// または、ファイルから直接XPSドキュメントをロードします。その場合、xpsStreamは必要ありません。
		// XpsDocument document = new XpsDocument(inputFileName、new XpsLoadOptions());

		// 必要なパラメータを使用してPngSaveOptionsオブジェクトを初期化します。
		System::SharedPtr<PngSaveOptions> options = [&] { 
			auto tmp_0 = System::MakeObject<PngSaveOptions>(); 
			tmp_0->set_SmoothingMode(System::Drawing::Drawing2D::SmoothingMode::HighQuality); 
			tmp_0->set_Resolution(300); 
			tmp_0->set_PageNumbers(System::MakeArray<int32_t>({ 1, 2, 6 })); 
			return tmp_0; 
		}();

		// PNG形式のレンダリングデバイスを作成する
		System::SharedPtr<ImageDevice> device = System::MakeObject<ImageDevice>();

		document->Save(device, options);

		// ドキュメントパーティション(XPS用語での固定ドキュメント)を反復処理します
		for (int32_t i = 0; i < device->get_Result()->get_Length(); i++)
		{
			for (int32_t j = 0; j < device->get_Result()[i]->get_Length(); j++)
			{
				// 画像出力ストリームを初期化します
				{
					System::SharedPtr<System::IO::Stream> imageStream = System::IO::File::Open(System::IO::Path::GetDirectoryName(outputFileName) + u"\\" + System::IO::Path::GetFileNameWithoutExtension(outputFileName) + u"_" + (i + 1) + u"_" + (j + 1) + System::IO::Path::GetExtension(outputFileName), System::IO::FileMode::Create, System::IO::FileAccess::Write);
					// 'using'ステートメントでリソースをクリアしています
					System::Details::DisposeGuard<1> __dispose_guard_0({ imageStream });
					// ------------------------------------------

					try
					{
						imageStream->Write(device->get_Result()[i][j], 0, device->get_Result()[i][j]->get_Length());
					}
					catch (...)
					{
						__dispose_guard_0.SetCurrentException(std::current_exception());
					}
				}
			}
		}
	}
	catch (...)
	{
		__dispose_guard_1.SetCurrentException(std::current_exception());
	}
}
サンプルコードで生成されたPNG画像

サンプルコードで生成されたPNG画像

無料ライセンスを取得する

無料の一時ライセンスをリクエストすることで、評価の制限なしにAPIを試すことができます。

結論

この記事では、C++を使用してXPSおよびOXPSドキュメントをJPGおよびPNG画像形式に変換する方法を学習しました。さらに、Aspose.Page for C++ APIには、使用できるさまざまな追加形式が用意されています。 公式ドキュメントにアクセスすると、APIの詳細を調べることができます。ご不明な点がございましたら、無料サポートフォーラムまでお気軽にお問い合わせください。

関連項目