Firmas de certificación y bloqueos de campos
HotPDF puede crear las estructuras de permiso PDF adjuntas a firmas de certificación y bloqueos de campos firmados, para luego inspeccionar las mismas estructuras en un documento cargado
API de productor
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 combina la creación de marcador firmado con la configuración de certificación
ConfigureCertificationSignature es para un marcador firmado creado existente y requiere que ese campo sea el primer campo que lleve un diccionario de firma
Un documento puede contener solo una firma de certificación, por lo que una segunda solicitud de configuración se rechaza antes de que cambie el grafo de objetos
Estas APIs negocian la salida PDF 1.5 automáticamente
Niveles de permiso DocMDP
| Valor | Permiso de certificación |
|---|---|
dmpNoChanges | No se permiten cambios después de la certificación |
dmpFormFillAndSign | Se permiten el relleno de formularios, la instanciación de plantillas y la firma |
dmpFormFillSignAndAnnotate | Los cambios anteriores más la creación, eliminación y modificación de anotaciones se permiten |
dmpNone se reserva para resultados de inspección sin una transformación DocMDP y es rechazado por los métodos productor
Ámbitos de bloqueo de campo
| Valor | Argumento Fields | Efecto tras firmar |
|---|---|---|
flaAll | Debe estar vacío | Bloquea todos los campos de formulario |
flaInclude | Uno o más nombres de campo únicos | Bloquea solo los campos listados |
flaExclude | Uno o más nombres de campo únicos | Bloquea todos los campos excepto los listados |
AttachSignatureFieldLock rechaza nombres vacíos, nombres duplicados, valores de acción inválidos, una forma de Fields incompatible, un campo destino no firmado o un campo que ya lleva un bloqueo o política FieldMDP
Estructura emitida
- La firma de certificación lleva un array
/Referencedirecto que contiene un diccionario de referencia de firma DocMDP directo y parámetros de transformación directos - La entrada Catalog
/Perms /DocMDPapunta al mismo diccionario de firma indirecto - La entrada de campo
/Lockapunta a un diccionario/Type /SigFieldLockindirecto - El ámbito de bloqueo se copia en una referencia de firma FieldMDP directa y su entrada
/Dataapunta a la raíz Catalog indirecta - El diccionario de firma marca las referencias de transformación como críticas a través de
/V 1
Ejemplo 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;
Inspección cargada
function GetLoadedSignaturePermissions(
SigIndex: Integer;
out Info: THPDFSignaturePermissionInfo): Boolean;
El lector informa del permiso DocMDP, el enlace Catalog, el ámbito SigFieldLock, el ámbito FieldMDP, los nombres de campo, la validez estructural y una cadena de problema de diagnóstico
Verifica las formas de objeto directo e indirecto requeridas y confirma que Catalog /Perms /DocMDP apunta al mismo diccionario de firma
Si tanto SigFieldLock como FieldMDP están presentes, sus acciones y listas de campos deben concordar
El lector realiza una inspección acotada de diccionarios y arrays y no ejecuta JavaScript, acciones ni contenido de firma
Límite de validación
GetLoadedSignaturePermissions informa solo de la estructura de políticas
VerifyLoadedSignature sigue informando de la integridad criptográfica por separado
Ningún método afirma que cada revisión incremental posterior obedezca el permiso DocMDP o FieldMDP informado, porque eso requiere un análisis de cambio semántico revisión por revisión
Rendimiento
La validación del productor escanea solo los campos AcroForm creados y el pequeño array de referencia de firma, mientras que la inspección cargada lee solo la firma seleccionada, su bloqueo, sus referencias y la entrada de permiso Catalog
No se decodifica ningún contenido de página, flujo de imagen, programa de fuente u objeto indirecto no relacionado