PDF cargado a PDF/A-4 con preservación de texto y vectores

HPDFArchivalConversion ofrece un perfil de preservación para documentos cargados cuyas fuentes visibles, espacios de color y recursos de rendering pueden satisfacer PDF/A-4 sin reemplazar el contenido de sus páginas

El conversor retiene los operadores de texto originales, los paths vectoriales, las imágenes, la geometría de páginas y las capas de texto OCR existentes, aplana las apariencias visibles normales de anotaciones y widgets en Form XObjects vectoriales, repara problemas soportados de metadatos y estructura, y valida el resultado serializado antes de publicar

Este perfil nunca rasteriza una página: RasterizedPages permanece en cero, incluso cuando el OCR renderiza un bitmap temporal de reconocimiento y agrega texto invisible buscable

La aceptación en runtime cubre Delphi Win32 y Win64; el FPC de Windows compila la implementación desde fuentes frescas, y los headers públicos generados compilan con C++Builder Win32 y Win64x

Puntos de entrada

function HPDFConvertLoadedToPDFA4Preserving(Source: THotPDF;
  Destination: TStream; const SRGBProfile: TBytes;
  const Options: THPDFArchivalPreservationOptions;
  out Report: THPDFArchivalPreservationReport): Boolean;

function HPDFConvertLoadedToPDFA4PreservingFile(Source: THotPDF;
  const TargetFileName: string; const SRGBProfile: TBytes;
  const Options: THPDFArchivalPreservationOptions;
  out Report: THPDFArchivalPreservationReport): Boolean;

Carga primero la fuente, mantén vivo cualquier stream de entrada propiedad del caller y dale al conversor acceso exclusivo al documento durante la operación

Options := THPDFArchivalPreservationOptions.Default;
if not HPDFConvertLoadedToPDFA4PreservingFile(Source, TargetFileName,
  SRGBProfile, Options, Report) then
  raise Exception.Create(Report.Conversion.Diagnostic);

Prueba de preservación

El conversor toma un snapshot del graph fuente editado actual bajo una transacción de graph y hace rollback de la fuente tras la serialización, luego realiza todo el trabajo de conversión sobre un clon cargado independiente

Los content streams decodificados originales de páginas deben permanecer byte-idénticos y alcanzables desde sus páginas originales en su orden original tras recargar la salida

Los árboles de recursos de página y los árboles retenidos de recursos de apariencias normales se recorren con límites de objetos y recursión; los programas de fuentes incrustadas, los mapas ToUnicode, las imágenes, los perfiles ICC y los Form XObjects anidados retienen sus payloads codificados originales, verificados con SHA-256 en streaming y comprobados por continuarse alcanzando desde las páginas de salida

Los content streams independientes rodean los operadores originales de página con guards de graphics state y contienen los operadores de apariencias agregados, evitando el path nativo de append de un solo stream que reescribiría un content stream original

TextAndVectorContentPreserved se vuelve true solo después de que la validación nativa de salida y las comprobaciones de preservación pasan; se limpia cuando la conversión o la publicación del archivo falla

Manejo de apariencias

Suministrar una apariencia normal existente soporta texto arbitrario con fuente incrustada que ya está representado correctamente en esa apariencia, incluido Unicode; el conversor retiene esa apariencia en lugar de sustituir una fuente del sistema

El aplanado elimina la interacción de anotaciones, los campos editables, los cálculos, las actions y los campos de firma manteniendo las apariencias visibles; cada anotación afectada y cada apariencia sintetizada produce una entrada de pérdida con su página fuente, índice de anotación y número de objeto cuando están disponibles

Color, fuentes y pérdidas explícitas

El argumento ICC requerido es un perfil sRGB matrix/TRC aceptado por el validador de archivado existente; cada perfil de salida existente debe tener exactamente los mismos bytes decodificados que el perfil suministrado, de lo contrario la conversión se rechaza para evitar reinterpretar la condición de salida existente

El conversor agrega un output intent sRGB PDF/A solo cuando hace falta, sincroniza el serializador real a un header PDF 2.0 e invoca la reparación acotada base de metadatos y estructura PDF/A-4

No incrusta programas de fuentes visibles ausentes, no recodifica texto original, no recolorea operadores DeviceCMYK, no reemplaza una condición de salida existente ni aplana la transparencia de páginas a un bitmap; los hallazgos nativos de preflight no resueltos rechazan la publicación

Las fuentes cifradas deben descifrarse antes de la conversión; los campos de firma exigen AllowSignatureInvalidation explícito, y los embedded files existentes exigen RemoveEmbeddedFiles explícito porque este perfil apunta al PDF/A-4 base

Losses también reporta la invalidación de firmas, la eliminación de embedded files, la eliminación de diccionarios Info legacy y la eliminación de metadatos de catalog o presentación prohibidos

El XMP existente se retiene cuando es soportado; cuando se generan metadatos, se transfiere la información soportada de título, autor, asunto y keywords, mientras que no se promete que campos Info legacy arbitrarios sobrevivan

OCR y presupuestos

AddOCRToImagePages vale false por defecto; al activarlo se reconocen las páginas sin texto extraíble y se agrega texto invisible sin reemplazar el contenido original ni las capas OCR existentes

Fija OCREngine a un motor de la aplicación o déjalo nil para el motor ASCII acotado integrado, cuya cobertura de idioma y tipografía sigue siendo la del perfil de reconocimiento integrado

OCROptions controla la resolución de reconocimiento y los presupuestos de palabras, mientras que el conversor fuerza skip-pages-with-text, la retención de las capas OCR existentes y la omisión de un grupo de optional-content nuevo

Limits usa THPDFArchivalConversionOptions.Default para conteo de páginas, conteo de objetos, bytes de salida en staging, trabajo por stream individual, trabajo acumulado de streams, cancelación y checkpoints síncronos; los límites de píxeles raster solo aplican cuando el OCR renderiza bitmaps de reconocimiento

Los defaults adicionales son 1,024 entradas de pérdida, 1,048,576 unidades de código de texto extraído o esperado y 4,000,000 tokens de contenido por pasada de validación nativa

El hashing de payloads de recursos cuenta bytes codificados contra los mismos presupuestos de trabajo por stream; la verificación de fuente y salida consume ambas trabajo acumulado, de modo que colecciones grandes de escaneos pueden exigir un MaxTotalDecodedBytes aumentado explícitamente aunque la verificación de recursos use un buffer de hash fijo de 64 KiB

Los presupuestos aplican después de cargar la fuente y acotan por separado los snapshots propios del conversor y la salida en staging; configura los límites del loader al aceptar entradas no confiables

Publicación y validación

La API de stream exige un destino vacío seekable en posición cero y rechaza alias de la fuente; copia los bytes de staging solo después de que la recarga, la validación nativa, las comprobaciones de preservación y las comprobaciones de cancelación tengan éxito

Un fallo de escritura en el destino dispara un reset de mejor esfuerzo; un stream personalizado arbitrario puede rechazar ese reset, así que usa el punto de entrada de archivos para la publicación atómica

La API de archivos sondea alias de la fuente, crea un archivo temporal exclusivo junto al destino, le hace flush y reemplaza el destino con MoveFileEx solo cuando todas las comprobaciones pasan; los fallos anteriores retienen un destino existente y eliminan el archivo temporal

InitialValidationIssues, Repair, Conversion.ValidationIssues, los detalles de OCR, los conteos de streams, los conteos de texto extraído y las pérdidas explícitas quedan disponibles para inspección

La validación nativa cubre las reglas PDF/A-4 soportadas de HotPDF y no es una certificación general de PDFs arbitrarios; la aceptación de regresión usa además comprobaciones independientes con pypdf y MuPDF más la validación PDF/A-4 de veraPDF sobre los artifacts de apariencias generadas y OCR nativo

La regresión con corpus real incluye guías de Word y de biblioteca con fuentes incrustadas y una colección de escaneos chinos de 380 páginas, mientras que un reporte comercial con fuentes no incrustadas y contenido DeviceCMYK es un caso de rechazo explícito

Comandos de regresión

powershell -File Tests/Delphi/Run-ArchivalPreservationTests.ps1 -Platform Win32
powershell -File Tests/Delphi/Run-ArchivalPreservationTests.ps1 -Platform Win64
python Tests/Delphi/Fixtures/ArchivalPreservation/verify_preserving_output.py
verapdf --format xml --flavour 4 Tests/Delphi/generated/ArchivalPreservation/appearance.pdf Tests/Delphi/generated/ArchivalPreservation/ocr.pdf Tests/Delphi/generated/ArchivalPreservation/native-appearance.pdf

El runner de Delphi suprime el lanzamiento del visor e incluye fixtures de regresión tanto de preservación como del raster existente; la aceptación independiente con veraPDF usa el perfil real de validación PDF/A-4

Temas relacionados

La conversión de archivado raster provee un perfil separado con pérdida explícita del texto y vectores originales cuando el rendering nativo es soportado