Signature Transform Methods and Permissions
HotPDF는 DocMDP/FieldMDP 권한 구조를 작성한 뒤, 로드된 문서의 모든 표준 signature transform 메서드를 검사·분류할 수 있습니다
Producer 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는 서명 placeholder 생성과 인증 구성을 결합합니다
ConfigureCertificationSignature는 이미 작성된 서명 placeholder용이며 그 필드가 서명 딕셔너리를 지닌 첫 필드여야 합니다
문서에는 인증 서명이 하나만 담길 수 있으므로, 두 번째 구성 요청은 객체 그래프가 바뀌기 전에 거부됩니다
이 API들은 PDF 1.5 출력을 자동 협상합니다
DocMDP 권한 수준
| 값 | Certification permission |
|---|---|
dmpNoChanges | 인증 후에는 어떤 변경도 허용되지 않습니다 |
dmpFormFillAndSign | 폼 작성, 템플릿 인스턴스화, 서명이 허용됩니다 |
dmpFormFillSignAndAnnotate | 앞선 변경에 더해 주석 생성, 삭제, 수정이 허용됩니다 |
dmpNone은 DocMDP transform이 없는 검사 결과용으로 예약되며 생산자 메서드가 거부합니다
필드 잠금 범위
| 값 | Fields argument | 서명 후 효과 |
|---|---|---|
flaAll | 비어 있어야 합니다 | 모든 폼 필드를 잠급니다 |
flaInclude | 하나 이상의 고유 필드 이름 | 나열된 필드만 잠급니다 |
flaExclude | 하나 이상의 고유 필드 이름 | 나열된 필드를 제외한 모든 필드를 잠급니다 |
AttachSignatureFieldLock은 빈 이름, 중복 이름, 잘못된 action 값, 호환되지 않는 Fields 형태, 서명되지 않은 대상 필드, 이미 잠금이나 FieldMDP policy를 지닌 필드를 거부합니다
Emitted structure
- 인증 서명은 직접 DocMDP signature-reference 딕셔너리와 직접 transform 파라미터를 담은 직접
/Reference배열을 실어 나릅니다 - Catalog
/Perms /DocMDP항목은 같은 indirect 서명 딕셔너리를 가리킵니다 - 필드
/Lock항목은 indirect/Type /SigFieldLock딕셔너리를 가리킵니다 - 잠금 범위는 직접 FieldMDP signature reference로 복사되고 그
/Data항목은 indirect Catalog 루트를 가리킵니다 - 서명 딕셔너리는
/V 1로 transform 참조를 critical로 표시합니다
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;
Loaded inspection
function GetLoadedSignaturePermissions(
SigIndex: Integer;
out Info: THPDFSignaturePermissionInfo): Boolean;
reader는 전체 transform 세트, 참조 수, DocMDP 권한, SigFieldLock/FieldMDP 범위, UR 사용 권리, Catalog UR/UR3 소스, Identity 객체 범위, 미지원 메서드, 구조 유효성, 진단 이슈 문자열을 보고합니다
이는 요구되는 직접/간접 형태, Catalog /Perms 대상, transform 버전, 중복 참조, UR 대 UR3 제약, 선택적 DocMDP /P 2 기본값을 검증합니다
SigFieldLock과 FieldMDP가 모두 있으면 두 action과 필드 목록이 일치해야 합니다
Identity 범위 순회는 cycle-safe이며 64수준과 100000 indirect 객체로 제한되고, 검사는 JavaScript, action, 서명 콘텐츠를 절대 실행하지 않습니다
표준 transform 커버리지
| Method | Reported policy |
|---|---|
DocMDP | 인증 권한과 일치하는 Catalog /Perms /DocMDP 대상 |
UR | 문서, 주석, 폼, 서명, 내장 파일 권리와 구형 /UR 또는 byte-range /UR3 소스 |
FieldMDP | All/Include/Exclude 필드 잠금 범위와 복사된 SigFieldLock 일치 |
Identity | 요구되는 indirect /Data 루트에서 도달 가능한 cycle-safe 이행 객체 번호 |
미지원 메서드 이름은 UnknownTransformMethods에 유지되고 권한 구조를 무효로 만들어 critical transform이 놓치지 않게 합니다
Validation boundary
GetLoadedSignaturePermissions는 policy 구조만 보고합니다
VerifyLoadedSignature는 계속 암호학적 무결성을 별도로 보고합니다
AnalyzeLoadedSignatureRevisions는 byte-range DocMDP, FieldMDP, UR3, Identity policy에 대해 revision별 시맨틱 변경 분석을 수행하고, 폐기된 non-byte-range UR 객체 다이제스트 서명은 구조 검사에서 계속 볼 수 있습니다
SaveIncrementalUpdateAuthenticated는 검사를 강제로 바꿉니다. 서명 스냅샷에서 policy를 읽고, 제어 서명을 인증하고, 이후 모든 revision을 검증하며, 모든 policy가 성공한 뒤에만 원자적 교체로 공개합니다
성능
생산자 검증은 작성된 AcroForm 필드와 작은 signature-reference 배열만 스캔하고, 로드 검사는 선택된 서명, 그 잠금, 참조, Catalog 권한 항목만 읽습니다
페이지 콘텐츠, 이미지 stream, 폰트 프로그램, 무관한 indirect 객체는 디코딩되지 않습니다