Intercambio FDF/XFDF en Windows

Los file jobs de Windows y hpdf_document_execute_json_v1 implementan forms.export y forms.import para fdf y xfdf usando los codecs nativos escalares y rich XHTML/CSS acotados

File jobs

{
  "schemaVersion": 1, "type": "forms.import", "format": "xfdf",
  "input": "source.pdf", "output": "filled.pdf", "password": "owner",
  "formDataInput": "values.xfdf",
  "fonts": {
    "regular": "DejaVuSans.ttf", "bold": "DejaVuSans-Bold.ttf",
    "italic": "DejaVuSans-Oblique.ttf", "boldItalic": "DejaVuSans-BoldOblique.ttf"
  },
  "budget": {"memoryBytes": 268435456, "outputBytes": 134217728,
    "timeMilliseconds": 60000, "resultBytes": 16777216}
}

forms.export usa input, output, format y un password opcional; no requiere formDataInput ni fonts; los file jobs reservan un candidato exclusivo junto al destino, le hacen flush y lo cierran, validan el JSON de resultado acotado y luego reemplazan el destino atómicamente

Fuentes ausentes, entrada malformada, fallos de autenticación o de política, límites agotados y publicación fallida preservan el destino completo existente; el output no debe ser alias del PDF ni de la entrada de form-data, incluido un hard link

Familias de fuentes nombradas

forms.import acepta fontFamilies en la raíz de la operación como un array de una a dieciséis etiquetas; su ausencia conserva el perfil original de familia única y la etiqueta del callback fontFamily

"fontFamilies": ["DejaVu Sans", "DejaVu Serif Condensed"],
"fonts": {
  "DejaVu Sans": {
    "regular": "DejaVuSans.ttf", "bold": "DejaVuSans-Bold.ttf",
    "italic": "DejaVuSans-Oblique.ttf", "boldItalic": "DejaVuSans-BoldOblique.ttf"
  },
  "DejaVu Serif Condensed": {
    "regular": "DejaVuSerifCondensed.ttf", "bold": "DejaVuSerifCondensed-Bold.ttf",
    "italic": "DejaVuSerifCondensed-Italic.ttf", "boldItalic": "DejaVuSerifCondensed-BoldItalic.ttf"
  }
}

Para file jobs, fonts contiene objetos indexados por las etiquetas configuradas exactas; sin fontFamilies conserva el objeto original de paths directos por estilo; lee solo los programas reales de familia/estilo, con todos los bytes de fuentes seleccionadas compartiendo el presupuesto de la operación

Para los callbacks V1 de Windows, el callback de fuentes existente recibe cada etiqueta canónica UTF-8 configurada real y el estilo seleccionado; dos familias que usan los cuatro estilos generan ocho peticiones reales de programas sin cambiar el record del callback

Las letras ASCII de las etiquetas se comparan sin distinguir mayúsculas mientras el resto de los caracteres Unicode se compara de forma exacta; las etiquetas son distintas, no vacías y de 128 unidades de código UTF-16 como máximo, sin whitespace circundante, controles, surrogates no emparejados ni puntuación de comillas/separadores CSS

La primera familia configurada es el default para texto escalar y estilos rich heredados; por defecto, las listas CSS font-family usan la selección de primera familia conocida del codec nativo

El opt-in fallbackFontFamilies=true preserva los candidatos CSS font-family inline ordenados y carga los programas reales de cara/estilo configurados para el fallback de grapheme completo; consulta fallback de fuentes rich con familias suministradas en Windows para candidatos tipados, carga por callback y el alcance solo rich

El resultado aplicado reporta richXMLProfile inline-xhtml-font-families-v1, el array fontFamilies configurado y objetos fontFamilyStyles reales con family, style y bytes; fontStyles conserva su tipo original object-array y resume conteos de bytes por estilo; fontBytes cuenta todos los programas reales

Sin el array, richXMLProfile es inline-xhtml-v1; el forms.fill mixto escalar y rich tipado original usa el binding separado original-typed-runs-v1 descrito abajo; la extensión legacy del callback de fuentes de jobs sigue siendo trabajo posterior separado

Callbacks C versionados de Windows

Incluye hotpdf_abi_form_data.h; llena hpdf_form_data_operation_v1, fija operation.struct_size a su tamaño completo y pasa su prefijo de operación sin cambios a hpdf_document_execute_json_v1

El callback opcional de fuentes recibe bytes de familia UTF-8 y el estilo 0 regular, 1 bold, 2 italic o 3 boldItalic, y devuelve una tabla de lectura hpdf_io_v1 completa para el programa de fuente real; provee los cuatro programas cuando los datos rich usan los cuatro estilos

Los datos escalares piden el programa regular; fontFamily es DejaVu Sans por defecto; los callbacks de fuentes IO suministrados y sus user data deben seguir válidos hasta que la operación devuelva; los estados de callback distintos de cero son sticky y se propagan sin reintento de fallback

Para forms.import, InputIO suministra el FDF/XFDF y el destino ya debe estar cargado; OutputIO recibe el PDF candidato y ResultIO recibe el JSON acotado; forms.export usa el record V1 original y escribe FDF/XFDF a OutputIO

hpdf_document_load_from_io de Windows copia la entrada completa a una fuente inmutable propia antes de devolver; el reemplazo o la adición por parte del caller no pueden cambiar la revisión cargada activa ni su salida posterior de form-data

Las fuentes propias usan un handle sincronizado separado para lecturas random-access en segundo plano, de modo que el prefetch no puede mover el cursor de publicación secuencial; el documento candidato libera sus lectores en segundo plano antes de que su fuente se destruya

El contexto activo cambia solo cuando ambos callbacks de salida y resultado tienen éxito y el checkpoint final de cancelación pasa; el fallo o la cancelación de un callback descarta el candidato y retiene el documento y la fuente propia anteriores

Un callback puede haber recibido bytes del candidato antes de que un callback posterior falle; los callers deben confirmar su propio destino de salida solo después de que la función execute devuelva HPDF_STATUS_OK

Los layouts de records V1 originales y los símbolos exportados quedan sin cambios; esta extensión de Windows es separada de la extensión de callbacks publicada del Linux nativo

Los puntos de entrada vinculados son el procesador de file jobs y hpdf_document_execute_json_v1; el record de callback legacy HPDFDocRunJob y el ExecuteLoadedOperation genérico no adquieren una extensión de fuentes en esta etapa; los callers Pascal pueden usar la clase de transacción explícita

Campos, rich text y política

Los valores soportados incluyen nombres de texto Unicode anidados, nombres de exportación de checkbox y radio, arrays multiselect y valores read-only sin cambios; /V, /RV y los recursos de AP genuinos se guardan juntos; los campos desconocidos y las restricciones de campos requeridos hacen fallar la transacción

El intercambio rich usa el perfil acotado XHTML/CSS documentado y fuentes de estilo reales suministradas; no reclama soporte de HTML arbitrario, todo CSS ni XML rich sin restricciones

Las actualizaciones firmadas AES R5/R6 retienen el prefijo original completo, los parámetros de cifrado, el identificador permanente de cifrado y la firma CMS existente; las importaciones escalares o rich sin cambios son byte-idénticas a la revisión confirmada actual

La integridad CMS existente y el binding de firmante ESS se autentican antes de las actualizaciones de formularios firmados; el llenado P2/P3 solo se permite dentro de sus restricciones reales; P1, los locks FieldMDP y los campos read-only cambiados rechazan la publicación

signaturePolicy acepta los booleanos requireCAdES, requireTimestamp, requireAdobeRevocationInfo y requireTimestampRevocation; trustedCAFile, timestampCAFile, timestampCRLFile y revocationCAFile deben ser cadenas sin NUL y seleccionan trust explícito del caller para las comprobaciones solicitadas

Las opciones de callbacks C también acotan la evidencia firmada mediante maxEvidenceBytes y maxEvidenceObjects; la validación de trust es distinta de la comprobación de integridad de firmas por defecto

formData puede bajar maxBytes, maxFields, maxObjects, maxDepth, maxValues, maxValueCodeUnits y maxTotalCodeUnits; estos enteros positivos exactos además se recortan por la capacidad de trabajo; los budget objectCount y pageCount limitan los documentos candidatos

budget.timeMilliseconds fija el deadline de la operación; los callbacks C de Windows también aceptan elapsedMilliseconds como un límite adicional más estricto; la cancelación se consulta por polling durante la preparación del graph actual, la decodificación de formularios, la lectura de fuentes, las comprobaciones CMS, la carga del candidato y la publicación

Las capacidades reportan formatos, estilos, entrada inmutable y comportamiento transaccional de callbacks reales; el intercambio de anotaciones, los embedded FDF files, las actions y los documentos FDF incrementales siguen siendo capacidades separadas sin terminar

Temas relacionados

El llenado mixto escalar y rich tipado original usa el mismo ciclo de vida de candidato Windows autenticado mediante file jobs y execute-json-v1

Clase de transacción, preparación del graph actual, form data nativo

Los style sheets internos aplican selectores acotados, importance, especificidad y orden de fuente a valores rich importados reales y apariencias guardadas; los imports equivalentes repetidos y la publicación fallida retienen las garantías transaccionales existentes

richTextResources suministra CSS enlazado e importado para file jobs reales de Windows e imports execute-json-v1, usando la transacción y los bindings de fuente existentes