PDFは、インターネットを介してドキュメントを共有するための標準形式です。そのグローバルなサポートと一貫したレイアウトにより、このようなシナリオに最適です。ただし、画像や図面などのコンテンツによってPDFファイルのサイズが大きくなる場合があります。このようなシナリオでは、PDFファイルを簡単に最適化または圧縮して、品質を損なうことなくサイズを小さくすることができます。そのために、この記事では、C++を使用してPDFファイルを圧縮および最適化してサイズを縮小するために使用できるさまざまな手法について説明します。

PDFファイルを圧縮および最適化するためのC++API

Aspose.PDF for C++は、PDFドキュメントの作成、読み取り、更新を可能にするC++ライブラリです。このAPIを使用して、大きなPDFファイルを圧縮および最適化して、品質を維持しながらサイズを縮小できます。 APIは、NuGetからインストールするか、ダウンロードセクションから直接ダウンロードできます。

PM> Install-Package Aspose.PDF.Cpp

C++を使用してWeb用にPDFドキュメントを最適化する

PDFドキュメントをWebに表示する場合は、PDFドキュメントを最適化すると、読み込み速度が向上し、ユーザーエクスペリエンスが向上します。 PDFドキュメントを最適化するには、以下の手順に従ってください。

次のサンプルコードは、C++を使用してWeb用にPDFドキュメントを最適化する方法を示しています。

// PDFドキュメントを開く
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\PDF\\Sample 4.pdf");

// PDFドキュメントを最適化する
pdfDocument->Optimize();

// PDFドキュメントを保存します
pdfDocument->Save(u"OutputDirectory\\Optimized_output.pdf");

C++を使用してPDFファイルの画像を圧縮およびサイズ変更

PDFファイルに多数の画像が含まれていると、かなりのファイルサイズになる可能性があります。このようなファイルでは、画像はサイズを大きくする上で重要な役割を果たします。これらのファイルの画像を圧縮およびサイズ変更すると、サイズが著しく縮小されます。以下は、PDFファイルの画像を圧縮およびサイズ変更する手順です。

次のサンプルコードは、C++を使用して画像を圧縮およびサイズ変更してPDFファイルサイズを縮小する方法を示しています。

// PDFドキュメントを開く
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\PDF\\Sample 4.pdf");

// OptimizationOptionsクラスのインスタンスを作成します
System::SharedPtr<Aspose::Pdf::Optimization::OptimizationOptions> options = MakeObject<Aspose::Pdf::Optimization::OptimizationOptions>();

// 画像を圧縮およびサイズ変更し、品質と解像度を設定します
options->get_ImageCompressionOptions()->set_CompressImages(true);
options->get_ImageCompressionOptions()->set_ImageQuality(10);
options->get_ImageCompressionOptions()->set_MaxResolution(150);
options->get_ImageCompressionOptions()->set_ResizeImages(true);

// ドキュメント内のリソースを最適化する
pdfDocument->OptimizeResources(options);

// PDFドキュメントを保存します
pdfDocument->Save(u"OutputDirectory\\Compressed_PDF_With_Images.pdf");

ファイルサイズをさらに小さくするために、ファイルから埋め込みフォントを削除することもできます。埋め込まれたフォントを削除するには、2つの戦略があります。 1つは、すべての埋め込みフォントを削除することです。2つ目は、未使用のフォントのサブセットのみを削除することです。さらに、未使用のストリームを削除し、重複するストリームをリンクして、追加のサイズを減らすこともできます。以下は、前述の変更をPDFファイルに適用する手順です。

次のサンプルコードは、フォントの埋め込みを解除し、C++を使用して未使用のストリームとオブジェクトを削除することにより、PDFファイルのサイズを縮小する方法を示しています。

// PDFドキュメントを開く
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\PDF\\Sample 4.pdf");

// OptimizationOptionsクラスのインスタンスを作成します
System::SharedPtr<Aspose::Pdf::Optimization::OptimizationOptions> options = MakeObject<Aspose::Pdf::Optimization::OptimizationOptions>();

// また
// PDFのすべてのフォントの埋め込みを解除します
options->set_UnembedFonts(true);

// また
// 使用済み文字の埋め込みフォントのみを保持する
options->set_SubsetFonts(true);

// 重複するストリームをリンクする
options->set_LinkDuplcateStreams(false);

// 未使用のストリームを削除します
options->set_RemoveUnusedStreams(false);

// 未使用のオブジェクトを削除します
options->set_RemoveUnusedObjects(false);

// ドキュメント内のリソースを最適化する
pdfDocument->OptimizeResources(options);

// PDFドキュメントを保存します
pdfDocument->Save(u"OutputDirectory\\Remove_Embedded_Fonts_Output.pdf");

C++を使用して注釈を削除またはフラット化する

PDFファイルには、テキストや図形などの複数の注釈があり、ファイルサイズが大きくなる可能性があります。これらの注釈は、不要になった場合は削除でき、それ以上の変更が必要ない場合は平坦化できます。これを行うと、PDFファイルのサイズが小さくなります。以下は、PDFファイルから注釈を削除またはフラット化する手順です。

次のサンプルコードは、C++を使用してPDFファイルの注釈を削除またはフラット化する方法を示しています。

// PdfAnnotationEditorクラスのインスタンスを作成します
System::SharedPtr<Aspose::Pdf::Facades::PdfAnnotationEditor> annotationEditor = System::MakeObject<Aspose::Pdf::Facades::PdfAnnotationEditor>();

// サンプルPDFファイルをロードします
annotationEditor->BindPdf(u"SourceDirectory\\PDF\\AnnotationSample.pdf");

// また
// 注釈を平坦化する
annotationEditor->FlatteningAnnotations();

// または
// 注釈を削除する
//annotationEditor->DeleteAnnotations();

// PDFドキュメントを保存します
annotationEditor->Save(u"OutputDirectory\\Remove_Annotations_Output.pdf");

C++を使用したPDFファイルからのフォームフィールドの削除

データを収集する必要がある場合は、フォームフィールドが必要です。データ収集が不要になった場合は、フォームフィールドをフラット化してPDFファイルサイズを小さくすることができます。以下は、PDFファイルのフォームフィールドをフラット化する手順です。

  • Documentクラスを使用してPDFファイルをロードします。
  • フォームフィールドの存在を確認します。
  • フォームフィールドを繰り返し処理し、各フィールドをフラット化します。
  • Document->Save(System::String outputFileName)メソッドを使用してPDFファイルを保存します。

次のサンプルコードは、C++を使用してPDFファイルのフォームフィールドをフラット化する方法を示しています。

// PDFドキュメントを開く
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\PDF\\Fillable_PDF_Form.pdf");

if (pdfDocument->get_Form()->get_Fields()->get_Length() > 0)
{
	// フォームフィールドを反復処理します
	for (System::SharedPtr<Field> field : pdfDocument->get_Form()->get_Fields())
	{
		// フィールドを平らにする
		field->Flatten();
	}
}

// PDFドキュメントを保存します
pdfDocument->Save(u"OutputDirectory\\Flatten_Form_Fields.pdf");

C++を使用してPDFファイルのRGB色空間をグレースケールに変換する

テキスト情報を含むPDFファイルはグレースケールの色空間でうまく表現できるため、ファイルサイズを小さくすることが不可欠な場合は、そのようなPDFファイルをグレースケールに変換できます。さらに、優先順位はファイルをアーカイブし、可能な限りサイズを小さくすることであると想定します。その場合、主な目的はファイルをできるだけ小さくすることであるため、画像を含むPDFファイルをグレースケールに変換することもできます。 PDFファイルの色空間をRGBからグレースケールに変更するには、以下の手順に従います。

次のサンプルコードは、C++を使用してPDFファイルの色空間をRGBからグレースケールに変換する方法を示しています。

// PDFドキュメントを開く
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\PDF\\Sample 1.pdf");

System::SharedPtr<RgbToDeviceGrayConversionStrategy> strategy = MakeObject<RgbToDeviceGrayConversionStrategy>();

for (int idxPage = 1; idxPage <= pdfDocument->get_Pages()->get_Count(); idxPage++) {
	System::SharedPtr<Page> page = pdfDocument->get_Pages()->idx_get(idxPage);

	// 各ページの色空間をグレースケールに変換します
	strategy->Convert(page);
}

// PDFドキュメントを保存します
pdfDocument->Save(u"OutputDirectory\\Grayscale_PDF_Output.pdf");

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

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

結論

この記事の目的は、PDFファイルを圧縮および最適化してサイズを縮小するさまざまな方法を検討することでした。まず、Web用にPDFファイルを最適化する方法を検討しました。次に、PDFファイルの画像を圧縮およびサイズ変更する方法を確認しました。さらに、PDFファイルから埋め込みフォントとストリームを削除する方法を学びました。これに加えて、注釈とフォームフィールドをフラット化し、PDFファイルの色空間をグレースケールに変換する方法を学びました。品質に影響を与えることなくPDFファイルのサイズを縮小するために、これらすべての方法を検討しました。 Aspose.PDF for C++は、PDFファイルを操作するための多くの追加機能を提供します。 公式ドキュメントにアクセスすると、APIの詳細を調べることができます。ご不明な点がございましたら、無料サポートフォーラムまでお気軽にお問い合わせください。

関連項目