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

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を使って登録してください。 ライセンスキーの登録方法はこちらです。

Visual Basic6.0のサンプルと解説

PDF/A 電子署名
この文書は、PDF/A規格に準拠していて変更ができません。
署名前のPDF文書署名後のPDF文書
 PDF Tools 「PDF Security」電子署名ライブラリ(API)を使って、左図のようにPDF/A文書に電子署名します。

PDF/A規格の参考文献

電子署名はAdobe Acrobat(無償版)リーダーで検証できます。検証の方法はこちらです。
「PDF Security」では印影付きの電子署名やタイムスタンプを適用できます。さらに背景の署名者や理由の文字を非表示にできます。 詳しくは、複数の電子署名を適用するを参照してください。
PDF文書からPDF/A文書への変換や、簡単にPDF/A文書へ電子署名やタイムスタンプを追加する場合は、「PDF to PDF/A Converter」を利用してください。 「PDF Security」では、標準のPDF文書に署名した場合は、電子署名した文書もPDF文書になります。

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

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

PDF文書への電子署名

 PDF文書に指定の電子証明書で電子署名します。
 署名される文書がPDFの場合は、署名された文書もPDFです。同様にPDF/Aに電子署名すると、署名されたPDF/Aができます。
Private Sub Command1_Click()

Dim doc As New PDFSECUREAPILib.PdfSecure

'入力ファイルを開く
done = doc.Open("Receipt2a.pdf")
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

'電子署名

'インスタンス生成
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 = "Taro Yamada"
sig.Issuer = "CA21-5"
sig.SerialNumber = "15 A3"

'電子署名表示内容
sig.Reason = "Received"
sig.Location = "Tokyo"

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

'電子署名追加
If Not doc.AddSignature(sig) Then
    MsgBox "Could not add signature."
End If

'ファイル格納
If Not doc.SaveAs("Receipt2s.pdf") Then
    MsgBox "Output file could not be created."
End If

End Sub
New PDFSECUREAPILib.PdfSignaturePDF文書を扱うインスタンスを生成
Open()署名を追加するPDF文書を開く (インターネット上のPDF文書を開く場合
New PDFSECUREAPILib.PdfSignature電子署名を施すためのインスタンスを生成
FontName1 署名領域1のフォントを指定
フォントファイル名を指定します。日本語を表示させるには、日本語フォントを指定しなければなりません。
FontName2 署名領域2のフォントを指定
フォントファイル名を指定します。日本語を表示させるには、日本語フォントを指定しなければなりません。
Name 署名者の名前(CN:CommonName)を指定
電子証明書がこの名称で検索されます。なお、証明書を発行者とシリアル番号で指定する場合は、署名者としてPDFに挿入されるのみとなります。そのため、この場合は任意の名称を指定できます。
Issuer 署名に使う電子証明書の発行者(Issuer)を指定
電子証明書をシリアル番号で指定する場合は必須です。電子証明書を名前(CN:CommonName)で指定する場合は必要ありませんが、同じ名前の電子証明書がある場合は、発行者を指定して希望の証明書が選択されるようにします。
SerialNumber 署名に使う電子証明書のシリアル番号を指定
電子証明書をシリアル番号で指定する場合は、必須です。
Reason署名の「理由」を指定
Location署名の「場所」を指定
rect 署名の領域を指定
署名する領域の左下(x1,Y1)と右上(x2,y2)をx1,Y1,x2,y2の順で指定します。
AddSignature()指定の署名をPDFインスタンスに追加
このメソッドを実行することで、指定した署名がPDFに追加されます。
SaveAs()署名したPDFインスタンス(データ)をファイルに出力
第一引数結果を格納するPDFファイル名
第二引数出力PDFデータのユーザーパスワード
指定しない場合は、空の文字列(又は、NULL)を指定します。
第三引数出力PDFデータのオーナーパスワード
空の文字列を指定すると、ユーザーパスワードが使われます。
第四引数パーミッション フラグ
規定値は、ePermNoEncryptionです。そのためPDFデータを暗号化する場合は、指定しなければなりません。なお、データがPDF/Aの場合は、暗号化を指定できません。
第五引数暗号化の鍵長
規定値は、128です。
第六引数暗号化のフィルター
規定値は、"V2"です。
第七引数ストリーム暗号化のフィルター
規定値は、"V2"です。
なお、第二引数以降は省略可能です。

結果は、以下のようになります。
PDF/A 電子署名 署名したPDF文書はこちらです。
「PDF Security」電子署名ライブラリ(API)では、開く文書がPDFの場合は、結果がPDF文書になります。PDF/A文書を開けば、結果もPDF/A文書になります。 PDF文書をPDF/Aに変換する場合は、「PDF to PDF/A Converter」ライブラリを使います。

署名時にWeb上のファイルを指定する方法

入力のPDFファイル指定では以下の形式で指定すると、インターネット上のPDFファイルを直接変換できます。
http://[username:password@]domain[:port][/resource]
"username"および"password"は基本認証(Basic Authentication)のユーザー名とパスワード指定です。
先のサンプルで"doc.Open( )"のコードを以下のように変更すると、Web上のPDF文書に署名しローカルにファイルを作成します。
'入力ファイルを開く
done = doc.Open("http://www.pdf-tools.trustss.jp/data/Receipt2a.pdf")

電子署名領域への印影追加

 印影を追加する場合は、印影の画像ファイル名を署名インスタンスに指定してから、電子署名を適用します。以下のコードをAddSignature( )を実行する前に指定します。(この印影は、「電子印鑑」や「電子押印」などと同じ意味になります。)
sig.ImageFileName = "Hanko.png"
ここに印影画像のファイル名を指定します。

結果は、以下のようになります。
PDF/A 電子署名 印影 署名したPDF文書はこちらです。

タイムスタンプ追加

 タイムスタンプを追加する場合は、タイムスタンプのURLを署名インスタンスに指定してから、電子署名を適用します。以下のコードをAddSignature( )を実行する前に指定します。
sig.TimeStampURL = "http://tsa.trustss.jp/tsa/"
タイムスタンプ局(TSA)のURLを指定します。
指定したタイムスタンプのURLは、テスト用のタイムスタンプを発行するTSAです。このTSAは無償・無登録で自由に使えますが、負荷によってはレスポンスが低下します。

結果は、以下のようになります。
PDF/A 電子署名 印影 署名したPDF文書はこちらです。

署名領域の名前や時刻などを非表示にする

 名前や時刻などを非表示にするには、電子署名を適用する前にその部分をNULL文字に置き換えます。以下のコードをAddSignature( )を実行する前に指定します。
sig.Text1 = vbTab & "0,0 "
sig.Text2 = vbTab & "0,0 "
sig.Text1で署名者情報を、sig.Text2で理由や署名場所及び署名時刻の文字列をNULL文字にします。
特定の文字を表示させる場合は、以下の形式で指定します。
<署名領域内のx座標><署名領域内のx座標><空白><表示する文字列>

結果は、以下のようになります。
PDF/A 電子署名 印影 背景なし 署名したPDF文書はこちらです。

PDF文書に複数の署名を追加する

 複数の署名をPDFに施すためには、まず署名を指定したPDFのインスタンスをメモリ上に出力します。次にそのメモリ上のPDFから新たなPDFインスタンスを作成し、追加する署名を指定します。 さらに署名が必要であれば、メモリへの出力→PDFインスタンス作成→署名指定を繰り返します。
 最後に、PDFインスタンスを指定のファイル名で出力することで複数の署名が施されたPDF文書ファイルが作成されます。
 詳細は、「PDFに複数の署名を適用する」を参照してください。

サンプル

 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