Intercambio XFDF de annotations en Windows
Los file jobs de Windows y hpdf_document_execute_json_v1 exportan annotations mapeadas y añaden annotations XFDF a través del puente autenticado de transacciones de Windows
Los tipos y propiedades mapeados se comparten con el XFDF nativo de annotations, incluyendo streams acotados binarios de attachments/sonido, contenidos rich Unicode, objetos popup y forward replies
File jobs
{
"schemaVersion": 1, "type": "annotations.import", "format": "xfdf",
"input": "source.pdf", "annotationInput": "annotations.xfdf",
"output": "annotated.pdf", "password": "owner",
"annotationLimits": {"maxBytes": 1048576, "maxAnnotations": 1000},
"budget": {"memoryBytes": 268435456, "outputBytes": 134217728,
"timeMilliseconds": 60000, "resultBytes": 16777216}
}
annotations.export usa el mismo formato, input, output y password opcional, escribiendo XFDF UTF-8 en lugar de un PDF; la importación requiere annotationInput
El output no debe ser alias del input PDF, del input XFDF ni de los archivos trust/evidence suministrados, incluyendo un hard link existente; la publicación reserva un sibling temporal exclusivo, valida los resultados acotados, hace flush y cierra el candidato y luego reemplaza atómicamente el target
La falla y la cancelación preservan un target completo existente y eliminan el archivo temporal de la operación
Callbacks V1 originales
Use el hpdf_operation_v1 y el hpdf_io_v1 sin cambios de hotpdf_abi.h; el intercambio de annotations no requiere extensión de fuentes
Cargue primero el PDF de destino con hpdf_document_load_from_io; la importación lee XFDF de InputIO, escribe el PDF candidato en OutputIO y escribe JSON acotado en ResultIO; la exportación lee el PDF propio activo y escribe XFDF en OutputIO
Para entrada cifrada, repita la password de operación usada para autenticar el PDF cargado; esta operación no retiene una password implícita de la llamada de carga anterior
Solo los callbacks de PDF y de resultado exitosos seguidos del checkpoint final de cancelación adoptan el nuevo documento y la revisión propia; los callbacks de entrada, salida o resultado fallidos, el XML malformado, los límites agotados y la cancelación retienen el contexto previo
Los callbacks pueden recibir bytes candidatos antes de una falla posterior; publique un destino propio del llamador solo después de que HPDF_STATUS_OK devuelva
Política, límites y resultados
La importación autentica la integridad de firmas existente y el binding de signers ESS; las certificaciones P1 y P2 niegan cambios de annotations, mientras que P3 permite una revisión de annotations que retenga los bytes firmados originales
Las importaciones AES-256 R5/R6 preservan los parámetros de cifrado y el prefijo de revisión original; una importación vacía autentica la política y preserva los bytes actuales exactos
signaturePolicy acepta los requisitos Boolean existentes de trust/timestamp/revocación y los trust paths explícitos descritos en el intercambio de form-data de Windows
annotationLimits puede reducir maxBytes, maxAnnotations, maxNodes, maxDepth y maxWorkingBytes; los valores son números JSON enteros positivos y no pueden elevar los valores por defecto computados
También aplican los presupuestos de trabajo, salida, resultado, objetos y páginas; las operaciones de callback aceptan elapsedMilliseconds como un deadline adicional más estricto
La exportación reporta annotationCount, skippedAnnotationCount, decodedAttachmentBytes y outputBytes; la importación reporta updated, outputBytes y annotationProfile igual a mapped-annotations-v1
Límites
Las capabilities anuncian el intercambio de anotaciones a través de file-job y execute-json-v1, con import append-only, appearanceImport=false general y stampAppearanceImport=true con ámbito
El transporte de apariencias de stamp estándar preserva streams Form reales y recursos acíclicos acotados de fuentes, imágenes y gráficos mediante XML tipado base64
La sintaxis AP general de XFDF, el reemplazo/eliminación de annotations XFDF y las acciones XFDF más amplias siguen siendo trabajo separado; las acciones GoToR remotas y los destinos locales usan sus perfiles acotados existentes
El ExecuteLoadedOperation genérico y el record de callback más antiguo de job-handle son puntos de entrada separados; los llamadores Pascal pueden usar la clase de transacción explícita
Intercambio FDF binario
Los mismos file jobs y callbacks V1 aceptan format="fdf"; los imports de archivos leen FDF binario de annotationInput y las exportaciones escriben FDF binario en la salida seleccionada
El perfil de grafo de objetos FDF preserva los recursos de apariencia suministrados y los objetos indirectos compartidos, y soporta el reemplazo por un NM de anotación no vacío coincidente en la misma página
El import FDF devuelve annotationProfile="pdf-object-graph-v1"; updated cuenta los cambios reales de anotaciones, y un import equivalente preserva la revisión actual exacta
FDF añade maxObjects a los controles annotationLimits de enteros positivos y usa la política autenticada existente, la publicación acotada de candidatos y las reglas de propiedad de callbacks
Los callers Pascal pueden usar THPDFWindowsFormDataTransaction.ExportAnnotationsFDF e ImportAnnotationsFDF; ChangedAnnotations reporta los cambios reales de este perfil
Fields FDF no vacíos y Differences incrustados requieren manejo separado y hacen fallar las operaciones de solo anotaciones antes de publicar
La eliminación de annotations de Windows proporciona una transacción preparada y un job JSON separados para identidades exactas de página-y-NM sin cambiar la semántica append de XFDF mapeado