認証署名とフィールドロック
HotPDF は認証署名と署名付きフィールドロックに付随する PDF 権限構造を作成し、ロードされた文書内で同じ構造を検査できます
プロデューサー API
procedure AddCertificationSignatureField(
const FieldName: AnsiString;
Rectangle: TRect;
Permission: THPDFDocMDPPermission;
ContentsBytes: Integer = 8192;
const SubFilter: AnsiString = 'adbe.pkcs7.detached';
const Reason: AnsiString = '';
const Location: AnsiString = '';
const ContactName: AnsiString = '';
Flags: THPDFFormFieldFlags = []);
procedure ConfigureCertificationSignature(
const FieldName: AnsiString;
Permission: THPDFDocMDPPermission);
procedure AttachSignatureFieldLock(
const FieldName: AnsiString;
Action: THPDFFieldLockAction;
const Fields: array of AnsiString);
AddCertificationSignatureField は署名付きプレースホルダ作成と認証設定を組み合わせます
ConfigureCertificationSignature は既存の作成済み署名プレースホルダ用で、そのフィールドが署名辞書を持つ最初のフィールドであることを要求します
文書は1つの認証署名しか持てないため、2番目の設定要求はオブジェクトグラフが変更される前に拒否されます
これらの API は自動的に PDF 1.5 出力をネゴシエートします
DocMDP 権限レベル
| 値 | 認証権限 |
|---|---|
dmpNoChanges | 認証後の変更は許可されません |
dmpFormFillAndSign | フォーム入力、テンプレートインスタンス化、署名が許可されます |
dmpFormFillSignAndAnnotate | 上記の変更に加え注釈の作成、削除、変更が許可されます |
dmpNone は DocMDP 変換のない検査結果用に予約され、プロデューサーメソッドによって拒否されます
フィールドロックスコープ
| 値 | Fields 引数 | 署名後の効果 |
|---|---|---|
flaAll | 空でなければなりません | すべてのフォームフィールドをロックします |
flaInclude | 1つ以上の一意のフィールド名 | リストされたフィールドのみをロックします |
flaExclude | 1つ以上の一意のフィールド名 | リストされたフィールドを除くすべてのフィールドをロックします |
AttachSignatureFieldLock は空の名前、重複した名前、無効なアクション値、互換性のない Fields 形状、未署名のターゲットフィールド、またはすでにロックや FieldMDP ポリシーを持つフィールドを拒否します
出力される構造
- 認証署名は直接 DocMDP 署名参照辞書と直接変換パラメータを含む直接
/Reference配列を持ちます - Catalog
/Perms /DocMDPエントリは同じ間接署名辞書を指します - フィールド
/Lockエントリは間接/Type /SigFieldLock辞書を指します - ロックスコープは直接 FieldMDP 署名参照にコピーされ、その
/Dataエントリは間接 Catalog ルートを指します - 署名辞書は
/V 1によって変換参照をクリティカルとしてマークします
Delphi の例
var
LockedFields: THPDFAnsiStringArray;
begin
HotPDF.CurrentPage.AddTextField(
'InternalCode', '', Rect(40, 80, 220, 108));
HotPDF.CurrentPage.AddCertificationSignatureField(
'CertSig', Rect(40, 140, 260, 190),
dmpFormFillAndSign, 8192,
'adbe.pkcs7.detached', 'Document approval');
SetLength(LockedFields, 1);
LockedFields[0] := 'InternalCode';
HotPDF.CurrentPage.AttachSignatureFieldLock(
'CertSig', flaInclude, LockedFields);
end;
ロード済み検査
function GetLoadedSignaturePermissions(
SigIndex: Integer;
out Info: THPDFSignaturePermissionInfo): Boolean;
リーダーは DocMDP 権限、Catalog リンケージ、SigFieldLock スコープ、FieldMDP スコープ、フィールド名、構造妥当性、診断問題文字列を報告します
必要な直接・間接オブジェクト形状を検証し、Catalog /Perms /DocMDP が同じ署名辞書をターゲットにすることを確認します
SigFieldLock と FieldMDP の両方が存在する場合、それらのアクションとフィールドリストは一致しなければなりません
リーダーは有界な辞書および配列検査を実行し、JavaScript、アクション、署名内容を実行しません
検証境界
GetLoadedSignaturePermissions はポリシー構造のみを報告します
VerifyLoadedSignature は引き続き暗号学的完全性を個別に報告します
いずれのメソッドも、報告された DocMDP または FieldMDP 権限にすべての後続増分リビジョンが従うと主張しません。それはリビジョンごとの意味変更分析を必要とするためです
パフォーマンス
プロデューサー検証は作成された AcroForm フィールドと小さな署名参照配列のみをスキャンし、ロード済み検査は選択された署名、そのロック、その参照、Catalog 権限エントリのみを読み取ります
ページ内容、画像ストリーム、フォントプログラム、無関係な間接オブジェクトはデコードされません