Creación nativa automática de PDFs XFA
Unit: HPDFXFAHeadless
HPDFXFAWriteHeadlessPDF crea un PDF nativo fresco directamente desde bytes XDP y una fuente TrueType suministrada por la aplicación, sin un PDF de entrada ni slots de campos preparados
El adaptador consume los callbacks existentes de binding XFA, instancias repetidas y layout de paginación, y construye grafos nativos de objetos de páginas y AcroForm con streams de apariencias de fuentes embebidas reales
Se consumen los campos de texto, numéricos, de fecha y password, los push buttons, las elecciones combo y list, los grupos checkbox y radio, el texto estático y los draws de rectangle, line, arc e imágenes en línea PNG o JPEG; las firmas y los consumidores de draws adicionales exigen más integración del adaptador
La creación de choices y booleanos preserva valores de visualización y exportación separados, comportamiento editable y multi-select, estados de apariencia nativos y grupos radio repetidos independientes
Los estilos y captions booleanos consumen markers vectoriales reales, tamaño, colores y grosor de outline, regiones de captions Unicode y terceros estados de checkbox
Los gráficos e imágenes nativos consumen rutas vectoriales reales, formatos de muestras PNG y transparencia, JPEG baseline o progressive, aspect físico y colocación afín
Los passwords usan una apariencia enmascarada conservando el valor nativo del campo; el Editable de todo el documento y el acceso readOnly efectivo de XFA determinan los flags nativos de campo
Las coordenadas en puntos de XFA usan un origen arriba-izquierda y se convierten una sola vez en rectángulos nativos de widgets y traslaciones de draws; las ocurrencias repetidas separadas reciben nombres nativos de campo distintos del engine de layout
Los recursos nativos /AP, /DR y /DA se generan con la fuente suministrada y el tamaño, color y alineación efectivos; el face suministrado se usa para todos los campos, así que la selección de typeface y los múltiples style faces son responsabilidad de la aplicación en esta etapa
Usa TXFAWidgetRuntime para ejecutar eventos de ciclo de vida o interacción y guardar el XDP resultante antes de la creación cuando el documento exija esos eventos; las ScriptOptions del adaptador controlan el procesamiento calculate y validate del engine de flatten
Preparación y límites
TXFAHeadlessPDFOptions acota los bytes de XDP y fuentes, los bytes de salida y objetos, los recuentos de objetos y páginas, los campos y las unidades agregadas de glifos UTF-16
Los presupuestos de objetos, páginas y glifos se comprueban antes de sus asignaciones correspondientes; las comprobaciones de embebido acotan los streams agregados de fuentes e imágenes, los decoders de imágenes acotan sus buffers de trabajo, y la serialización nativa aplica los límites de objetos y del candidato completo en bytes
La cancelación se comprueba a lo largo de la creación del grafo, la generación de apariencias y la serialización; todos los fallos de preparación dejan la posición, longitud y bytes existentes del stream de destino sin cambios
El candidato completo se prepara en memoria antes de una única llamada WriteBuffer al destino; los errores de I/O del destino se propagan y pueden dejar escrituras parciales según el comportamiento del stream del llamador
La salida es un documento nuevo sin firmar; preservar el cifrado importado, las firmas existentes y las revisiones de origen pertenece a las APIs nativas de importación de documentos y revisiones
Aceptación
Tests/Linux/XFAHeadlessCreationTests.pas produce documentos reales repetidos, paginados y de solo lectura globales, un documento saved-XDP mutado por eventos y un documento de draws Unicode con estilos, sin abrir una UI de lector
Tests/Linux/Verify-XFAHeadlessCreation.py verifica de forma independiente los valores nativos, los flags de campos, la propiedad de páginas, los recursos /AP y de fuentes embebidas con pypdf, y el texto real y los píxeles de apariencias renderizadas con MuPDF
Tests/Linux/XFAHeadlessChoiceTests.pas y Verify-XFAHeadlessChoice.py añaden valores y flags reales de choices, padres radio e identidades de ámbitos repetidos, estados de exportación reservados, save/reload y rollback en runtime, y píxeles de selección renderizados
TXFAHeadlessPDFResult informa el grafo nativo real y los recuentos de serialización