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形式に変換する手順です。
- ソースXPS/OXPSファイルを使用してストリームを初期化します。
- XPS / OXPSストリームを使用して、XpsDocumentクラスのインスタンスを作成します。
- JpegSaveOptionsクラスのインスタンスを作成します。
- SmoothingModeやResolutionなどのオプションを指定します。
- ImageDeviceクラスのインスタンスを作成します。
- XpsDocument->Save(System::SharedPtr device, System::SharedPtr options)メソッドを使用してXPS/OXPSドキュメントをImageDeviceに保存します。
- ドキュメントパーティションを繰り返し処理します。
- 出力ストリームを初期化し、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());
}
}
XPS/OXPSドキュメントをPNG形式に変換する
以下は、XPSおよびOXPSドキュメントをPNG形式に変換する手順です。
- ソースXPS/OXPSファイルを使用してストリームを初期化します。
- XPS / OXPSストリームを使用して、XpsDocumentクラスのインスタンスを作成します。
- PngSaveOptionsクラスのインスタンスを作成します。
- SmoothingModeやResolutionなどのオプションを指定します。
- ImageDeviceクラスのインスタンスを作成します。
- XpsDocument->Save(System::SharedPtr device, System::SharedPtr options)メソッドを使用してXPS/OXPSドキュメントをImageDeviceに保存します。
- ドキュメントパーティションを繰り返し処理します。
- 出力ストリームを初期化し、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());
}
}
無料ライセンスを取得する
無料の一時ライセンスをリクエストすることで、評価の制限なしにAPIを試すことができます。
結論
この記事では、C++を使用してXPSおよびOXPSドキュメントをJPGおよびPNG画像形式に変換する方法を学習しました。さらに、Aspose.Page for C++ APIには、使用できるさまざまな追加形式が用意されています。 公式ドキュメントにアクセスすると、APIの詳細を調べることができます。ご不明な点がございましたら、無料サポートフォーラムまでお気軽にお問い合わせください。