PDF Optimizer(PDF最適化) サンプル コード
PDF を最適化 概要
「PDF Optimizer」ソフトは、PDF文書を特定のアプリケーション(Web閲覧や文書交換など)向けにPDFファイルサイズを縮小します。
価格見積り
・画像のダウンサンプリングや最適な再圧縮
・PDFファイルに埋め込まれたフォントを統合、サブセット化
・Web表示のためにリニアライズ
・色空間をRGBに変換
・画像の最適な再圧縮
・PDFファイルに埋め込まれたフォントを統合、サブセット化
・画像のダウンサンプリングや最適な再圧縮
・PDFファイルに埋め込まれたフォントを統合、サブセット化
・色空間をCMYKに変換
「PDF Optimizer」機能概要
無償評価版(リンク先は英語)
価格見積り
Web用設定
・表示や文書交換に不要なデータをPDFファイルから削除・画像のダウンサンプリングや最適な再圧縮
・PDFファイルに埋め込まれたフォントを統合、サブセット化
・Web表示のためにリニアライズ
・色空間をRGBに変換
アーカイブ(文書保存)用設定
・文書の保存に不要なデータをPDFファイルから削除・画像の最適な再圧縮
・PDFファイルに埋め込まれたフォントを統合、サブセット化
印刷用設定
・印刷に不要なデータをPDFファイルから削除・画像のダウンサンプリングや最適な再圧縮
・PDFファイルに埋め込まれたフォントを統合、サブセット化
・色空間をCMYKに変換
「PDF Optimizer」機能概要
無償評価版(リンク先は英語)
無償評価版のダウンロードとインストール
C#開発環境 | C/C++開発環境 |
1.Zipファイルをダウンロードする場合
ライブラリ(評価版API)は無償でダウンロードできます。
ファイルをダウンロードしてから適当なフォルダーに解凍してください。
以下のようなフォルダーができあがりますので、適宜ご利用ください。
サンプルの実行前に参照設定などを行ってください。
無償評価版と共にダウンロードしたライセンスキーを bin/LicenseManager.exeを使って登録してください。
ファイルをダウンロードしてから適当なフォルダーに解凍してください。
以下のようなフォルダーができあがりますので、適宜ご利用ください。
bin | ライブラリやライセンスマネージャーなど |
doc | 使用説明書やjavadocなど |
include | C/C++用のヘッダー(.h)ファイル |
jar | POLA.jar(Javaのラッパー) |
lib | C/C++用のlibファイル |
samples | 各種開発言語のサンプル |
無償評価版と共にダウンロードしたライセンスキーを bin/LicenseManager.exeを使って登録してください。
2.NuGetでインストールする場合
nuget.org から PdfTools.PdfOptimize をインストールします。
NuGetでのインストール手順
この場合は参照設定などの必要はありません。
評価用ライセンスは 以下のソースコードまたは、こちら から取得してください。
NuGetでのインストール手順
この場合は参照設定などの必要はありません。
評価用ライセンスは 以下のソースコードまたは、こちら から取得してください。
C#開発環境 | C/C++開発環境 |
ライブラリ(評価版API)は無償でダウンロードできます。
ファイルをダウンロードしてから適当なフォルダーに解凍してください。
以下のようなフォルダーができあがりますので、適宜ご利用ください。
サンプルの実行前に参照設定などを行ってください。
無償評価版と共にダウンロードしたライセンスキーを bin/LicenseManager.exeを使って登録してください。
ファイルをダウンロードしてから適当なフォルダーに解凍してください。
以下のようなフォルダーができあがりますので、適宜ご利用ください。
bin | ライブラリやライセンスマネージャーなど |
doc | 使用説明書やjavadocなど |
include | C/C++用のヘッダー(.h)ファイル |
jar | POLA.jar(Javaのラッパー) |
lib | C/C++用のlibファイル |
samples | 各種開発言語のサンプル |
無償評価版と共にダウンロードしたライセンスキーを bin/LicenseManager.exeを使って登録してください。
PDFファイルのサイズをアーカイブ用に縮小
PDF文書の表示内容を変更せずにファイルサイズを縮小するサンプルコードです。
縮小は、
縮小は、
- 冗長なオブジェクトの削除
- 埋め込まれたフォントをマージし未使用のグリフを削除
- リソースの最適化
- 画像タイプに応じて縮小
C# | C/C++ | ダウンロード |
// Optimizer生成 pOptimizer = PdfOptimizeCreateObject(); // Archiveプロファイルを選択 PdfOptimizeSetProfile(pOptimizer, eOptimizationProfileArchive); // 入力ファイルをオープン if (!PdfOptimizeOpen(pOptimizer, szInputPath, _T(""))) { _tprintf(_T("入力ファイル %s をオープンできません。 %s (エラーコード: 0x%08x).\n"), szInputPath, PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer)); iReturnValue = 1; goto cleanup; } // PDFファイルを出力 if (!PdfOptimizeSaveAs(pOptimizer, szOutputPath, _T(""), _T(""), ePermNoEncryption)) { _tprintf(_T("出力ファイル %s を作成できません。 %s (エラーコード: 0x%08x).\n"), szOutputPath, PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer)); iReturnValue = 1; goto cleanup; } // 入力ファイルをクローズ if (!PdfOptimizeClose(pOptimizer)) { _tprintf(_T("入力ファイル %s をクローズできません。 %s (エラーコード: 0x%08x).\n"), szInputPath, PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer)); iReturnValue = 1; goto cleanup; } _tprintf(_T("終了"));
C# | C/C++ | ダウンロード |
// Optimizerオブジェクト生成 using (Optimizer optimizer = new Optimizer()) { // Archiveプロファイルを選択 optimizer.Profile = PDFOptimizationProfile.eOptimizationProfileArchive; // 入力ファイルをオープン if (!optimizer.Open(inputPath, "")) throw new Exception(String.Format("入力ファイル {0} をオープンできません " + "{1} (エラー: 0x{2:x}).", inputPath, optimizer.ErrorMessage, optimizer.ErrorCode)); // PDFファイルを出力 if (!optimizer.SaveAs(outputPath, "", "", PDFPermission.ePermNoEncryption)) throw new Exception(String.Format("出力ファイル {0} を作成できません " + "{1} (エラー: 0x{2:x}).", outputPath, optimizer.ErrorMessage, optimizer.ErrorCode)); // 入力ファイルをクローズ if (!optimizer.Close()) throw new Exception(String.Format("入力ファイル {0} をクローズできません " + "{1} (エラー: 0x{2:x}).", inputPath, optimizer.ErrorMessage, optimizer.ErrorCode)); } Console.WriteLine("終了");
PDFファイルのサイズを小さく
大きな画像が含まれたPDFファイルのサイズを小さくするサンプルです。
縮小は、スキャンされた画像のページ縮小、テキストの読みやすさを維持した縮小などです。 これらは、画像を前景・背景・マスクレイヤーに分割することで実現します。
前景と背景は大幅にダウンサンプリングされそして圧縮されます。
テキスト情報はロスレス圧縮されマスクに格納されます。
さらに、冗長なオブジェクトが削除、リソースの最適化、埋込フォントのマージが実施されます。
縮小は、スキャンされた画像のページ縮小、テキストの読みやすさを維持した縮小などです。 これらは、画像を前景・背景・マスクレイヤーに分割することで実現します。
前景と背景は大幅にダウンサンプリングされそして圧縮されます。
テキスト情報はロスレス圧縮されマスクに格納されます。
さらに、冗長なオブジェクトが削除、リソースの最適化、埋込フォントのマージが実施されます。
C# | C/C++ | ダウンロード |
// Optimizer生成 pOptimizer = PdfOptimizeCreateObject(); // MRCプロファイルを選択 PdfOptimizeSetProfile(pOptimizer, eOptimizationProfileMRC); // MRC 背景と前景レイヤの解像度を指定 PdfOptimizeSetMrcLayerResolutionDPI(pOptimizer, fResolution); // 入力ファイルをオープン if (!PdfOptimizeOpen(pOptimizer, szInputPath, _T(""))) { _tprintf(_T("入力ファイル %s をオープンできません。 %s (エラーコード: 0x%08x).\n"), szInputPath, PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer)); iReturnValue = 1; goto cleanup; } // PDFファイルを出力 if (!PdfOptimizeSaveAs(pOptimizer, szOutputPath, _T(""), _T(""), ePermNoEncryption)) { _tprintf(_T("出力ファイル %s を作成できません。 %s (エラーコード: 0x%08x).\n"), szOutputPath, PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer)); iReturnValue = 1; goto cleanup; } // 入力ファイルをクローズ if (!PdfOptimizeClose(pOptimizer)) { _tprintf(_T("入力ファイル %s をクローズできません。 %s (エラーコード: 0x%08x).\n"), szInputPath, PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer)); iReturnValue = 1; goto cleanup; } _tprintf(_T("終了"));
C# | C/C++ | ダウンロード |
// Optimizerオブジェクト生成 using (Optimizer optimizer = new Optimizer()) { // MRCプロファイルを選択 optimizer.Profile = PDFOptimizationProfile.eOptimizationProfileMRC; // MRC 背景と前景レイヤの解像度を指定 optimizer.MrcLayerResolutionDPI = resolution; // 入力ファイルをオープン if (!optimizer.Open(inputPath, "")) throw new Exception(String.Format("入力ファイル {0} をオープンできません " + "{1} (エラー: 0x{2:x}).", inputPath, optimizer.ErrorMessage, optimizer.ErrorCode)); // PDFファイルを出力 if (!optimizer.SaveAs(outputPath, "", "", PDFPermission.ePermNoEncryption)) throw new Exception(String.Format("出力ファイル {0} を作成できません " + "{1} (エラー: 0x{2:x}).", outputPath, optimizer.ErrorMessage, optimizer.ErrorCode)); // 入力ファイルをクローズ if (!optimizer.Close()) throw new Exception(String.Format("入力ファイル {0} をクローズできません " + "{1} (エラー: 0x{2:x}).", inputPath, optimizer.ErrorMessage, optimizer.ErrorCode)); } Console.WriteLine("終了");
PDFファイルのフォントサイズを縮小
複数の埋め込まれたフォントプログラムをマージし、使われていないグリフを削除します。
さらに、Type1フォントプログラムはCFF(Compact Font Formt)に変換します。
さらに、Type1フォントプログラムはCFF(Compact Font Formt)に変換します。
C# | C/C++ | ダウンロード |
// Optimizer生成 pOptimizer = PdfOptimizeCreateObject(); // 埋込フォントのサブセット指定およびマージ(結合)指定 PdfOptimizeSetSubsetFonts(pOptimizer, 1); PdfOptimizeSetMergeEmbeddedFonts(pOptimizer, 1); // Type1フォントをCFF(Compact Font Format)に変換設定 PdfOptimizeSetConvertToCFF(pOptimizer, 1); // 入力ファイルをオープン if (!PdfOptimizeOpen(pOptimizer, szInputPath, _T(""))) { _tprintf(_T("入力ファイル %s をオープンできません。 %s (エラーコード: 0x%08x).\n"), szInputPath, PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer)); iReturnValue = 1; goto cleanup; } // PDFファイルを出力 if (!PdfOptimizeSaveAs(pOptimizer, szOutputPath, _T(""), _T(""), ePermNoEncryption)) { _tprintf(_T("出力ファイル %s を作成できません。 %s (エラーコード: 0x%08x).\n"), szOutputPath, PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer)); iReturnValue = 1; goto cleanup; } // 入力ファイルをクローズ if (!PdfOptimizeClose(pOptimizer)) { _tprintf(_T("入力ファイル %s をクローズできません。 %s (エラーコード: 0x%08x).\n"), szInputPath, PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer)); iReturnValue = 1; goto cleanup; } _tprintf(_T("終了"));
C# | C/C++ | ダウンロード |
// Optimizerオブジェクト生成 using (Optimizer optimizer = new Optimizer()) { // 埋込フォントのサブセット指定およびマージ(結合)指定 optimizer.SubsetFonts = true; optimizer.MergeEmbeddedFonts = true; // Type1フォントをCFF(Compact Font Format)に変換設定 optimizer.ConvertToCFF = true; // 入力ファイルをオープン if (!optimizer.Open(inputPath, "")) throw new Exception(String.Format("入力ファイル {0} をオープンできません " + "{1} (エラー: 0x{2:x}).", inputPath, optimizer.ErrorMessage, optimizer.ErrorCode)); // PDFファイルを出力 if (!optimizer.SaveAs(outputPath, "", "", PDFPermission.ePermNoEncryption)) throw new Exception(String.Format("出力ファイル {0} を作成できません " + "{1} (エラー: 0x{2:x}).", outputPath, optimizer.ErrorMessage, optimizer.ErrorCode)); // 入力ファイルをクローズ if (!optimizer.Close()) throw new Exception(String.Format("Input file {0} cannot be closed. " + "{1} (エラー: 0x{2:x}).", inputPath, optimizer.ErrorMessage, optimizer.ErrorCode)); } Console.WriteLine("終了");
PDFファイルの画像を縮小
PDFファイルに埋め込まれた画像をダウンサンプリングして再圧縮することで、ファイルサイズを縮小します。
このサンプルでは、目的の解像度を設定し、圧縮タイプをOptimiserが自動的に選択するよう指定します。
非可逆圧縮タイプの画像品質を指定することもできます。
このサンプルでは、目的の解像度を設定し、圧縮タイプをOptimiserが自動的に選択するよう指定します。
非可逆圧縮タイプの画像品質を指定することもできます。
C# | C/C++ | ダウンロード |
// Optimizer生成 pOptimizer = PdfOptimizeCreateObject(); // 必要な圧縮タイプを設定 PdfOptimizeSetBitonalCompressions(pOptimizer, eComprAttemptGroup4 | eComprAttemptJBIG2 | eComprAttemptSource); PdfOptimizeSetContinuousCompressions(pOptimizer, eComprAttemptJPEG | eComprAttemptJPEG2000 | eComprAttemptSource); PdfOptimizeSetIndexedCompressions(pOptimizer, eComprAttemptFlate | eComprAttemptLZW | eComprAttemptSource); // ダウンサンプリングするターゲット解像度を設定 PdfOptimizeSetResolutionDPI(pOptimizer, fResolution); // 解像度がターゲット解像度の130%を超える場合に、画像をダウンサンプリングする設定 PdfOptimizeSetThresholdDPI(pOptimizer, 1.3f * PdfOptimizeGetResolutionDPI(pOptimizer)); // 二値画像の高解像度を設定 PdfOptimizeSetBitonalResolutionDPI(pOptimizer, 1.2f * fResolution); PdfOptimizeSetBitonalThresholdDPI(pOptimizer, 1.3f * PdfOptimizeGetBitonalResolutionDPI(pOptimizer)); // 画像品質設定(不可逆圧縮の場合) PdfOptimizeSetImageQuality(pOptimizer, iQuality); // 画像の見えない部分をクリップする(切り取る)設定 PdfOptimizeSetClipImages(pOptimizer, 1); // 画像の色空間を可能な限り複雑でないものに変換する設定 PdfOptimizeSetReduceColorComplexity(pOptimizer, 1); // 入力ファイルをオープン if (!PdfOptimizeOpen(pOptimizer, szInputPath, _T(""))) { _tprintf(_T("入力ファイル %s をオープンできません。 %s (エラーコード: 0x%08x).\n"), szInputPath, PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer)); iReturnValue = 1; goto cleanup; } // PDFファイルを出力 if (!PdfOptimizeSaveAs(pOptimizer, szOutputPath, _T(""), _T(""), ePermNoEncryption)) { _tprintf(_T("出力ファイル %s を作成できません。 %s (エラーコード: 0x%08x).\n"), szOutputPath, PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer)); iReturnValue = 1; goto cleanup; } // 入力ファイルをクローズ if (!PdfOptimizeClose(pOptimizer)) { _tprintf(_T("入力ファイル %s をクローズできません。 %s (エラーコード: 0x%08x).\n"), szInputPath, PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer)); iReturnValue = 1; goto cleanup; } _tprintf(_T("終了"));
C# | C/C++ | ダウンロード |
// Optimizerオブジェクト生成 using (Optimizer optimizer = new Optimizer()) { // 必要な圧縮タイプを設定 optimizer.BitonalCompressions = PDFComprAttempt.eComprAttemptGroup4 | PDFComprAttempt.eComprAttemptJBIG2 | PDFComprAttempt.eComprAttemptSource; optimizer.ContinuousCompressions = PDFComprAttempt.eComprAttemptJPEG | PDFComprAttempt.eComprAttemptJPEG2000 | PDFComprAttempt.eComprAttemptSource; optimizer.IndexedCompressions = PDFComprAttempt.eComprAttemptFlate | PDFComprAttempt.eComprAttemptLZW | PDFComprAttempt.eComprAttemptSource; // ダウンサンプリングするターゲット解像度を設定 optimizer.ResolutionDPI = resolution; // 解像度がターゲット解像度の130%を超える場合に、画像をダウンサンプリングする設定 optimizer.ThresholdDPI = (float)1.3 * optimizer.ResolutionDPI; // 二値画像の高解像度を設定 optimizer.BitonalResolutionDPI = (float)1.2 * resolution; optimizer.BitonalThresholdDPI = (float)1.3 * optimizer.BitonalResolutionDPI; // 画像品質設定(不可逆圧縮の場合) optimizer.ImageQuality = quality; // 画像の見えない部分をクリップする(切り取る)設定 optimizer.ClipImages = true; // 画像の色空間を可能な限り複雑でないものに変換する設定 optimizer.ReduceColorComplexity = true; // 入力ファイルをオープン if (!optimizer.Open(inputPath, "")) throw new Exception(String.Format("入力ファイル {0} をオープンできません " + "{1} (エラー: 0x{2:x}).", inputPath, optimizer.ErrorMessage, optimizer.ErrorCode)); // PDFファイルを出力 if (!optimizer.SaveAs(outputPath, "", "", PDFPermission.ePermNoEncryption)) throw new Exception(String.Format("出力ファイル {0} を作成できません " + "{1} (エラー: 0x{2:x}).", outputPath, optimizer.ErrorMessage, optimizer.ErrorCode)); // 入力ファイルをクローズ if (!optimizer.Close()) throw new Exception(String.Format("入力ファイル {0} をクローズできません " + "{1} (エラー: 0x{2:x}).", inputPath, optimizer.ErrorMessage, optimizer.ErrorCode)); } Console.WriteLine("終了");
PDF文書を印刷用に縮小
PDFファイル全体のサイズを縮小しフォントをマージおよびサブセット化してより小さなスプールファイルを作成することで、プリンターのメモリ使用量を減少させます。
C# | C/C++ | ダウンロード |
// Optimizer生成 pOptimizer = PdfOptimizeCreateObject(); // 印刷プロファイルを選択 PdfOptimizeSetProfile(pOptimizer, eOptimizationProfilePrint); // 入力ファイルをオープン if (!PdfOptimizeOpen(pOptimizer, szInputPath, _T(""))) { _tprintf(_T("入力ファイル %s をオープンできません。 %s (エラーコード: 0x%08x).\n"), szInputPath, PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer)); iReturnValue = 1; goto cleanup; } // PDFファイルを出力 if (!PdfOptimizeSaveAs(pOptimizer, szOutputPath, _T(""), _T(""), ePermNoEncryption)) { _tprintf(_T("出力ファイル %s を作成できません。 %s (エラーコード: 0x%08x).\n"), szOutputPath, PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer)); iReturnValue = 1; goto cleanup; } // 入力ファイルをクローズ if (!PdfOptimizeClose(pOptimizer)) { _tprintf(_T("入力ファイル %s をクローズできません。 %s (エラーコード: 0x%08x).\n"), szInputPath, PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer)); iReturnValue = 1; goto cleanup; } _tprintf(_T("終了"));
C# | C/C++ | ダウンロード |
// Optimizerオブジェクト生成 using (Optimizer optimizer = new Optimizer()) { // 印刷の最適化指定 optimizer.Profile = PDFOptimizationProfile.eOptimizationProfilePrint; // 入力ファイルをオープン if (!optimizer.Open(inputPath, "")) throw new Exception(String.Format("入力ファイル {0} をオープンできません " + "{1} (エラー: 0x{2:x}).", inputPath, optimizer.ErrorMessage, optimizer.ErrorCode)); // PDFファイルを出力 if (!optimizer.SaveAs(outputPath, "", "", PDFPermission.ePermNoEncryption)) throw new Exception(String.Format("出力ファイル {0} を作成できません {1} " + "(エラー: 0x{2:x}).", outputPath, optimizer.ErrorMessage, optimizer.ErrorCode)); // 入力ファイルをクローズ if (!optimizer.Close()) throw new Exception(String.Format("入力ファイル {0} をクローズできません {1} " + "(エラー: 0x{2:x}).", inputPath, optimizer.ErrorMessage, optimizer.ErrorCode)); } Console.WriteLine("終了");
PDFファイルをWeb用に最適化
PDFファイルのサイズを縮小して、Webサーバーのメモリ使用量を削減すると共にダウンロード時間を減らします。
出力PDFファイルはリニアライズされます。リニアライズとは、PDF文書全体がダウンロードされる前にそのコンテンツが表示されるようにすることです。
出力PDFファイルはリニアライズされます。リニアライズとは、PDF文書全体がダウンロードされる前にそのコンテンツが表示されるようにすることです。
C# | C/C++ | ダウンロード |
// Optimizer生成 pOptimizer = PdfOptimizeCreateObject(); // Web/e-mailプロファイルを選択 PdfOptimizeSetProfile(pOptimizer, eOptimizationProfileWeb); // Auto-linearization(自動リニアライズ)を無効 PdfOptimizeSetAutoLinearize(pOptimizer, 0); // リニアライズを指定 PdfOptimizeSetLinearize(pOptimizer, bLinearize); // 入力ファイルをオープン if (!PdfOptimizeOpen(pOptimizer, szInputPath, _T(""))) { _tprintf(_T("入力ファイル %s をオープンできません。 %s (エラーコード: 0x%08x).\n"), szInputPath, PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer)); iReturnValue = 1; goto cleanup; } // PDFファイルを出力 if (!PdfOptimizeSaveAs(pOptimizer, szOutputPath, _T(""), _T(""), ePermNoEncryption)) { _tprintf(_T("出力ファイル %s を作成できません。 %s (エラーコード: 0x%08x).\n"), szOutputPath, PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer)); iReturnValue = 1; goto cleanup; } // 入力ファイルをクローズ if (!PdfOptimizeClose(pOptimizer)) { _tprintf(_T("入力ファイル %s をクローズできません。 %s (エラーコード: 0x%08x).\n"), szInputPath, PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer)); iReturnValue = 1; goto cleanup; } _tprintf(_T("終了"));
C# | C/C++ | ダウンロード |
// Optimizerオブジェクト生成 using (Optimizer optimizer = new Optimizer()) { // WebとE-メールの最適化指定 optimizer.Profile = PDFOptimizationProfile.eOptimizationProfileWeb; // Auto-Linearization(自動リニアライズ)を無効 optimizer.AutoLinearize = false; // リニアライズを指定 optimizer.Linearize = linearize; // 入力ファイルをオープン if (!optimizer.Open(inputPath, "")) throw new Exception(String.Format("入力ファイル {0} をオープンできません " + "{1} (エラー: 0x{2:x}).", inputPath, optimizer.ErrorMessage, optimizer.ErrorCode)); // PDFファイルを出力 if (!optimizer.SaveAs(outputPath, "", "", PDFPermission.ePermNoEncryption)) throw new Exception(String.Format("出力ファイル {0} を作成できません " + "{1} (エラー: 0x{2:x}).", outputPath, optimizer.ErrorMessage, optimizer.ErrorCode)); // 入力ファイルをクローズ if (!optimizer.Close()) throw new Exception(String.Format("入力ファイル {0} をクローズできません " + "{1} (エラー: 0x{2:x}).", inputPath, optimizer.ErrorMessage, optimizer.ErrorCode)); } Console.WriteLine("終了");
PDF文書の注釈を通常コンテンツに変更
全ての注釈のインタラクティビティ(対話機能)が削除されます。
すなわち、注釈とフォームがPDF文書から削除され、その替わりに同様の視覚的外観が同じ位置に配置されます。
すなわち、注釈とフォームがPDF文書から削除され、その替わりに同様の視覚的外観が同じ位置に配置されます。
C# | C/C++ | ダウンロード |
// Optimizer生成 pOptimizer = PdfOptimizeCreateObject(); // 注釈やフォームを削除し通常の枠や文字などへの変換指定 PdfOptimizeSetStrip(pOptimizer, eStripAnnots | eStripFormsAnnots); // 入力ファイルをオープン if (!PdfOptimizeOpen(pOptimizer, szInputPath, _T(""))) { _tprintf(_T("入力ファイル %s をオープンできません。 %s (エラーコード: 0x%08x).\n"), szInputPath, PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer)); iReturnValue = 1; goto cleanup; } // PDFファイルを出力 if (!PdfOptimizeSaveAs(pOptimizer, szOutputPath, _T(""), _T(""), ePermNoEncryption)) { _tprintf(_T("出力ファイル %s を作成できません。 %s (エラーコード: 0x%08x).\n"), szOutputPath, PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer)); iReturnValue = 1; goto cleanup; } // 入力ファイルをクローズ if (!PdfOptimizeClose(pOptimizer)) { _tprintf(_T("入力ファイル %s をクローズできません。 %s (エラーコード: 0x%08x).\n"), szInputPath, PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer)); iReturnValue = 1; goto cleanup; } _tprintf(_T(("終了"));
C# | C/C++ | ダウンロード |
// Optimizerオブジェクト生成 using (Optimizer optimizer = new Optimizer()) { // 注釈やフォームを削除し通常の枠や文字などへの変換指定 optimizer.Strip = PDFStripType.eStripAnnots | PDFStripType.eStripFormsAnnots; // 入力ファイルをオープン if (!optimizer.Open(inputPath, "")) throw new Exception(String.Format("入力ファイル {0} をオープンできません " + "{1} (エラー: 0x{2:x}).", inputPath, optimizer.ErrorMessage, optimizer.ErrorCode)); // PDFファイルを出力 if (!optimizer.SaveAs(outputPath, "", "", PDFPermission.ePermNoEncryption)) throw new Exception(String.Format("出力ファイル {0} を作成できません " + "{1} (エラー: 0x{2:x}).", outputPath, optimizer.ErrorMessage, optimizer.ErrorCode)); // 入力ファイルをクローズ if (!optimizer.Close()) throw new Exception(String.Format("入力ファイル {0} をクローズできません " + "{1} (エラー: 0x{2:x}).", inputPath, optimizer.ErrorMessage, optimizer.ErrorCode)); } Console.WriteLine("終了");
PDF文書の補足情報を削除
PDF文書に含まれる不必要な情報を削除します。
このサンプルで削除する情報は、です。
このサンプルで削除する情報は、です。
C# | C/C++ | ダウンロード |
// Optimizer生成 pOptimizer = PdfOptimizeCreateObject(); // PDF文書の「追加情報」を削除する指定 PdfOptimizeSetStrip(pOptimizer, eStripAlternates | eStripMetadata | eStripOutputIntents | eStripStructTree | eStripThumb); // 入力ファイルをオープン if (!PdfOptimizeOpen(pOptimizer, szInputPath, _T(""))) { _tprintf(_T("入力ファイル %s をオープンできません。 %s (エラーコード: 0x%08x).\n"), szInputPath, PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer)); iReturnValue = 1; goto cleanup; } // PDFファイルを出力 if (!PdfOptimizeSaveAs(pOptimizer, szOutputPath, _T(""), _T(""), ePermNoEncryption)) { _tprintf(_T("出力ファイル %s を作成できません。 %s (エラーコード: 0x%08x).\n"), szOutputPath, PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer)); iReturnValue = 1; goto cleanup; } // 入力ファイルをクローズ if (!PdfOptimizeClose(pOptimizer)) { _tprintf(_T("入力ファイル %s をクローズできません。 %s (エラーコード: 0x%08x).\n"), szInputPath, PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer)); iReturnValue = 1; goto cleanup; } _tprintf(_T("終了"));
C# | C/C++ | ダウンロード |
// Optimizerオブジェクト生成 using (Optimizer optimizer = new Optimizer()) { // PDF文書の「追加情報」を削除する指定 optimizer.Strip = PDFStripType.eStripAlternates | PDFStripType.eStripMetadata | PDFStripType.eStripOutputIntents | PDFStripType.eStripStructTree | PDFStripType.eStripThumb; // 入力ファイルをオープン if (!optimizer.Open(inputPath, "")) throw new Exception(String.Format("入力ファイル {0} をオープンできません " + "{1} (エラー: 0x{2:x}).", inputPath, optimizer.ErrorMessage, optimizer.ErrorCode)); // PDFファイルを出力 if (!optimizer.SaveAs(outputPath, "", "", PDFPermission.ePermNoEncryption)) throw new Exception(String.Format("出力ファイル {0} を作成できません " + "{1} (エラー: 0x{2:x}).", outputPath, optimizer.ErrorMessage, optimizer.ErrorCode)); // 入力ファイルをクローズ if (!optimizer.Close()) throw new Exception(String.Format("入力ファイル {0} をクローズできません " + "{1} (エラー: 0x{2:x}).", inputPath, optimizer.ErrorMessage, optimizer.ErrorCode)); } Console.WriteLine("終了");
PDF文書を暗号化
暗号化されたPDF文書を作成します。このPDF文書を開くにはパスワードが必要になります。
ここでは、PDF文書をユーザーパスワードを入力して開くと注釈を作成できますが、
全ての操作(変更や印刷など)を実施するには所有者(オーナー)パスワードが必要です。
ここでは、PDF文書をユーザーパスワードを入力して開くと注釈を作成できますが、
全ての操作(変更や印刷など)を実施するには所有者(オーナー)パスワードが必要です。
C# | C/C++ | ダウンロード |
// Optimizer生成 pOptimizer = PdfOptimizeCreateObject(); // 入力ファイルをオープン if (!PdfOptimizeOpen(pOptimizer, szInputPath, _T(""))) { _tprintf(_T("入力ファイル %s をオープンできません。 %s (エラーコード: 0x%08x).\n"), szInputPath, PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer)); iReturnValue = 1; goto cleanup; } // PDFファイルを作成その際に、ユーザーパスワードとオーナーパスワードを指定 if (!PdfOptimizeSaveAs(pOptimizer, szOutputPath, _T(szUserPassword), _T(szOwnerPassword), ePermAnnotate)) { _tprintf(_T("出力ファイル %s を作成できません。 %s (エラーコード: 0x%08x).\n"), szOutputPath, PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer)); iReturnValue = 1; goto cleanup; } // 入力ファイルをクローズ if (!PdfOptimizeClose(pOptimizer)) { _tprintf(_T("入力ファイル %s をクローズできません。 %s (エラーコード: 0x%08x).\n"), szInputPath, PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer)); iReturnValue = 1; goto cleanup; } _tprintf(_T("終了"));
C# | C/C++ | ダウンロード |
// Optimizerオブジェクト生成 using (Optimizer optimizer = new Optimizer()) { // 入力ファイルをオープン if (!optimizer.Open(inputPath, "")) throw new Exception(String.Format("入力ファイル {0} をオープンできません " + "{1} (エラー: 0x{2:x}).", inputPath, optimizer.ErrorMessage, optimizer.ErrorCode)); // 出力ファイルを作成その際に、ユーザーパスワードとオーナーパスワードを指定 if (!optimizer.SaveAs(outputPath, userPassword, ownerPassword, PDFPermission.ePermAnnotate)) throw new Exception(String.Format("出力ファイル {0} を作成できません " + "{1} (エラー: 0x{2:x}).", outputPath, optimizer.ErrorMessage, optimizer.ErrorCode)); // 入力ファイルをクローズ if (!optimizer.Close()) throw new Exception(String.Format("入力ファイル {0} をクローズできません " + "{1} (エラー: 0x{2:x}).", inputPath, optimizer.ErrorMessage, optimizer.ErrorCode)); } Console.WriteLine("終了");
PDF文書から画像やフォントファイルを抽出
PDF文書に埋め込まれた全ての画像とフォントファイルを抽出します。
画像の形式やフォントのタイプによって保存されるファイルの形式が違います。
画像の形式やフォントのタイプによって保存されるファイルの形式が違います。
C# | C/C++ | ダウンロード |
// Optimizer生成 pOptimizer = PdfOptimizeCreateObject(); // フォントファイルと、画像ファイルを抽出する指定 PdfOptimizeSetExtractFonts(pOptimizer, 1); PdfOptimizeSetExtractImages(pOptimizer, 1); // 入力ファイルをオープン if (!PdfOptimizeOpen(pOptimizer, szInputPath, _T(""))) { _tprintf(_T("入力ファイル %s をオープンできません。 %s (エラーコード: 0x%08x).\n"), szInputPath, PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer)); iReturnValue = 1; goto cleanup; } // フォントと画像を抽出 if (!PdfOptimizeSaveAs(pOptimizer, szOutputPath, _T(""), _T(""), ePermNoEncryption)) { _tprintf(_T("フォントと画像を抽出できません。 %s (エラーコード: 0x%08x).\n"), PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer)); iReturnValue = 1; goto cleanup; } // 入力ファイルをクローズ if (!PdfOptimizeClose(pOptimizer)) { _tprintf(_T("入力ファイル %s をクローズできません。 %s (エラーコード: 0x%08x).\n"), szInputPath, PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer)); iReturnValue = 1; goto cleanup; } _tprintf(_T("終了"));
C# | C/C++ | ダウンロード |
// Optimizerオブジェクト生成 using (Optimizer optimizer = new Optimizer()) { // フォントファイルと、画像ファイルを抽出する指定 optimizer.ExtractFonts = true; optimizer.ExtractImages = true; // 入力ファイルをオープン if (!optimizer.Open(inputPath, "")) throw new Exception(String.Format("入力ファイル {0} をオープンできません " + "{1} (エラー: 0x{2:x}).", inputPath, optimizer.ErrorMessage, optimizer.ErrorCode)); // フォントと画像を抽出 if (!optimizer.SaveAs(outputPath, "", "", PDFPermission.ePermNoEncryption)) throw new Exception(String.Format("フォントと画像を抽出できません。 " + "{0} (エラー: 0x{1:x}).", optimizer.ErrorMessage, optimizer.ErrorCode)); // 入力ファイルをクローズ if (!optimizer.Close()) throw new Exception(String.Format("入力ファイル {0} をクローズできません " + "{1} (エラー: 0x{2:x}).", inputPath, optimizer.ErrorMessage, optimizer.ErrorCode)); } Console.WriteLine("終了");
PDFに文書情報を追加
PDF文書のタイトル、所有者、件名、作成者、作成アプリをメタデータとして追加します。
C# | C/C++ | ダウンロード |
// Optimizer生成 pOptimizer = PdfOptimizeCreateObject(); // PDFファイルの Author, Title, Subject, Creator, Producer に値をセット PdfOptimizeSetInfoEntry(pOptimizer, _T("Author"), _T(szAuthor)); PdfOptimizeSetInfoEntry(pOptimizer, _T("Title"), _T(szTitle)); PdfOptimizeSetInfoEntry(pOptimizer, _T("Subject"), _T(szSubject)); PdfOptimizeSetInfoEntry(pOptimizer, _T("Creator"), _T(szCreator)); PdfOptimizeSetInfoEntry(pOptimizer, _T("Producer"), _T(szProducer)); // 入力ファイルをオープン if (!PdfOptimizeOpen(pOptimizer, szInputPath, _T(""))) { _tprintf(_T("入力ファイル %s をオープンできません。 %s (エラーコード: 0x%08x).\n"), szInputPath, PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer)); iReturnValue = 1; goto cleanup; } // PDFファイルを出力 if (!PdfOptimizeSaveAs(pOptimizer, szOutputPath, _T(""), _T(""), ePermNoEncryption)) { printf(_T("出力ファイル %s を作成できません。 %s (エラーコード: 0x%08x).\n"), szOutputPath, PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer)); iReturnValue = 1; goto cleanup; } // 入力ファイルをクローズ if (!PdfOptimizeClose(pOptimizer)) { _tprintf(_T("入力ファイル %s をクローズできません。 %s (エラーコード: 0x%08x).\n"), szInputPath, PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer)); iReturnValue = 1; goto cleanup; } _tprintf(_T("終了");
C# | C/C++ | ダウンロード |
// Optimizerオブジェクト生成 using (Optimizer optimizer = new Optimizer()) { // PDFファイルの Author, Title, Subject, Creator, Producer に値をセット optimizer.SetInfoEntry("Author", author); optimizer.SetInfoEntry("Title", title); optimizer.SetInfoEntry("Subject", subject); optimizer.SetInfoEntry("Creator", creator); optimizer.SetInfoEntry("Producer", producer); // 入力ファイルをオープン if (!optimizer.Open(inputPath, "")) throw new Exception(String.Format("入力ファイル {0} をオープンできません " + "{1} (エラー: 0x{2:x}).", inputPath, optimizer.ErrorMessage, optimizer.ErrorCode)); // PDFファイルを出力 if (!optimizer.SaveAs(outputPath, "", "", PDFPermission.ePermNoEncryption)) throw new Exception(String.Format("出力ファイル {0} を作成できません " + "{1} (エラー: 0x{2:x}).", outputPath, optimizer.ErrorMessage, optimizer.ErrorCode)); // 入力ファイルをクローズ if (!optimizer.Close()) throw new Exception(String.Format("入力ファイル {0} をクローズできません " + "{1} (エラー: 0x{2:x}).", inputPath, optimizer.ErrorMessage, optimizer.ErrorCode)); } Console.WriteLine("終了");
PDFに文書のバージョンを更新
出力されるPDF文書の最小バージョンを設定します。
指定できるバージョンは「1.1」から「1.7」です。入力文書のバージョンより高いバージョンを指定した場合に出力文書に反映されます。
指定できるバージョンは「1.1」から「1.7」です。入力文書のバージョンより高いバージョンを指定した場合に出力文書に反映されます。
C# | C/C++ | ダウンロード |
// Optimizer生成 pOptimizer = PdfOptimizeCreateObject(); // 出力ファイルのバージョンを指定 if (!PdfOptimizeSetVersion(pOptimizer, szVersion)) { _tprintf(_T("バージョン %s を出力ファイル %s にセットできません。 %s (エラーコード: 0x%08x).\n"), szVersion, szOutputPath, PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer)); iReturnValue = 1; goto cleanup; } // 入力ファイルをオープン if (!PdfOptimizeOpen(pOptimizer, szInputPath, _T(""))) { _tprintf(_T("入力ファイル %s をオープンできません。 %s (エラーコード: 0x%08x).\n"), szInputPath, PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer)); iReturnValue = 1; goto cleanup; } // PDFファイルを出力 if (!PdfOptimizeSaveAs(pOptimizer, szOutputPath, _T(""), _T(""), ePermNoEncryption)) { _tprintf(_T("出力ファイル %s を作成できません。 %s (エラーコード: 0x%08x).\n"), szOutputPath, PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer)); iReturnValue = 1; goto cleanup; } // 入力ファイルをクローズ if (!PdfOptimizeClose(pOptimizer)) { _tprintf(_T("入力ファイル %s をクローズできません。 %s (エラーコード: 0x%08x).\n"), szInputPath, PdfOptimizeGetErrorMessage(pOptimizer), PdfOptimizeGetErrorCode(pOptimizer)); iReturnValue = 1; goto cleanup; } _tprintf(_T("終了");
C# | C/C++ | ダウンロード |
// Optimizerオブジェクト生成 using (Optimizer optimizer = new Optimizer()) { // 出力ファイルのバージョンを指定 if (!optimizer.SetVersion(version)) throw new Exception(String.Format("The version {0} of the output file {1} cannot be set. " + "{2} (エラー: 0x{3:x}).", version, outputPath, optimizer.ErrorMessage, optimizer.ErrorCode)); // 入力ファイルをオープン if (!optimizer.Open(inputPath, "")) throw new Exception(String.Format("入力ファイル {0} をオープンできません " + "{1} (エラー: 0x{2:x}).", inputPath, optimizer.ErrorMessage, optimizer.ErrorCode)); // PDFファイルを出力 if (!optimizer.SaveAs(outputPath, "", "", PDFPermission.ePermNoEncryption)) throw new Exception(String.Format("出力ファイル {0} を作成できません " + "{1} (エラー 0x{2:x}).", outputPath, optimizer.ErrorMessage, optimizer.ErrorCode)); // 入力ファイルをクローズ if (!optimizer.Close()) throw new Exception(String.Format("入力ファイル {0} をクローズできません " + "{1} (エラー: 0x{2:x}).", inputPath, optimizer.ErrorMessage, optimizer.ErrorCode)); } Console.WriteLine("終了");