電子文書の交換、アーカイブ、印刷などの特定のターゲットのニーズに合わせてPDF文書を最適化・圧縮します。
PDFの作成プロセスでは特定の対象アプリケーション向けに最適化されていないPDFが生成されることが少なくありません。
ファイル サイズが大きいくダウンロードに時間が必要な場合や、同じフォントが複数回埋め込まれている場合などは印刷に時間を要する場合があります。
Pdftools SDK を使用すると、さまざまな構成オプションを使用して特定の用途に見合った出力を作成できます。
この機能は、冗長情報や代替情報の削除、フォントのサブセット化と合成、画像のダウンサンプリングなどを実行し、ページ内容や文書構造を圧縮・最適化します。
APIリファレンスはこちらです。
一般に画像はファイルサイズを大幅に増加させることがあります。Pdftools SDK は画像オブジェクトを最適化し、画像タイプによる画像圧縮の設定、圧縮アルゴリズムと圧縮品質の選択、カラー プロファイルやカラー チャネルなどのカラー管理オプションの設定などによって画像オブジェクトの一部または全体の変換や削除をします。
圧縮処理
画像オブジェクトの処理
カラー・マネージメント
PDF ドキュメントを追加しない場合はPDFにフォントを埋め込む必要はありません。
既存のフォントプログラムをサブセット化してドキュメントの再現に必要のない未使用のグリフをすべて削除できます。
標準フォントの削除や、フォントとフォントプログラムを結合するタイミングを決定できます。
不要なオブジェクトは理由もなくファイル サイズを大きくします。
これらの未使用、冗長、不要なオブジェクトを削除してファイル サイズを縮小し、レンダリングを高速化できます。
C#のサンプルプロジェクトではPdftools SDKライブラリ(DLL)をNuGetから自動でダウンロードします。
CのサンプルプロジェクトにはPdftools SDKライブラリ(DLL)が含まれています。
ライセンスキー無し(無償)で試用できます。ただし、結果に「透かし」が入ります。
「透かし」の削除をご希望の場合は問い合わせページまたはメールでお問い合わせください。
License Agreement(利用許諾契約書)が含まれていますので必ず確認してください。
"Web"最適化プロファイルを使用してPDF文書を最適化します。
// 入力PDFファイルを開く
pInStream = _tfopen(szInPath, _T("rb"));
GOTO_CLEANUP_IF_NULL_PRINT_ERROR(pInStream, _T("Failed to open the input file \"%s\" for reading.\n"), szInPath);
TPdfToolsSys_StreamDescriptor inDesc;
PdfToolsSysCreateFILEStreamDescriptor(&inDesc, pInStream, 0);
pInDoc = PdfToolsPdf_Document_Open(&inDesc, _T(""));
GOTO_CLEANUP_IF_NULL_PRINT_ERROR(
pInDoc, _T("Failed to create a document from the input file \"%s\". %s (ErrorCode: 0x%08x).\n"), szInPath,
szErrorBuff, PdfTools_GetLastError());
// 書き込み用の出力ストリームを生成
pOutStream = _tfopen(szOutPath, _T("wb+"));
GOTO_CLEANUP_IF_NULL_PRINT_ERROR(pOutStream, _T("Failed to open the output file \"%s\" for writing.\n"), szOutPath);
TPdfToolsSys_StreamDescriptor outDesc;
PdfToolsSysCreateFILEStreamDescriptor(&outDesc, pOutStream, 0);
// 最適化パラメータを定義するプロファイルを生成
// Webプロファイルは、電子文書交換用に文書を最適化するのに適しています。
pProfile = (TPdfToolsOptimizationProfiles_Profile*)PdfToolsOptimizationProfiles_Web_New();
// オプション:最適化プロセスの要件に応じてプロファイルのパラメータを変更できます。
// PDF文書を最適化
pOptimizer = PdfToolsOptimization_Optimizer_New();
pOutDoc = PdfToolsOptimization_Optimizer_OptimizeDocument(pOptimizer, pInDoc, &outDesc, pProfile, NULL);
GOTO_CLEANUP_IF_NULL_PRINT_ERROR(pOutDoc, _T("The processing has failed. (ErrorCode: 0x%08x).\n"),
PdfTools_GetLastError());
private static void Optimize(string inPath, string outPath)
{
// 入力PDFファイルを開く
using var inStr = File.OpenRead(inPath);
using var inDoc = Document.Open(inStr);
// 最適化パラメータを定義するプロファイルを生成
// Webプロファイルは、電子文書交換用に文書を最適化するのに適しています。
var profile = new Profiles.Web();
// オプション:最適化プロセスの要件に応じてプロファイルのパラメータを変更できます。
// 出力ストリームを生成
using var outStr = File.Create(outPath);
// PDF文書を最適化
using var outDoc = new Optimizer().OptimizeDocument(inDoc, outStr, profile);
}
def optimize_pdf(input_path: str, output_path: str):
# 入力PDFファイルを開く
with io.FileIO(input_path, 'rb') as input_stream:
with Document.open(input_stream) as input_document:
# 最適化パラメータを定義するプロファイルを生成
# Webプロファイルは、電子文書交換用に文書を最適化するのに適しています。
profile = Web()
# オプション:最適化プロセスの要件に応じてプロファイルのパラメータを変更できます。
# 出力ストリームを生成
with io.FileIO(output_path, 'wb+') as output_stream:
# PDF文書を最適化
optimizer = Optimizer()
optimizer.optimize_document(input_document, output_stream, profile)
optimize_pdf(input_path, output_path)
PDF文書の注釈(アノテーション)をフラット化することで最適化します。
この最適化によって注釈は静的コンテンツに変換されます。
// 入力PDFファイルを開く
pInStream = _tfopen(szInPath, _T("rb"));
GOTO_CLEANUP_IF_NULL_PRINT_ERROR(pInStream, _T("Failed to open the input file \"%s\" for reading.\n"), szInPath);
TPdfToolsSys_StreamDescriptor inDesc;
PdfToolsSysCreateFILEStreamDescriptor(&inDesc, pInStream, 0);
pInDoc = PdfToolsPdf_Document_Open(&inDesc, _T(""));
GOTO_CLEANUP_IF_NULL_PRINT_ERROR(
pInDoc, _T("Failed to create a document from the input file \"%s\". %s (ErrorCode: 0x%08x).\n"), szInPath,
szErrorBuff, PdfTools_GetLastError());
// 書き込み用の出力ストリームを生成
pOutStream = _tfopen(szOutPath, _T("wb+"));
GOTO_CLEANUP_IF_NULL_PRINT_ERROR(pOutStream, _T("Failed to open the output file \"%s\" for writing.\n"), szOutPath);
TPdfToolsSys_StreamDescriptor outDesc;
PdfToolsSysCreateFILEStreamDescriptor(&outDesc, pOutStream, 0);
// 最適化パラメータを定義するプロファイルを生成
// MinimalFileSizeプロファイルは、最小限のファイルサイズを生成するために使用されます。
pProfile = (TPdfToolsOptimizationProfiles_Profile*)PdfToolsOptimizationProfiles_MinimalFileSize_New();
// オプション:最適化プロセスの要件に応じてプロファイルのパラメータを変更できます。
// プロファイルを設定して注釈をフラット化します(フォームとリンクを含めます)
TPdfToolsOptimization_RemovalOptions* pRemovalOptions =
PdfToolsOptimizationProfiles_Profile_GetRemovalOptions(pProfile);
PdfToolsOptimization_RemovalOptions_SetAnnotations(pRemovalOptions,
ePdfToolsOptimization_ConversionStrategy_Flatten);
PdfToolsOptimization_RemovalOptions_SetFormFields(pRemovalOptions,
ePdfToolsOptimization_ConversionStrategy_Flatten);
PdfToolsOptimization_RemovalOptions_SetLinks(pRemovalOptions, ePdfToolsOptimization_ConversionStrategy_Flatten);
// ドキュメントを最適化
pOptimizer = PdfToolsOptimization_Optimizer_New();
pOutDoc = PdfToolsOptimization_Optimizer_OptimizeDocument(pOptimizer, pInDoc, &outDesc, pProfile, NULL);
GOTO_CLEANUP_IF_NULL_PRINT_ERROR(pOutDoc, _T("The processing has failed. (ErrorCode: 0x%08x).\n"),
PdfTools_GetLastError());
private static void FlattenAnnotations(string inPath, string outPath)
{
// 入力PDFファイルを開く
using var inStr = File.OpenRead(inPath);
using var inDoc = Document.Open(inStr);
// 最適化パラメータを定義するプロファイルを生成
// MinimalFileSizeプロファイルは最小限のファイルサイズを生成するために使用されます。
var profile = new Profiles.MinimalFileSize();
// オプション:最適化プロセスの要件に応じてプロファイルのパラメータを変更できます。
profile.RemovalOptions.Annotations = ConversionStrategy.Flatten;
profile.RemovalOptions.FormFields = ConversionStrategy.Flatten;
profile.RemovalOptions.Links = ConversionStrategy.Flatten;
// 出力ストリームを生成
using var outStr = File.Create(outPath);
// ドキュメントを最適化
using var outDoc = new Optimizer().OptimizeDocument(inDoc, outStr, profile);
}
def flatten_annotations(input_path: str, output_path: str):
# 入力PDFファイルを開く
with io.FileIO(input_path, 'rb') as in_stream:
with Document.open(in_stream) as input_document:
# ファイルサイズを最小化するための最適化プロファイルを生成
profile = MinimalFileSize()
# 注釈、フォームフィールド、リンクをフラット化する
profile.removal_options.annotations = ConversionStrategy.FLATTEN
profile.removal_options.form_fields = ConversionStrategy.FLATTEN
profile.removal_options.links = ConversionStrategy.FLATTEN
# 出力ストリームを生成
with io.FileIO(output_path, 'wb+') as output_stream:
# ドキュメントを最適化
optimizer = Optimizer()
optimizer.optimize_document(input_document, output_stream, profile)
flatten_annotations(input_path, output_path)
他の機能サンプルを参照してください。
質問のページからお送りいただくようお願いします。
または、メールでsupport@trustss.co.jpあてにお送りください。
ご購入前の技術的質問も無償で対応します。サポート受付ページからお願いします。