PDF Security(暗号化・電子署名) C#サンプル

PDF Security(暗号化・電子署名)

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

価格見積り

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

電子証明書
テスト用の電子証明書を無償で発行します。
以下の無償10日間有効な電子証明書を発行しサンプルコードでPDF Securityを評価してください。
無償電子証明書発行

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

機能概要はこちらです。
他の開発言語によるサンプル C++VB6.0 および Java を公開しています。
無償評価版(リンク先は英語)はこちらです。

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

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

参照設定

C#プロジェクトでは、以下のように.NET用DLLの参照を設定します。なお、サンプルは、基本的にコンソールアプリケーションです。
  1. C#プロジェクトを新規に作成します。
  2. PDF SecurityライブラリのNETラッパを参照する設定をします。
    Visual Studio C#のメインメニューで、「プロジェクト(P)」→「参照の追加(R)...」を選択します。
    以下のようなダイアログが表示されますので、解凍して作成されたフォルダーの「bin」に格納されている.NET用のDLLを指定します。
    PDF Security参照設定
  3. ネイティブのDLLを作成したプロジェクトに追加します。
    Visual Studioのソリューション エクスプローラ(左ペーン)で作成したプロジェクトを右クリックします。
    表示されたメニューから「追加(D)」->「既存の項目(G)...」を選択して表示されたダイアログでPDFSecureAPI.dllを追加します。
    もしくは、bin/PDFSecureAPI.dllをプロジェクトの実行ファイルが格納されているフォルダーにコピーします。

C#のサンプルと解説

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


電子署名はAdobe Acrobat(無償版)リーダーで検証できます。検証の方法はこちらです。

「PDF Security」では印影が追加された電子署名やタイムスタンプを施すことができます。さらに背景の署名者や理由の文字を非表示にできます。 複数の電子署名を適用するには、こちらを参照してください。
PDF文書からPDF/A文書への変換や、簡単にPDF/A文書へ電子署名やタイムスタンプを追加するのであれば、「PDF to PDF/A Converter」を利用してください。

PDF文書への電子署名

 PDF文書に指定の電子証明書で電子署名します。
 署名される文書がPDFの場合は、署名されたPDF文書が出力されます。同様にPDF/Aに電子署名すると、署名されたPDF/Aが出力されます。
using System;
using Pdftools.Pdf;
using Pdftools.PdfSecure;

namespace sig
{
    class Program
    {
        static void Main(string[] args)
        {
            //インスタンス生成
            Secure doc = new Secure();
            Signature sig = new Signature();

            //ライセンスキー
            //ライセンスマネージャを使わない場合は、以下を有効にします。
//          Secure.SetLicenseKey("ライセンスキー");  //適切なライセンスキーに替えます。

            //入力のPDFファイル
            if (!doc.Open("input.pdf", ""))
            {
                Console.WriteLine("入力ファイル\"input.pdf\"を開けません");
                Environment.Exit(1);
            }

            //タイムスタンプ
//          sig.TimeStampURL= "https://www.pdf-tools.trustss.co.jp/CA6/tsa/";

            //電子署名
            PDFRect rect;

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

            //電子証明書情報(電子証明書検索情報)
            sig.Name = "山田 太郎";
//          sig.Issuer = "CA-6";
//          sig.SerialNumber = "10 51";

            //電子署名表示内容
            sig.Reason = "受領済";
            sig.Location = "東京";

            //位置と大きさ
            rect.lowerLeftX = 470;
            rect.lowerLeftY = 590;
            rect.upperRightX = 500;
            rect.upperRightY = 620;
            sig.Rect = rect;

            //電子署名追加
            if (!doc.AddSignature(sig))
            {
                Console.WriteLine("電子署名を追加できませんでした");
                Environment.Exit(2);
            }

            //署名したファイルを格納
            if (!doc.SaveAs("output.pdf", null, null, (PDFPermission)(-1), 0, null, null))
            {
                Console.WriteLine("\"output.pdf\"を出力できませんでした");
                Environment.Exit(3);
            }

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

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

電子署名をAdobe Acrobatリーダーで検証する方法はこちらです。

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

入力のPDFファイルを以下の形式で指定すると、インターネット上のPDFファイルに直接署名できます。
http://[username:password@]domain[:port][/resource]
"username"および"password"は基本認証(Basic Authentication)のユーザー名とパスワード指定です。
なお、プロトコルは"ftp"も使えます。

先のサンプルで"doc.Open( )"のコードを以下のように変更すると、Web上のPDF文書に署名したPDFファイルをローカルに作成します。
// PDF文書を開く
if(!doc.Open("http://www.pdf-tools.trustss.jp/data/Receipt2a.pdf", ""))
{
 ...
}

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

電子印鑑を追加する場合は、印影の画像ファイル名を署名インスタンスに指定してから、電子署名を実施します。以下のコードをsig.AddSignature( )を実行する前に追加します。
sig.ImageFileName = "Hanko.png";
プロパティに電子印鑑の画像ファイル名をセットします。

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

電子署名をAdobe Acrobatリーダーで検証する方法はこちらです。

タイムスタンプ追加

タイムスタンプを追加する場合は、タイムスタンプのURLを署名インスタンスに指定してから、電子署名を実施します。以下のコードをsig.AddSignature( )の前に実行します。
sig.TimeStampURL = "https://www.pdf-tools.trustss.co.jp/CA6/tsa/";
プロパティにタイムスタンプ局(TSA)のURLをセットします。
コード内のタイムスタンプURLは、テスト用のタイムスタンプを発行するTSAです。このTSAは無償・無登録で自由に使えます。

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

電子署名をAdobe Acrobatリーダーで検証する方法はこちらです。

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

名前や時刻などを削除するには、電子署名を実施する前にその部分を空白の文字列に置き換えます。以下のコードをPdfSecureAddSignature( )を実行する前に追加します。
sig.Text1 = "\t0,0 ";
sig.Text2 = "\t0,0 ";
Text1プロパティに署名者情報を、Text2プロパティに理由や署名場所及び署名時刻の文字をNULLにしてセットします。
指定の文字を表示させる場合は、以下の形式を使います。
<TABコード><署名領域内のX座標>,<署名領域内のY座標><SPコード><表示する文字列>
結果は、以下のようになります。
PDF/A 電子署名 電子印鑑 背景なし 署名したPDF文書はこちらです。

電子署名をAdobe Acrobatリーダーで検証する方法はこちらです。

サンプル

C#のサンプルは、こちらです。 このサンプルを実行するには電子証明書が必要です。無償電子証明書で取得してください。

ご質問、お問い合わせ

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

PDF-Tools C#サンプル

PDF Toolsとは

PDF/Aとは