PDF to PDF/A Converter(PDFをPDF/Aに変換) サンプル・ソースコード
PDF から PDF/A に変換 概要
PDF/Aへの変換
このツールは、入力の文書を解析しながら変換します。フォントなどが埋め込まれていない場合は、自動的にそれを修正します。フォントを変更して埋め込むこともできます。
変換時の警告などはログファイルに残せますので、規格準拠の対策や文書管理に利用できます。
価格見積り
電子署名・タイムスタンプ
PDF/Aに電子署名・タイムスタンプを適用し、その電子署名を検証します。電子署名には印影の追加ができます。メタ・データ
PDF/Aはメタデータ(属性-プロパティ-に示されるような、作成者、サブジェクト、作成日、などファイル内容を表す情報)が必須ですので自動で追加されます。メタ・データを指定して追加できます。
PDF、PDF/Aの適合性チェックとログ
変換前にPDFの適合性をチェックし、変換後にはPDF/Aの適合性をチェックします。PDF Validatorと同じ機能です。
この適合性チェックの結果と共に、変換の際の警告やエラーなどをログファイルに残せます。
無償評価版のダウンロードとインストール
C#開発環境 | C/C++開発環境 |
1.Zipファイルをダウンロードする場合
ライブラリ(評価版API)は無償でダウンロードできます。
ファイルをダウンロードしてから適当なフォルダーに解凍してください。
以下のようなフォルダーができあがりますので、適宜ご利用ください。
サンプルの実行前に参照設定などを行ってください。
無償評価版と共にダウンロードしたライセンスキーを bin/LicenseManager.exeを使って登録してください。
ファイルをダウンロードしてから適当なフォルダーに解凍してください。
以下のようなフォルダーができあがりますので、適宜ご利用ください。
bin | ライブラリやライセンスマネージャーなど |
doc | 使用説明書やjavadocなど |
include | C/C++用のヘッダー(.h)ファイル |
jar | |
lib | C/C++用のlibファイル |
samples | 各種開発言語のサンプル |
無償評価版と共にダウンロードしたライセンスキーを bin/LicenseManager.exeを使って登録してください。
2.NuGetでインストールする場合
nuget.org から PdfTools.Pdf2Pdf をインストールします。
NuGetでのインストール手順
この場合は参照設定などの必要はありません。
評価用ライセンスキーは 以下のソースコードまたは、こちら から取得してください。
NuGetでのインストール手順
この場合は参照設定などの必要はありません。
評価用ライセンスキーは 以下のソースコードまたは、こちら から取得してください。
C#開発環境 | C/C++開発環境 |
ライブラリ(評価版API)は無償でダウンロードできます。
ファイルをダウンロードしてから適当なフォルダーに解凍してください。
以下のようなフォルダーができあがりますので、適宜ご利用ください。
サンプルの実行前に参照設定などを行ってください。
無償評価版と共にダウンロードしたライセンスキーを bin/LicenseManager.exeを使って登録してください。
ファイルをダウンロードしてから適当なフォルダーに解凍してください。
以下のようなフォルダーができあがりますので、適宜ご利用ください。
bin | ライブラリやライセンスマネージャーなど |
doc | 使用説明書やjavadocなど |
include | C/C++用のヘッダー(.h)ファイル |
jar | |
lib | C/C++用のlibファイル |
samples | 各種開発言語のサンプル |
無償評価版と共にダウンロードしたライセンスキーを bin/LicenseManager.exeを使って登録してください。
PDF文書をPDF/Aに変換
画像をPDF/A-1aに変換するサンプルです。
別の規格を指定することができます。
別の規格を指定することができます。
C# | C/C++ | ダウンロード |
// Converter生成 pConverter = Pdf2PdfCreateObject(); // PDF規格を設定 Pdf2PdfSetCompliance(pConverter, eCompliance); Pdf2PdfSetAllowDowngrade(pConverter, 1); // PDF/Aに変換 if (!Pdf2PdfConvert(pConverter, szInputPath, _T(""), szOutputPath, _T(""))) { _tprintf(_T("入力ファイル %s を変換できません。 %s (エラーコード: 0x%08x)\n"), szInputPath, Pdf2PdfGetErrorMessage(pConverter), Pdf2PdfGetErrorCode(pConverter)); iReturnValue = 1; }
C# | C/C++ | ダウンロード |
// Converter生成 using (Pdf2Pdf converter = new Pdf2Pdf()) { // PDF規格を設定 converter.Compliance = compliance; converter.AllowDowngrade = true; // PDF/Aに変換 if (!converter.Convert(inputPath, "", outputPath, "")) throw new Exception(String.Format("入力ファイル {0} を変換できません。 " + "{1} (エラーコード: 0x{2:x})", inputPath, converter.ErrorMessage, converter.ErrorCode)); }
PDF文書をPDF/Aに変換し、結果を検証
PDF文書をPDF/Aに変換し、その結果を検証するサンプルです。
検証する「変換エラー(アクションの削除y署名された文書の変換など)」を定義します。検証の結果はログファイルに事前検証の結果と共に出力されます。
検証する「変換エラー(アクションの削除y署名された文書の変換など)」を定義します。検証の結果はログファイルに事前検証の結果と共に出力されます。
C# | C/C++ | ダウンロード |
// Converter生成 pConverter = Pdf2PdfCreateObject(); // PDF規格、ログ作成の設定 Pdf2PdfSetCompliance(pConverter, ePDFA2b); Pdf2PdfSetReportSummary(pConverter, 1); // 「変換エラー」として扱う項目を設定 Pdf2PdfSetConversionErrorMask(pConverter, (int)ePDFConversionErrorVisualDiff + (int)ePDFConversionErrorActionRemoved + (int)ePDFConversionErrorCorrupt + (int)ePDFConversionErrorDocSigned + (int)ePDFConversionErrorEFRemoved + (int)ePDFConversionErrorFontSubst + (int)ePDFConversionErrorStructureRemoved); // ログファイル名 _tcscpy(szCopyFile, szOutputPath); szLogFileName = _tcstok(szCopyFile, _T(".")); _tcscat(szLogFileName, _T("-log.txt")); // 入力ファイルをPDF/Aに変換 if (!Pdf2PdfConvert(pConverter, szInputPath, _T(""), szOutputPath, szLogFileName)) { if (Pdf2PdfGetErrorCode(pConverter) == PDF_E_POSTANALYSIS) { // 作成後のエラー(Post Analysis Error)は出力されたファイルがPDF/Aではないことを示しています。 // 作成後の解析(Post Analysis)の詳細はログファイルに記録されます。 _tprintf(_T("出力ファイル %s はPDF/A規格に準拠していません。 %s (エラーコード: 0x%08x)\n"), szOutputPath, Pdf2PdfGetErrorMessage(pConverter), Pdf2PdfGetErrorCode(pConverter)); iReturnValue = 1; goto cleanup; } else if (Pdf2PdfGetErrorCode(pConverter) == PDF_E_CONVERSION) { int errors = Pdf2PdfGetConversionErrors(pConverter); // 変換中に発生したすべての変換エラーを印刷 _tprintf(_T("ファイルはPDF/Aに変換されましたが、次の変換エラーが発生しました (TPDFConversionError)参照\n")); for (int i = 1; i <= errors; i = 2 * i) { if ((i & errors) != 0) { _tprintf(_T("- 0x%05x\n"), i); } } // エラーが許容できるかどうかを判断 _tprintf(_T("\n出力ファイルを確認して、許容できるかどうかを確認してください: [y/n] \n")); scanf("%s", str); if (_tcscmp(str, _T("y")) != 0) { _tprintf(_T("変換エラーによって結果が拒否されました。\n")); iReturnValue = 1; goto cleanup; } } else { _tprintf(_T("入力ファイル %s をPDF/Aに変換できません。 %s (エラーコード: 0x%08x).\n"), szInputPath, Pdf2PdfGetErrorMessage(pConverter), Pdf2PdfGetErrorCode(pConverter)); iReturnValue = 1; goto cleanup; } }
C# | C/C++ | ダウンロード |
// Converter生成 using (Pdf2Pdf converter = new Pdf2Pdf()) { // PDF規格、ログ作成の設定 converter.Compliance = PDFCompliance.ePDFA2b; converter.ReportSummary = true; // 「変換エラー」として扱う項目を設定 converter.ConversionErrorMask = (int)PDFConversionError.ePDFConversionErrorVisualDiff + (int)PDFConversionError.ePDFConversionErrorActionRemoved + (int)PDFConversionError.ePDFConversionErrorCorrupt + (int)PDFConversionError.ePDFConversionErrorDocSigned + (int)PDFConversionError.ePDFConversionErrorEFRemoved + (int)PDFConversionError.ePDFConversionErrorFontSubst + (int)PDFConversionError.ePDFConversionErrorStructureRemoved; // 入力ファイルをPDF/Aに変換 if (!converter.Convert(inputPath, "", outputPath, Path.ChangeExtension(outputPath, null) + "-log.txt")) { if (converter.ErrorCode == PDFErrorCode.PDF_E_POSTANALYSIS) { // 作成後のエラー(Post Analysis Error)は出力されたファイルがPDF/Aではないことを示しています。 // 作成後の解析(Post Analysis)の詳細はログファイルに記録されます。 throw new Exception(String.Format("出力ファイル {0} はPDF/A規格に準拠していません。 {1} " + "(エラーコード: 0x{2:x})", outputPath, converter.ErrorMessage, converter.ErrorCode)); } else if (converter.ErrorCode == PDFErrorCode.PDF_E_CONVERSION) { Array errors = Enum.GetValues(typeof(PDFConversionError)); // 変換中に発生したすべての変換エラーを印刷 Console.WriteLine("ファイルはPDF/Aに変換されましたが、次の変換エラーが発生しました:"); foreach (PDFConversionError err in errors) { if (((int)err & converter.ConversionErrors) != 0) Console.WriteLine("- " + err.ToString()); } // エラーが許容できるかどうかを判断 Console.WriteLine(Environment.NewLine + "出力ファイルを確認して、許容できるかどうかを" + "確認してください: [y/n] "); if (Console.ReadLine().ToLower() != "y") throw new Exception("変換エラーによって結果が拒否されました。"); } else throw new Exception(String.Format("入力ファイル {0} をPDF/Aに変換できません。 " + "{1} (エラーコード: 0x{2:x}).", inputPath, converter.ErrorMessage, converter.ErrorCode)); } }
PDF文書をPDF/Aに変換して電子署名
PDF文書をPDF/Aに変換して電子署名するサンプルです。
このサンプルでは、Windows Cryptgraphic Providerの電子証明書をCN(Commn Name)で選択します。
他にPDF Securityで電子署名ができます。
このサンプルでは、Windows Cryptgraphic Providerの電子証明書をCN(Commn Name)で選択します。
他にPDF Securityで電子署名ができます。
C# | C/C++ | ダウンロード |
// Converter生成 pConverter = Pdf2PdfCreateObject(); // PDF規格を設定 Pdf2PdfSetCompliance(pConverter, ePDFA2b); // Windows Cryptographic Providerを使ったセッションを開始 if (!Pdf2PdfBeginSession(pConverter, "")) { _tprintf(_T("Windows Cryptographic Providerに接続できません。 %s (エラーコード: 0x%08x).\n"), Pdf2PdfGetErrorMessage(pConverter), Pdf2PdfGetErrorCode(pConverter)); iReturnValue = 1; goto cleanup; } // 署名オブジェクトを生成 pSignature = Pdf2PdfSignatureCreateObject(); // 電子証明書選択、署名 Pdf2PdfSignatureSetName(pSignature, szCertificate); Pdf2PdfAddSignature(pConverter, pSignature); Pdf2PdfSignatureDestroyObject(pSignature); // 電子署名されたPDF/A文書を作成 if (!Pdf2PdfConvert(pConverter, szInputPath, _T(""), szOutputPath, _T(""))) { _tprintf(_T("入力ファイル %s を変換できません。 %s (エラーコード: 0x%08x).\n"), szInputPath, Pdf2PdfGetErrorMessage(pConverter), Pdf2PdfGetErrorCode(pConverter)); iReturnValue = 1; }
C# | C/C++ | ダウンロード |
// Converter生成 using (Pdf2Pdf converter = new Pdf2Pdf()) { // PDF規格を設定 converter.Compliance = PDFCompliance.ePDFA2b; // Windows Cryptographic Providerを使ったセッションを開始 if (!converter.BeginSession("")) throw new Exception(String.Format("Windows Cryptographic Providerに接続できません。 " + "{0} (エラーコード: 0x{1:x}).", converter.ErrorMessage, converter.ErrorCode)); // 署名オブジェクトを生成 using (Signature signature = new Signature()) { // 電子証明書選択、署名 signature.Name = certificate; converter.AddSignature(signature); // 電子署名されたPDF/A文書を作成 if (!converter.Convert(inputPath, "", outputPath, "")) throw new Exception(String.Format("入力ファイル {0} を変換できません。 {1} " + "(エラーコード: 0x{2:x}).", inputPath, converter.ErrorMessage, converter.ErrorCode)); } // 後始末 converter.EndSession(); Pdf2Pdf.Terminate(); }