認證簽章與欄位鎖
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 用於已存在的已編寫已簽佔位符,並要求該欄位是第一個攜帶簽章字典的欄位
一個文件只能包含一個認證簽章,因此在物件圖被更改之前會拒絕第二個設定請求
這些 API 自動協商 PDF 1.5 輸出
DocMDP 權限等級
| 值 | 認證權限 |
|---|---|
dmpNoChanges | 認證後不允許任何更改 |
dmpFormFillAndSign | 允許表單填寫、範本實例化和簽署 |
dmpFormFillSignAndAnnotate | 允許上述更改以及註釋的建立、刪除和修改 |
dmpNone 保留用於沒有 DocMDP 轉換的檢查結果,生產者方法會拒絕它
欄位鎖範圍
| 值 | Fields 引數 | 簽署後的效果 |
|---|---|---|
flaAll | 必須為空 | 鎖定每個表單欄位 |
flaInclude | 一個或多個唯一欄位名稱 | 僅鎖定列出的欄位 |
flaExclude | 一個或多個唯一欄位名稱 | 鎖定除列出欄位外的每個欄位 |
AttachSignatureFieldLock 拒絕空名稱、重複名稱、無效的動作值、不相容的 Fields 形狀、未簽署的目標欄位,或已經攜帶鎖或 FieldMDP 策略的欄位
產生的結構
- 認證簽章攜帶一個直接
/Reference陣列,包含直接 DocMDP 簽章參照字典和直接轉換參數 - 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 指向同一個簽章字典/P 2
如果 SigFieldLock 和 FieldMDP 都存在,它們的動作和欄位清單必須一致
讀取器執行有界的字典和陣列檢查,不執行 JavaScript、動作或簽章內容
標準轉換涵蓋範圍
| 方法 | 回報的原則 |
|---|---|
DocMDP | 認證權限與對應的 Catalog /Perms /DocMDP 目標 |
UR | 文件、註解、表單、簽章與內嵌檔案權限,加上舊式 /UR 或位元組範圍 /UR3 來源 |
FieldMDP | All、Include 或 Exclude 的欄位鎖定範圍,以及拷貝的 SigFieldLock 協議 |
Identity | 從必要的間接 /Data 根可達、且無循環的傳遞物件編號 |
未知的方法名稱會保留在 UnknownTransformMethods
驗證邊界
GetLoadedSignaturePermissions 僅報告策略結構
VerifyLoadedSignature 繼續單獨報告密碼學完整性
兩個方法都不聲稱每個後續增量修訂都遵守報告的 DocMDP 或 FieldMDP 權限,因為這需要逐修訂的語意更改分析AnalyzeLoadedSignatureRevisions 會逐修訂版進行語意變更分析,涵蓋位元組範圍的 DocMDP、FieldMDP、UR3 與 Identity 原則;已棄用的非位元組範圍 UR 物件摘要簽章仍可由結構檢視取得
SaveIncrementalUpdateAuthenticated
效能
生產者驗證只掃描已編寫的 AcroForm 欄位和小的簽章參照陣列,而已載入檢查只讀取選定的簽章、其鎖、其參照和 Catalog 權限項目
不解碼任何頁面內容、影像串流、字型程式或無關的間接物件