C ABI nativo de Linux

HotPDFLinuxABI.lpr construye una biblioteca compartida ELF x86_64 nativa llamada libhotpdf.so.1, con SONAME libhotpdf.so.1 y símbolos públicos asignados a HOTPDF_1.0

La biblioteca usa THPDFHeadlessDocument y rendering por CPU sin ningún componente de Windows, escritorio activo, visor de PDF ni proceso Python en runtime; Python lo usan los scripts de build y de aceptación

Build y aceptación

sh Tests/Linux/Build-LinuxABI.sh
sh Tests/Linux/Run-LinuxABIAcceptance.sh
FPC_EXE=/usr/local/bin/fpc HPDF_LINUX_OUTPUT=Tests/Linux/bin/linux-abi331 sh Tests/Linux/Run-LinuxABIAcceptance.sh

Usa FPC nativo 3.2.2 o más nuevo con FCL y paszlib, un compilador de C, binutils, Fontconfig y fuentes TrueType instaladas; el entorno Python de aceptación necesita además pypdf con su proveedor AES, PyMuPDF, Pillow y NumPy

FPC_EXE, HPDF_LINUX_OUTPUT y PYTHON_EXE seleccionan las ubicaciones de las herramientas; el entorno Python de aceptación por defecto es /opt/hotpdf-python/bin/python

FPC normalmente escribe un bloque de export anónimo en su respuesta del enlazador ELF; el build asigna nombre a ese bloque usando el mapa de símbolos del repositorio antes de enlazar, porque añadir un segundo version script con nombre entraría en conflicto con el bloque anónimo

Interfaz pública

Incluye Lib/hotpdf_abi.h para el layout compartido de registros y las constantes de estado; hpdf_abi_io_v1_size y hpdf_abi_operation_v1_size informan de los tamaños nativos reales de los registros

La biblioteca de Linux exporta descubrimiento del ABI, descubrimiento de capacidades, creación y destrucción de documentos, carga y guardado por callback, recuento de páginas, hpdf_document_execute_json_v1 y el punto de entrada de comparación de dos documentos hpdf_document_compare_json_v1

Descubre las operaciones actuales mediante hpdf_capabilities_json_to_io en lugar de asumir el conjunto de operaciones de Windows

OperaciónComportamiento
infoRecuentos de páginas, formularios y campos firmados
text.extractTexto Unicode de página en JSON y salida UTF-8 opcional, con un array de páginas opcional basado en cero
forms.readNombres de campo totalmente cualificados, valores Unicode, selecciones de choice completas, tipos, flags y longitudes máximas
forms.fillActualizaciones transaccionales de texto, choice, multiselect, checkbox y radio, captions de push-button, apariencias con fuentes incrustadas coincidentes y salida PDF incremental
annotations.export / annotations.importIntercambio acotado de anotaciones XFDF con transacciones de añadido, Unicode exacto, streams binarios, referencias popup/reply, cifrado y política de certificación autenticada
forms.export / forms.importIntercambio acotado escalar y rich de FDF/XFDF con cuatro estilos reales por familia rich configurada, transacciones de PDF cifrado, apariencias regeneradas, políticas de firma y callbacks síncronos fragmentados
renderSalida PNG por Cairo con página, dpi, uso view o print, opciones de anotaciones y la configuración por defecto de optional content
signFirma incremental PEM o PFX, campos existentes o recién creados, apariencias visibles y certificación, incluidas entradas autenticadas AES-256 R5/R6 y opciones de digest, metadatos, perfil y evidencia validada
signatures.verifyVerificación CMS real, longitudes de revisiones firmadas, evaluación opcional de confianza CA explícita y validación de información de revocación firmada
html.importCreación nativa de documentos HTML/CSS con fuentes Unicode, paginación, imágenes, hipervínculos y controles AcroForm opcionales
text.drawTexto Unicode de página visible o invisible con streams de página originales preservados y revisiones cifradas autenticadas
ocrReconocimiento Tesseract real con vida útil acotada del proceso hijo, resultados por palabra y una capa PDF buscable opcional
pages.importImportaciones de recursos de páginas seleccionadas con entrada de origen independiente y actualizaciones transaccionales del destino
pdfa.convertConversión ráster o texto/vector a PDF/A-4, con reparación de fuentes opcional y los requisitos de validación del modo seleccionado
compare / compare.contractComparación de dos handles por recuento de páginas, texto de página, recuento de objetos, imagen renderizada, estructural y completa, más comparación semántica de contratos con salida de revisión JSON, HTML o PDF anotado preparada
{"schemaVersion":1,"type":"render","page":0,"dpi":150,"usage":"print","annotations":false,
 "limits":{"memoryBytes":268435456,"outputBytes":268435456,"pixels":100000000}}

Los workflows nativos de firma aceptan una identidad explícita PEM o PFX Base64, campos de firma nuevos opcionales y apariencias Unicode, y permisos de certificación; una firma con éxito reemplaza el contexto cargado por la revisión firmada preparada, mientras que una firma o publicación fallida preserva el contexto original

Las opciones nativas de firma vinculan la selección real de SHA256, SHA384 o SHA512, la información de firma Unicode, la attestation legal, los bytes de confianza explícitos, la evidencia firmada de revocación validada, los presets reales de apariencia y la procedencia de transporte de credenciales o timestamps afirmada por la aplicación

El estado de visor de optional content opcional aporta aplicaciones de uso automáticas explícitas de View, Print o Export, zoom, idioma, contexto de usuario y selecciones manuales locales de la operación mediante registros V1 intactos

La operación render acepta usage: "view" o usage: "print", con view por defecto; descubre las opciones mediante el array de capacidades renderUsages, con registros V1 de callback y de operación intactos

Los flags de anotaciones de pantalla e impresión siguen el uso seleccionado, y annotations: false suprime las anotaciones en ambos modos; omitir optionalContent retiene la configuración por defecto estática, mientras que un objeto explícito activa las recomendaciones automáticas documentadas y las selecciones manuales locales de la operación

Tests/Linux/Run-LinuxABIRenderUsage.sh verifica píxeles PNG reales para orígenes planos y AES R5/R6, contenido desactivado por defecto, fallos de callback, presupuestos, cancelación y recuperación con el mismo handle; consulta Tests/Linux/HeadlessRenderUsage.en-us.md para las dependencias de los fixtures y el directorio de fixtures pregenerado opcional

Callbacks y ciclo de vida

Las opciones de apariencia de formularios aceptan texto Unicode, export values o arrays de selección completos, estados de botón explícitos, ajustes de fuente y límites transaccionales de recursos

Los callbacks de lectura y escritura pueden devolver transferencias parciales; las transferencias con éxito deben progresar de forma positiva y no deben exceder el recuento solicitado

Todos los callbacks se ejecutan de forma síncrona en el hilo llamador, incluidas las comprobaciones de cancelación dentro de los checkpoints de análisis del documento, rendering y criptografía

La entrada de callback se copia a un fichero temporal privado de creación exclusiva con modo 0600, de modo que los callbacks de entrada de Linux y sus datos de usuario solo necesitan seguir válidos hasta que la llamada de carga o ejecución devuelva

Las operaciones sobre un handle de documento compartido se serializan internamente; cada llamada activa retiene una referencia independiente, de modo que destruir un handle desde un callback de progreso invalida las búsquedas posteriores mientras permite que la llamada actual termine con seguridad

No ejecutes recursivamente otra operación sobre el mismo handle desde su callback; mantén cargada la biblioteca compartida hasta que todas las llamadas hayan devuelto y todos los handles se hayan destruido

Presupuestos y publicación

La entrada JSON se limita a 4 MiB y 64 niveles de anidamiento, y rechaza UTF-8 inválido, miembros duplicados, límites numéricos malformados y el truncamiento de parámetros de Int64 a Int32

El UTF-8 bruto y los escapes Unicode portan los mismos valores de cadena, incluidos los caracteres suplementarios representados por pares surrogados UTF-16 válidos; los escapes de surrogados no emparejados fallan antes de la mutación del documento o de la publicación binaria

Los límites de operación incluyen memoryBytes, outputBytes, resultBytes y pixels; los límites de documento también aplican a los handles previamente cargados, mientras que la memoria gestionada y los límites de rendering no prometen un techo de RSS de proceso

La salida PDF y PNG se prepara y comprueba por completo antes de que empiecen los callbacks de salida; un callback de salida propio del llamador puede retener una transferencia parcial tras su propio fallo de I/O, pero una publicación binaria o de resultado fallida no confirma ediciones de formulario ni reemplaza un contexto previamente cargado

Las mutaciones PDF con éxito confirman la salida preparada tanto como documento actual como snapshot privado de origen, de modo que una importación FDF o XFDF posterior con el mismo valor devuelve los bytes PDF confirmados exactos con updated=0, reteniendo los rellenos de formulario anteriores, las apariencias rich tipadas, el texto dibujado y las páginas importadas

Los ficheros de staging privados se eliminan cuando el contexto se reemplaza o destruye; la salida incremental de formularios y firmas con éxito preserva el prefijo de origen original y la política de cifrado

Evidencia

La reparación de fuentes de archivado opcional habilita sustitución e incrustación acotadas con Ghostscript y validación genuina de PDF/A-4 antes de los callbacks

El PDF de revisión anotado nativo añade a la comparación semántica salida PDF preparada real, resaltados Unicode y permisos de anotación P3 autenticados

La comparación nativa de contratos proporciona comparación semántica acotada de dos handles, HTML de revisión Unicode y geometría real de líneas de origen

La comparación nativa general de documentos normaliza los grafos de objetos y la codificación de streams, compara píxeles reales de Cairo con umbrales explícitos y preserva el estado del documento y los presupuestos de publicación por callback

El cliente de aceptación verifica layouts reales de headers de C y búsqueda de símbolos versionada, callbacks parciales, 80 operaciones concurrentes con handle compartido, cancelación, ediciones Unicode, rollback y firma cifrada

Los lectores independientes pypdf, MuPDF y OpenSSL verifican los PDFs reales, los píxeles PNG, los passwords retenidos, los diccionarios de seguridad, los IDs de documento, los huecos ByteRange exactos, las firmas válidas y el rechazo de los bytes firmados modificados

API de documento headless · Rendering nativo · Plan de entrega restante