TPDFlibSignDoc
Security and Signatures
説明
TPDFlibSignDoc は、PDF 全体をメモリに読み込まずにドキュメントの署名フィールドへ直接アクセスする手段を提供します
このクラスはファイル、呼び出し側所有のストリーム、ANSI バイト文字列を開き、AcroForm の署名フィールドを列挙し、既存署名の生の値を読み取ります。ベリファイアが /ByteRange ダイジェストを再計算するのに使えます
増分更新の書き込み側も担います。Append が新しいリビジョンを開始し、AddSignatureField が新しいフィールドを登録し、SetSignatureValue 系メソッドが以前のリビジョンを壊さずに予約領域へ書き込みます
SigningWorkbench デモが、フィールド列挙から ByteRange 調査、証明書抽出までこのクラスを一通り使います
構文
Delphi
TPDFlibSignDoc = Class
Public
Destructor Destroy; Override;
Function Open(Const FileName: WideString; Const Password: WideString; ReadWrite: Boolean): Boolean;
Function OpenStream(SourceStream: TStream; Const Password: WideString): Boolean;
Function OpenString(Const SourceData: AnsiString; Const Password: WideString): Boolean;
Procedure Append;
Function AppendToFile(Const FileName: WideString): Boolean;
Function AppendToStream(TargetStream: TStream): Boolean;
Procedure Close;
Function AddSignatureField(Const FieldName: WideString; PageNumber: Integer): Integer;
Function HasSignatureField(Const FieldName: WideString): Boolean;
Procedure GetSignatureFieldNames(Names: TStrings);
Function GetSignatureValueObjNum(Const FieldName: WideString): Integer;
Function GetSignatureValueByName(Const FieldName: WideString; ValueKey: Integer): AnsiString;
Function GetSignatureTextValueByName(Const FieldName: WideString; ValueKey: Integer): WideString;
Function GetSignatureDocMDPLevelByName(Const FieldName: WideString): Integer;
Function GetSignaturePermissionInfoByName(Const FieldName: WideString;
Out Report: TPDFlibSignaturePermissionReport): Boolean;
Function GetSignatureSeedValueEx(Const FieldName: WideString;
Out SeedValue: TPDFSignatureSeedValue): Boolean;
Function GetSignatureContentsHashHexByName(Const FieldName: WideString): AnsiString;
Function SetSignatureValue(Const FieldName: WideString; Const NewValue: AnsiString;
DocMDPLevel: Integer): Boolean;
Function SetSignatureFieldLock(Const FieldName: WideString;
Const Action: AnsiString; Const Fields: TArray): Boolean;
Procedure SetSignatureImage(Const FieldName: WideString; Const ImageData: AnsiString; ImageOptions: Integer);
Procedure SetSignatureAppearanceText(Const FieldName, Text: WideString; FontSize, FontRed, FontGreen, FontBlue: Double);
Procedure SetSignatureBounds(Const FieldName: WideString; Left, Top, Width, Height: Double);
Function GetDocumentBytes: TBytes;
Function GetDocumentSize: Int64;
Function ReadDocumentRange(Offset: Int64; Buffer: Pointer; Count: Integer): Integer;
Function GetDSSValidationMaterial(Const FieldName: WideString;
Out Certs, CRLs, OCSPs: TStructStrArray; Out UsedVRI: Boolean): Boolean;
Procedure SetSignatureFlags(NewFlags: Integer);
Procedure EnsurePAdESExtensions(ESICLevel: Integer);
Property IsOpen: Boolean Read FIsOpen;
Property SignatureFieldPosition: Int64 Read FSignatureFieldPosition;
Property SignatureFieldLength: Integer Read FSignatureFieldLength;
End; メソッド
| Open, OpenStream, OpenString | ファイル、ストリーム、メモリ上の ANSI 文字列を開きます。読み書き対応も可能で、Open はパスワードと読み書きフラグを受け付けます |
|---|---|
| Append, AppendToFile, AppendToStream | その場で新しい増分リビジョンを開始するか、新しいファイルやストリームへリビジョンを追記します |
| Close | 内部のスマートリーダーとドキュメントハンドルを解放します |
| AddSignatureField | 指定ページに新しい署名フィールドを登録し、そのオブジェクト番号を返します。失敗時は 0 |
| HasSignatureField | 完全修飾名を持つ署名フィールドが存在するとき True |
| GetSignatureFieldNames | AcroForm 内のすべての署名フィールド名を TStrings に埋めます |
| GetSignatureValueObjNum | 署名値ディクショナリのオブジェクト番号。フィールドが未署名なら 0 |
| GetSignatureValueByName | ValueKey で選ぶ生バイト値。0 = /Contents、1 = /Cert、2 = /Filter、3 = /SubFilter、11〜14 = /ByteRange エントリ 0〜3(10 進文字列) |
| GetSignatureTextValueByName | ValueKey で選ぶテキスト値。0 = /M、1 = /Name、2 = /Reason、3 = /Location、4 = /ContactInfo、5 = /Type |
| GetSignatureDocMDPLevelByName | 認証署名の DocMDP 変換レベル(P 値)。なければ 0 |
| GetSignaturePermissionInfoByName | 署名の DocMDP と FieldMDP 制約をレポートレコードに解析します |
| GetSignatureSeedValueEx | 署名者がフィールドに書き込める内容を制約する /SV シード値ディクショナリを読みます |
| GetSignatureContentsHashHexByName | ByteRange が覆う署名対象内容の 16 進ダイジェスト |
| SetSignatureValue | 完成した署名を予約済みの /Contents 領域へ書き込み、DocMDP レベルを記録します |
| SetSignatureFieldLock | アクションとフィールド名リストを含むフィールドロックディクショナリを書き込みます |
| SetSignatureImage, SetSignatureAppearanceText, SetSignatureBounds | 見た目を制御します。描画画像、v3.221.0 で実装されたテキストのみの外観ストリーム、明示的なフィールド境界 |
| GetDocumentBytes, GetDocumentSize, ReadDocumentRange | 内部バイトへの直接アクセス。ファイル全体や ByteRange セグメントを外部でハッシュ化できます |
| GetDSSValidationMaterial | フィールドの DSS 証明書、CRL、OCSP レスポンスを返し、VRI 証拠が使われたかどうかを報告します |
| SetSignatureFlags, EnsurePAdESExtensions | /SigFlags を調整し、ETSI PAdES 拡張スキーマを追加します |
パラメータ
| IsOpen | 正常に開いてから Close までの間は True |
|---|---|
| SignatureFieldPosition | 選択した署名フィールド内容のファイルオフセット |
| SignatureFieldLength | 選択した署名内容のために予約されたバイト長 |
備考
2 つの ByteRange セグメントを合わせると実質ファイル全体を覆うため、GetDocumentBytes はファイル全体をメモリ化します
この低レベル層に触れない署名には、ファサードがドキュメント化された SignProcess 関数群で同等のパイプラインを公開しています
関連項目
TPDFlibSignatureVerifier, TPDFlibPFXFile, TPDFlibSigner, NewSignProcessFromFile, GetSignProcessByteRange