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();
}