トラスト・ソフトウェア・システム
トラスト・ソフトウェア・システム

PDF Security(複数の電子署名) VB6.0サンプル

PDF Security テクニカル・チャート
「PDF Security」ソフトは、PDF文書への電子署名と暗号化の機能をアプリケーションに追加します。

電子署名 ・ タイムスタンプ
PDF Securityは、電子署名の様々なタイプを適用します。PDF Securityは、PDF/Aに準拠した電子証明書失効情報(CRLやOCSPのデータ)の埋め込みや、RFC3161タイムスタンプを追加します。
PDF Securityは、証明書のルート(CA、中間)証明書や失効情報をチェックすることで電子署名の有効性を検証します。また、タイムスタンプによる検証も行います。
電子署名しないでタイムスタンプだけを埋め込めます。

暗号化・セキュリティ フラグ
PDF文書は、それが重要な場面で利用される場合、データの不正なアクセスや改竄から保護するために、暗号化やセキュリティ(アクセス許可)フラグなどを設定します。

機能概要はこちらです。
C++C# および Java のサンプルを公開しています。
無償評価版(リンク先は英語)はこちらです。 ダウンロード手順
価格見積り

無償評価版のダウンロードとインストール

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

PDFに複数の署名を適用する

PDF/A 複数電子署名
PDF/A規格に準拠していて、変更できません。
このPDF文書には二つの署名が施されています。
署名前のPDF/A文書署名後のPDF/A文書

 PDF Tools 「PDF Security」電子署名ライブラリ(API)を使って、以下のようにPDF/A文書に複数の電子署名を適用します。

単一の署名を適用するには、PDF Security 解説とサンプルを参照してください。

Acrobat Readerでの署名検証方法は、こちらです。

複数の署名の手順

 複数の電子署名をPDF文書に適用するには、電子署名の都度PDF文書を作成(書き出し)しなければなりません。そのためPDF Securityには、メモリ上に(ファイルではなく)PDF文書を出力する機能を備えています。 この機能によって、複数の電子署名をより簡単に追加できます。
複数の署名は以下の手順に従って適用します。
1.PDF文書をハンドルするインスタンスを生成し、電子署名を施すPDF文書をファイルから読み込む。
2.電子署名のインスタンスを生成し、署名の詳細を指定する。
3.ファイルから読み込んだPDFのインスタンスに準備した電子署名のインスタンスで電子署名を追加する。
4.PDFのインスタンスをメモリに出力する。
5.ファイルから作成したPDFのインスタンスとは別のPDFインスタンスを生成し、そこにメモリ上のPDFを読み込む。
6.2番目の電子署名のインスタンスを生成し、署名の詳細を指定する。
7.メモリ上のPDFのインスタンスに、2番目の電子署名インスタンスで電子署名を追加する。
8.3つ以上の電子署名を追加する場合は、手順4と同様に電子署名を追加したPDFのインスタンスをメモリ上に出力し、それを読み込んで電子署名の追加を繰り返す。
9.最後の署名が追加されたPDFのインスタンスを、名前を指定してファイルに出力する。

 プロジェクトの作成に先立って、ライブラリの参照設定が必要です。 参照設定手順を確認してください。

手順1. PDFインスタンス生成

 PDF文書のインスタンスを生成して、そこにファイルからPDF文書を読み込みます。
Dim doc As New PDFSECUREAPILib.PdfSecure

    '入力ファイルを開く
    done = doc.Open(txtInput.Text)
    If Not done Then
        If doc.ErrorCode = PDF_E_PASSWORD Then
            MsgBox "Input file is encrypted and password not correct."
        Else
            MsgBox "Couldn't open input file." & vbNewLine & "Error: " & doc.ErrorCode
        End If
        Exit Sub
    End If
New PDFSECUREAPILib.PdfSecurePDFSecurity APIを初期化します。
NoCache値に応じてCRLなどをキャッシュしないようにします。 [省略可]
Open( )ファイル名を指定して、生成したインスタンスにPDF文書を読み込みます。
 (インターネット上のPDFファイルを読み込む場合
第二引数には、PDF文書を暗号化した際のオーナーまたは、ユーザーパスワードを指定します。

手順2. 電子署名インスタンス生成と詳細指定

 電子署名のインスタンスを生成し、電子証明書や印影その表示位置などを指定します。
'インスタンス生成
Dim sig As New PDFSECUREAPILib.PdfSignature
Dim rect(3) As Variant

'指定フォント
sig.FontName1 = "C:\\Windows\\Fonts\\msgothic.ttc"
sig.FontName2 = "C:\\Windows\\Fonts\\msmincho.ttc"

'電子証明書情報(電子証明書検索情報)
sig.Name = "山田 太郎"
sig.Issuer = "CA21-5"
sig.SerialNumber = "15 A3"

'電子署名表示内容
sig.Reason = "受領済"
sig.Location = "東京"
sig.Text1 = vbTab & "0,0 "
sig.Text2 = vbTab & "0,0 "

'表示位置
rect(0) = CSng(470)
rect(1) = CSng(600)
rect(2) = CSng(500)
rect(3) = CSng(630)
sig.rect = rect

'電子署名の背景画像
sig.ImageFileName = "Hankols50.png"

'タイムスタンプ(RFC3161)
sig.TimeStampURL = "http://ca21.trustss.jp/tsa/"
New PDFSECUREAPILib.PdfSignature電子署名のインスタンスを生成します。
Name電子署名に対応する電子証明書のCN(Common Name、所有者名)を指定します。
Issuer電子署名に対応する電子証明書の発行者を指定します。
電子証明書の所有者名だけで証明書が特定できる場合は、この指定は必要ありません。しかし、電子証明書をシリアル番号で指定する場合は、所有者の指定が必須となります。
SerialNumber電子署名に対応する電子証明書を指定するために、シリアル番号と共に指定します。
Reason電子署名の理由を指定します。 [省略可]
Location電子署名の場所を指定します。 [省略可]
Text1電子署名領域に表示される署名者の情報を指定する文字列にします。
表示位置と表示する文字列を以下の形式に従って指定します。 [省略可]
<TAB>X位置,Y位置<空白>文字列
Text2電子署名領域に表示される署名者以外の情報を指定する文字列にします。
表示位置と表示する文字列を以下の形式に従って指定します。 [省略可]
<TAB>X位置,Y位置<空白>文字列
Rect電子署名の領域を左下(x1,Y1)と右上(x2,y2)で指定します。単位はポイント(1ポイント=1/72インチ)です。 [省略可]
A4サイズの場合は、左下(0,0)、右上(595,842)となります。
ImageFileName電子署名の領域に貼り付ける画像を指定します。 [省略可]
TimeStampURL指定のタイムスタンプを電子署名と共に埋め込みます。 [省略可]
注意)指定したタイムスタンプのURLは、テスト用のタイムスタンプを発行するTSAです。このTSAは無償・無登録で自由に使えますが、負荷によってはレスポンスが低下します。

手順3. PDF文書に電子署名を追加

 PDF文書のインスタンスに電子署名を追加します。
If Not doc.AddSignature(sig) Then
    MsgBox "Could not add signature."
End If
AddSignature( )引数に指定した電子署名をPDF文書に追加します。

手順4. PDFをメモリに出力

 電子署名されたPDFデータをメモリ上に出力します。不要になったPDFファイルを閉じます。
ret = doc.SaveInMemory()
ret = doc.Close()
SaveInMemory( )PDFデータをメモリ上に出力します。
Close( )読み込み用に開いたPDFファイルを閉じます。

手順5. 新たなPDFインスタンスを生成

 新たなPDFのインスタンスを生成し、メモリ上のPDFを読み込みます。
Dim doc2 As New PDFSECUREAPILib.PdfSecure
ps = doc.GetPdf
ret = doc2.OpenMem(ps)
New PDFSECUREAPILib.PdfSecure新たなPDFのインスタンスを生成します。
GetPdfメモリに格納されたPDF文書をバイトストリームとして読み込めるようにします。
OpenMem( )メモリ中のPDF文書を読み込みます。
第一引数GetPdfで受け取った値を指定します。
第二引数PDFを暗号化した際のオーナーまたは、ユーザーパスワードを指定します。 [省略可]

手順6. 次の電子署名インスタンスを生成

 さらに追加する電子署名のインスタンスを生成し、署名の詳細を設定します。設定は、手順2と同様です。
Dim sig2 As New PDFSECUREAPILib.PdfSignature

sig2.FontName1 = "C:\\Windows\\Fonts\\msgothic.ttc"
sig2.FontName2 = "C:\\Windows\\Fonts\\msmincho.ttc"
sig2.Name = "山田 次郎"
sig2.Issuer = "CA21-5"
sig2.SerialNumber = "15 A3"
sig2.Reason = "確認済"
sig2.Location = "東京"
rect(0) = CSng(470)
rect(1) = CSng(565)
rect(2) = CSng(500)
rect(3) = CSng(595)
sig2.rect = rect
sig2.ImageFileName = "Hankols50.png"
sig2.TimeStampURL = "http://ca21.trustss.jp/tsa/"
sig2.Text1 = vbTab & "0,0 "
sig2.Text2 = vbTab & "0,0 "

手順7. 次の電子署名を適用する

 次の電子署名を追加します。手順3と同様です。
If Not doc2.AddSignature(sig2) Then
    MsgBox "Could not add signature."
End If

手順8. さらに電子署名を追加する場合

 さらに電子署名を追加するには、手順4と同様にして結果をメモリに出力します。出力したPDFをさらに手順5と同様に別のPDFインスタンスに格納します。 そして、電子署名のインスタンスを準備し(手順6)、PDFに署名を追加(手順7)を繰り返します。

手順9. 結果をファイルに出力

 電子署名が追加されたPDFをファイルに出力します。
If Not doc2.SaveAs(txtOutput.Text) Then
    MsgBox "Output file could not be created."
End If
第一引数に、出力するファイル名を指定します。
第二引数以降は、手順4と同様です。

サンプル

 複数の電子署名を追加するVisual Basic6.0のサンプルは、こちらです。 このサンプルを実行するには電子証明書が必要です。

ご質問、お問い合わせ

 メールで support@TrustSS.co.jp 宛てにお送りください。
または、質問のページからお送りいただくようお願いします。ご要望も承っております。(匿名で送れます。)

(記載の会社名および製品名は、各社の登録商標および商標です。)
PDF製品 VB6.0サンプル
PDF Security
PDF Validator
PDF to PDF/A Converter
PDF to Image Converter
Image to PDF Converter
PDF Printer
PDF Prep Tool Suite
PDF Optimizer
PDF Command Line Suite
PDF Extract