PDF to PDF/A Converter 変換 VB6.0サンプル

PDF to PDF/A Converterは、PDFをPDF/A(PDFの長期保存フォーマット)に変換する機能をアプリケーションに追加する(API)ライブラリです。
PDF/A変換
入力の文書を解析すると共に変換します。解析の結果はログに出力されます。 フォントが埋め込まれていない場合などは、システムのフォントまたは指定のフォントを埋め込みます。
電子署名・タイムスタンプ
必要に応じて電子署名およびタイムスタンプ(RFC3161)を適用します。

無償評価版インストール

ライブラリ(評価版API)は無償でダウンロード(試用)できますので、ダウンロード手順を参照してダウンロードください。
ファイルをダウンロードしてから、インストールもしくは適当なフォルダーに解凍します。以下のようなフォルダーができあがりますので、適宜ご利用ください。
binライブラリやライセンスマネージャーなど
doc使用説明書やjavadocなど
includeC/C++用のヘッダー(.h)ファイル
jarCNVA.jar(Javaのラッパー)
libC/C++用のlibファイル
samples各種開発言語のサンプル
サンプルの実行前に、bin/Pdf2PdfAPI.dllをサンプル実行イメージと同じフォルダーにコピーしてください。また、無償評価版と共にダウンロードしたライセンスキーをbin/LicenseManager.exeを使って登録してください。 ライセンスキーの登録方法はこちらです。

プロジェクトの作成と参照設定

  1. 標準 EXEプロジェクトを新規に作成します。
  2. 2.PDF to PDF/A Converterライブラリを参照する設定をします。
    Visual Basic6.0のメインメニューで、「プロジェクト(P)」→「参照設定(N)...」を選択します。
    ダイアログが表示されますので、「3-Heights(TM) PDF to PDF/A Converter〜」を探して、チェックをします。この項目が見つからない場合は、ダイアログの参照ボタンを押下して、「PDF to PDF/A Converter」をインストールもしくは展開したフォルダー内の Pdf2PdfAPI.dll を指定します。
  3. フォームにボタンなどを貼り付け、そのClickハンドラーを準備しておきます。
    次に、このハンドラーにコードを追加して変換できるようにします。

VB6によるサンプル

PDF文書からPDF/A文書を作成します。
PDF to PDF/A Converterは、電子署名やタイムスタンプを施すこともできます。電子署名を参照してください。電子署名の位置指定や、印影の追加ができます。
PDFまたはPDF/A文書へのより高機能な電子署名やタイムスタンプは、PDF Securityを利用してください。

PDF からPDF/A への変換 VB6.0サンプル

Dim conv As New Pdf2PdfAPI
conv.ConvertAlways = True
conv.ReportDetails = True
conv.ReportSummary = True
conv.PostAnalyze = True
conv.Compliance = ePDFA1a

If conv.Convert("Receipt2.pdf", "", "Receipt2a.pdf", "Receipt2.log") Then
	'真が戻された場合は、PDF/Aに準拠性が評価される
	If conv.ErrorCode = PDF_E_FILE_OPEN Then
		MsgBox "ファイルがオープンできない"
	End If
	'他のエラーは、説明を参照
Else
	'偽が戻された場合、出力ファイルは生成されない
	If conv.ErrorCode = PDF_E_CONVERSION Then
		MsgBox "PDFからPDF/Aの変換でエラーが発生"
	End If
	'他のエラーは、説明を参照
End If

Pdf2PdfAPI

PDF文書を扱うためのクラスです。はじめに、このクラスのインスタンスを生成します。

ConvertAlways

このプロパティを真(True)に設定すると、入力のデータがPDF標準に準拠していても、いなくとも変換します。この場合は、出力されたデータが、PDF標準に準拠していない可能性があります。

ReportDetails

このプロパティを真(True)に設定すると、変換ステップにおいてページごとのPDF標準準拠違反をログファイルに書き出します。ReportSummaryよりも詳細な情報が提供されます。

ReportSummary

このプロパティを真(True)に設定すると、変換ステップおよび変換後の解析ステップにおけるエラーや警告がログファイルに書き込まれます。

PostAnalyze

このプロパティを真(True)に設定すると、作成したPDF出力ファイルを解析し、指定された準拠性のレベルを満たしているか否かを確認します。この分析の結果がはログファイルに書き込まれます。
入力ファイルの解析で問題を検出できなったにもかかわらず、変換中に問題が検出される場合があります。それは、入力パラメータ(例えば、ICCプロファイルなど)に依存しているような場合に起こりえます。変換後の解析では、このような変換中に検出された出力ファイル内のエラーを提供します。
ポスト解析は、文書が変換できた場合のみ実行されます。

Compliance

このプロパティには、PDFの準拠性のレベルを指定します。指定できるのは以下の値です。
設定値レベル
ePDFA1aPDF/A-1a
ePDFA1bPDF/A-1b
ePDFA2aPDF/A-2a
ePDFA2bPDF/A-2b
ePDFA2uPDF/A-2u
ePDFA3aPDF/A-3a
ePDFA3bPDF/A-3b
ePDFA3uPDF/A-3u

Convert

変換を実行します。
各引数には以下の値を指定します。
第一引数入力の(変換される)PDFファイル
第二引数PDFデータの暗号化パスワード
パスワードを指定しない場合は、空の文字列を指定します。
第三引数出力のPDFファイル名
第四引数ログファイル名
エラーなどが書き込まれます。

電子署名

電子署名やタイムスタンプを追加します。 追加した電子署名やタイムスタンプはAcrobat Readerで検証できます(プラグイン不要)。
conv.CertificateName = "Taro Tamada"
conv.Issuer = "CA21-5"
conv.SignatureSerialNumber = "15 3a"
conv.SignatureReason = "Received"
Call conv.SetSignatureRectangle(390, 613, 120, 52)

CertificateName

証明書の所有者名(CN:Common Name)を指定します。発行者とシリアル番号で証明書を指定した場合は、自由な文字列を指定できます。

Issuer

証明書の発行者名(Issuer)を指定します。名前だけで証明書を一意に選択できる場合は省略できます。

SignatureSerialNumber

証明書のシリアル番号を指定します。証明書の発行者名と共に指定します。

SignatureReason

署名の理由を指定します。[省略可]
日本語で表示する場合は、PDF Securityを利用してください。

SignatureRectangle( )

署名領域をX座標、Y座標、幅、高さの順に指定します。[省略可]
A4サイズの場合、左下はX=0,Y=0で右上は、X=595,Y=842です。省略すると、署名領域はページの左下になります。

印影の付いた電子署名

PDF to PDF/A Converterは、電子署名の領域に印影を追加できます。印影の画像を用意した上で、以下のようなコードを変換前に実行します。
conv.SignatureImageFileName = "Hankol.png"
プロパティに印影画像のファイル名を指定します。
画像の形式は、PNGのほかにTIFやJPEG,GIF形式など利用できます。ただし、カラー プロファイルをPDF文書と同じにします。

タイムスタンプ

以下のコードを変換前に実行すると、タイムスタンプを追加できます。
conv.TimeStampURL = "http://www.ca21.trustss.jp/tsa/"
タイムスタンプ局(TSA)のURLを指定します。
指定したタイムスタンプのURLは、テスト用のタイムスタンプを発行するTSAです。このTSAは無償・無登録で自由に使えます。

ログファイルの例

MS-Wordで作成した文書をAcrobatで通常のPDFに変換し、それをPDF/A文書に変換した際のログファイルの例を以下に記します。
- Opening file c:\pdf2pdfconv\Receipt2.pdf.
- Analyzing c:\pdf2pdfconv\Receipt2.pdf.
"c:\pdf2pdfconv\Receipt2.pdf", 0, 64, 0x0A09C882, "The property 'xmpMM:subject' is not defined in schema 'XMP Media Management Schema'.", 1
"c:\pdf2pdfconv\Receipt2.pdf", 0, 64, 0x0A09C881, "The schema description for namespace 'pdfx:' (http://ns.adobe.com/pdfx/1.3/) is missing.", 6
"c:\pdf2pdfconv\Receipt2.pdf", 0, 64, 0x8341052B, "The required XMP property 'pdfaid:part' is missing.", 1
"c:\pdf2pdfconv\Receipt2.pdf", 0, 64, 0x8341052B, "The required XMP property 'pdfaid:conformance' is missing.", 1
"c:\pdf2pdfconv\Receipt2.pdf", 1, 65, 0x03418614, "A device-specific color space (DeviceGray) without an appropriate output intent is used.", 1
"c:\pdf2pdfconv\Receipt2.pdf", 1, 0, 0x83410612, "The document does not conform to the requested standard.", 1
- Setting output intent profile C:\Windows\system32\spool\drivers\color\sRGB Color Space Profile.icm.
- Conversion events.
  - Parts of the XMP metadata could not be repaired and had to be removed.
* Conversion errors in c:\pdf2pdfconv\Receipt2a.pdf.
- File c:\pdf2pdfconv\Receipt2.pdf processed.
 変換前の解析では、PDF文書にいくつかの問題(PDF/Aに変換するためにメタデータが欠落しているなど)があることが示されています。
 変換後には、上記の問題が解決(メタデータが修正もしくは削除)されたことで正しく変換できたことが示されています。変換されたPDF文書は、指定された規格に準拠しています。

エラーについて

変換前のエラーと変換後のエラーが報告されます。以下にその例を示します。
[返還前のエラー]
エラーコード内容
PDF_E_FILE_OPEN入力ファイルがオープンできなかった
PDF_E_FILE_CREATE出力ファイルを生成できない
PDF_E_STOPED解析を中止した
[変換後のエラー (ポスト解析が実施された場合のみ報告される)]
エラーコード内容
PDF_E_CONVERSIONPDFからPDF/Aの変換でエラーが発生
PDF_E_METADATAXMPメタデータが部分で削除されたか、修正できない
PDF_E_POST_ANALYSIS出力文書のポスト解析でエラー
PDF_E_CONFORMANCE文書が規格に準拠していない
SIG_CREA_E_CERT指定された電子証明書が見つからない
なお、エラーは以下のようなコードで抑制できます。
conv.ConversionErrorMask = conv.ConversionErrorMask And Not ePDFConversionErrorXMPRemoved

Web上のファイルを指定する

入力のPDFファイルを以下の形式で指定すると、Web上のPDFファイルを直接利用できます。
http://[username:password@]domain[:port][/resource]
"username"と"password"は基本認証(Basic Authentication)のユーザー名とパスワードです。
利用例:
// 変換
If conv.Convert("http://www.pdf-tools.trustss.jp/data/Receipt2.pdf", "", "Receipt2a.pdf", "Receipt2.log") Then
 ...
End If

サンプル・コード

このサンプルには、電子署名のコードが含まれています。電子署名を施さない場合はその部分を削除してください。
VB6.0 PDF to PDF/A Converter サンプル(MS Visual Basic6.0 Project)PDFcnvVb6.zip

その他の情報

PDF/Aについて
PDFの構文解説