Conversión de PDF cargado a PDF/A-4 ráster
HPDFArchivalConversion crea un documento PDF/A-4 nuevo a partir del contenido visible de las páginas de un documento THotPDF cargado, usando renderizado nativo estricto y un perfil ICC sRGB suministrado
Cada página de salida contiene una imagen RGB ráster comprimida sin pérdida al DPI solicitado, y sus dimensiones visibles originales, el recorte, la rotación y el UserUnit quedan reflejados en la geometría de la página de salida
Use el perfil de preservación de texto y vectores aparte cuando deban sobrevivir las fuentes incrustadas originales, los operadores de texto, las rutas vectoriales, las imágenes, las capas de OCR y las appearances visibles de anotaciones o widgets; el perfil ráster no preserva esas estructuras
Puntos de entrada
function HPDFConvertLoadedToPDFA4Raster(Source: THotPDF;
Destination: TStream; const SRGBProfile: TBytes;
const Options: THPDFArchivalConversionOptions;
out Report: THPDFArchivalConversionReport): Boolean;
function HPDFConvertLoadedToPDFA4RasterFile(Source: THotPDF;
const TargetFileName: string; const SRGBProfile: TBytes;
const Options: THPDFArchivalConversionOptions;
out Report: THPDFArchivalConversionReport): Boolean;
Cargue primero el origen y mantenga vivo cualquier flujo de entrada propiedad del llamador hasta destruir el documento de origen
Para la publicación de archivo ordinaria use el punto de entrada de archivo: sondea un destino existente en busca de alias del origen antes de crear un archivo temporal exclusivo en el directorio de destino, valida la conversión completa, vacía el archivo y reemplaza el destino con MoveFileEx usando MOVEFILE_REPLACE_EXISTING y MOVEFILE_WRITE_THROUGH
Los fallos de conversión, renderizado, validación, cancelación y publicación conservan un archivo de destino existente y eliminan la salida temporal
El punto de entrada por flujo exige un destino vacío, posicionable y situado en la posición cero, y rechaza los alias conocidos de la entrada mediante IsLoadedSourceStreamAlias; solo publica bytes después de que toda la salida de preparación pase la validación nativa
Un fallo de escritura en el destino provoca un restablecimiento de mejor esfuerzo a un flujo vacío, pero un dispositivo arbitrario o un flujo personalizado puede rechazar ese restablecimiento y conservar una escritura parcial; use el punto de entrada de archivo cuando la publicación del archivo deba ser atómica
Opciones y límites de recursos
| Opción | Valor por defecto | Significado |
|---|---|---|
DPI | 150 | Resolución física solicitada, rango aceptado de 36 a 1200 |
MaxPages | 1000 | Número máximo de páginas del origen cargado |
MaxPixelsPerPage | 40,000,000 | Máximo de píxeles por página y máximo de píxeles de cada imagen de origen |
MaxTotalPixels | 500,000,000 | Máximo acumulado de píxeles ráster de salida |
MaxRasterBytes | 256 MiB | Asignación máxima de ráster de página o de imagen de origen, comprobada de forma conservadora a cuatro bytes por píxel |
MaxOutputBytes | 256 MiB | Tamaño máximo del PDF de preparación, aplicado antes de asignar y escribir el flujo |
MaxDecodedStreamBytes | 64 MiB | Limita cada cadena de filtros, el preflight combinado del contenido de cada página, las devoluciones de llamada individuales de lectura nativa de flujos, los flujos individuales de imágenes de origen codificadas y el validador nativo de salida |
MaxTotalDecodedBytes | 256 MiB | Limita el trabajo adicional nativo de decodificadores filtrados durante la conversión, el preflight combinado de contenido entre páginas y las devoluciones de llamada acumuladas de lectura nativa de flujos entre páginas |
MaxInputObjects | 200,000 | Número máximo de objetos indirectos ya cargados |
CancellationToken | nil | Token prestado que se comprueba antes del trabajo, durante el renderizado y la decodificación nativos, y antes de la publicación |
Checkpoint | nil | Callback síncrono prestado que se invoca con un sender nil en los checkpoints de conversión y de recursos nativos; no vuelva a entrar en el documento de origen |
Los límites de decodificación contabilizan trabajo del decodificador y pueden cargar de nuevo el mismo flujo filtrado durante el preflight, la compilación de la display list y el renderizado; aumentar un presupuesto es una decisión explícita del llamador
El preflight de píxeles cubre tanto la resolución física solicitada como el DPI entero del renderizador nativo tras el escalado por UserUnit; unas unidades muy pequeñas pueden requerir píxeles ráster adicionales, y unas dimensiones de página fraccionarias pueden introducir remuestreo de subpíxel cuando la imagen se vuelve a mapear sobre la página física
Los límites de conversión se aplican después de cargar el origen; configure los límites de recursos propios del cargador cuando acepte entrada no confiable
El grafo de objetos del origen se conserva, mientras que las cachés de lectura y las estadísticas de decodificación pueden quedar rellenas; la configuración de renderizado, el token de cancelación, el backend y los presupuestos de decodificación se restauran tanto en el éxito como en el fallo
Dé al convertidor acceso exclusivo a su documento de origen mientras aplica temporalmente esta configuración
Renderizado y color
Cada página debe renderizar sin un diagnóstico nativo de fallback, sin un diagnóstico descartado y sin un fallo de recurso ausente; el contenido no admitido rechaza la conversión en lugar de publicar una página incompleta
El argumento ICC debe describir sRGB con una representación matrix/TRC reconocida, los primarios estándar adaptados a D50 y la función de transferencia sRGB de la IEC; se rechazan los perfiles RGB no relacionados, los perfiles CMYK, los perfiles malformados y los perfiles basados en LUT
La salida declara un OutputIntent sRGB y metadatos XMP de PDF/A-4; un flujo de trabajo ICC personalizado de prueba o de salida ya configurado en el origen se rechaza porque su configuración del decodificador de imágenes no puede reinterpretarse de forma segura como sRGB
La compilación FPC exige su puente nativo de codecs con LittleCMS disponible y rechaza la conversión cuando falta ese backend de gestión de color
Los flujos de imágenes JPEG y JPX, incluidas las imágenes inline codificadas, tienen sus dimensiones reales de codestream inspeccionadas antes de la decodificación nativa de píxeles y deben coincidir con el diccionario de imágenes del PDF
JPEG acepta cabeceras acotadas baseline de 8 bits, secuenciales extendidas y progresivas; JPX acepta cabeceras J2K SIZ acotadas y cajas JP2 de longitud ordinaria con como mucho cuatro componentes y una precisión de componente de 16 bits como máximo
Los codecs codificados tienen un presupuesto de trabajo conservador adicional de 64 bytes por píxel de origen, y los metadatos de tile JPX están limitados a la vez por MaxInputObjects y por 1024 bytes por tile dentro de MaxRasterBytes; el presupuesto ráster por defecto de 256 MiB admite por tanto como mucho 4,194,304 píxeles de origen codificados, y los llamadores pueden aumentarlo explícitamente para imágenes mayores
La conversión JBIG2 se rechaza porque sus asignaciones internas de regiones y símbolos no pueden acotarse desde la API de cabeceras disponible; también se rechazan los codecs de imagen no terminales, las cajas JP2 de longitud extendida, los envoltorios no admitidos y los flujos de codecs envueltos que llevan DecodeParms
Los parámetros de fax CCITT deben conservar las dimensiones positivas de imagen declaradas; las anulaciones de DecodeParms.Columns y Rows que difieran del diccionario, incluido un Rows=0 desconocido, se rechazan antes de la decodificación nativa
Estas comprobaciones acotan los perfiles conocidos de cabecera y asignación que este convertidor acepta y no prometen un sandbox completo de memoria de proceso para cada decodificador nativo
Pérdida de información y de calidad
- El contenido vectorial, las fuentes, la transparencia y los espacios de color del origen se convierten en píxeles RGB de página; un DPI mayor mejora el detalle visual pero aumenta el uso de memoria y el tamaño del archivo
- El texto de salida no es buscable ni seleccionable, y no se sintetiza ninguna capa de texto ni salida OCR
- Las anotaciones, las apariencias de anotación, los campos de formulario, las apariencias de widget y las apariencias visibles de firma se omiten en lugar de quedar integradas en el ráster de la página
- Las firmas digitales, los archivos incrustados, los scripts, las actions, los marcadores, las capas como controles interactivos, las etiquetas estructurales y la identidad del documento original no se conservan
- El resultado no preserva la editabilidad vectorial, la validez de la firma original, la accesibilidad PDF/UA ni la semántica del documento de origen
THPDFArchivalConversionReport aporta el estado de éxito y cancelación, los recuentos de páginas del origen y de páginas renderizadas, los píxeles ráster, los bytes de salida, los recuentos de anotaciones, formularios y adjuntos eliminados, un diagnóstico de fallo y los hallazgos de la validación nativa
FailureKind distingue afkNone, afkConversion, afkBudget y afkCancelled; los fallos de presupuesto tipados del convertidor aportan además BudgetMetric, BudgetObserved y BudgetLimit
Una excepción de checkpoint detiene la conversión y se informa a través del resultado nativo de fallo; los envoltorios que necesiten la categoría original de la excepción del callback deben retenerla antes de que el convertidor la capture
La archive.pdfa4.raster operación JSON y C ABI exige aceptación explícita de la pérdida de información, preserva el handle del origen, entrega el PDF validado y el informe de pérdidas, y aplica topes conservadores de presupuesto por trabajo
Verificación de conformidad
El convertidor recarga su salida de preparación y exige ValidatePDFA4 con el perfil base de PDF/A-4 antes de publicar; el validador nativo cubre su conjunto documentado y acotado de reglas y no es una prueba de todos los requisitos de ISO 19005-4
La aceptación independiente puede usar veraPDF con --flavour 4; el fixture de regresión que contiene texto sin incrustar, transparencia, una imagen RGB, un enlace, un widget de firma y un adjunto pasó veraPDF 1.30.2 sin reglas ni comprobaciones fallidas
Ejecute Tests/Delphi/Run-HotPDFArchivalTests.bat para la suite de regresión no GUI específica