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 trazados vectoriales, las imágenes, la geometría de página y las capas de texto OCR existentes, aplana las apariencias visibles normales de anotaciones y widgets en Form XObjects vectoriales, repara los problemas de metadatos y estructura soportados y valida el resultado serializado antes de publicar

Este perfil nunca rasteriza una página: RasterizedPages permanece en cero, incluido cuando el OCR renderiza un bitmap temporal de reconocimiento y añade 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 el origen, mantén vivo cualquier stream de entrada propiedad del llamador 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 grafo de origen editado actual bajo una transacción del grafo y hace rollback del origen tras la serialización; después realiza todo el trabajo de conversión sobre un clon cargado independiente

Los streams de contenido de página decodificados originales 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 de recursos de apariencias normales retenidos se recorren con límites de objetos y de 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 su continuada alcanzabilidad desde las páginas de salida

Los streams de contenido independientes envuelven los operadores originales de página con guardas de estado gráfico y alojan los operadores de apariencia añadidos, evitando la ruta nativa de añadido a stream único que reescribiría un stream de contenido original

TextAndVectorContentPreserved se activa solo tras pasar la validación nativa de la salida y las comprobaciones de preservación; se desactiva cuando falla la conversión o la publicación del fichero

Manejo de apariencias

Aportar una apariencia normal existente soporta texto arbitrario de fuentes incrustadas que ya está representado correctamente en esa apariencia, incluido Unicode; el conversor retiene esa apariencia en lugar de sustituirla por 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 mientras conserva las apariencias visibles; cada anotación afectada y cada apariencia sintetizada produce una entrada de pérdida con su página de origen, índice de anotación y número de objeto cuando están disponibles

Color, fuentes y pérdidas explícitas

El argumento ICC obligatorio 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 añade un output intent PDF/A sRGB solo cuando hace falta, sincroniza el serializador real a un header PDF 2.0 e invoca la reparación acotada de metadatos y estructura base de PDF/A-4

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

Los orígenes cifrados deben descifrarse antes de la conversión; los campos de firma exigen AllowSignatureInvalidation explícito, y los ficheros incrustados existentes exigen RemoveEmbeddedFiles explícito, porque este perfil apunta al PDF/A-4 base

Losses informa además de la invalidación de firmas, la eliminación de ficheros incrustados, la eliminación de diccionarios Info heredados y la eliminación de metadatos prohibidos de catálogo o de presentación

El XMP existente se retiene cuando está soportado; cuando se generan metadatos, se transfiere la información soportada de título, autor, asunto y palabras clave, mientras que no se promete la supervivencia de campos Info heredados arbitrarios

OCR y presupuestos

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

Pon OCREngine a un motor de la aplicación o déjalo nil para el motor OCR 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 nuevo grupo de optional content

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

Otros valores por defecto son 1 024 entradas de pérdida, 1 048 576 unidades de código de texto extraídas o esperadas y 4 000 000 de tokens de contenido por pasada de validación nativa

El hashing de payloads de recursos imputa los bytes codificados a los mismos presupuestos de trabajo de stream; la verificación del origen y de la salida consumen ambas trabajo acumulado, de modo que colecciones grandes de escaneos pueden exigir un MaxTotalDecodedBytes aumentado explícitamente, aunque la verificación de recursos usa un buffer de hash fijo de 64 KiB

Los presupuestos aplican tras la carga del origen y acotan por separado los snapshots propios del conversor y la salida en staging; configura los límites del loader cuando aceptes entrada no confiable

Publicación y validación

La API de stream exige un destino vacío y seekable en posición cero y rechaza alias del origen; copia los bytes de staging solo cuando la recarga, la validación nativa, las comprobaciones de preservación y las comprobaciones de cancelación han tenido éxito

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

La API de fichero sondea alias del origen, crea un fichero temporal exclusivo junto al destino, lo vuelca y reemplaza el destino con MoveFileEx solo cuando todas las comprobaciones pasan; los fallos anteriores conservan un destino existente y eliminan el fichero temporal

InitialValidationIssues, Repair, Conversion.ValidationIssues, los detalles del OCR, los recuentos de streams, los recuentos 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 generalizada de PDFs arbitrarios; la aceptación de regresión usa además comprobaciones independientes con pypdf y MuPDF más la validación veraPDF de PDF/A-4 sobre los artefactos generados de apariencias y OCR nativo

La regresión con corpus real incluye guías de Word y de la biblioteca con fuentes incrustadas y una colección de escaneos en chino de 380 páginas, mientras que un informe 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 arranque del visor e incluye los fixtures de regresión de preservación y de raster existentes; la aceptación veraPDF independiente usa el perfil real de validación PDF/A-4

Temas relacionados

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