PDF chargé vers PDF/A-4 avec préservation du texte et du vecteur

HPDFArchivalConversion propose un profil de préservation pour les documents chargés dont les polices visibles, espaces colorimétriques et ressources de rendu peuvent satisfaire PDF/A-4 sans remplacer leur contenu de pages

Le convertisseur conserve les opérateurs de texte originaux, chemins vectoriels, images, géométrie de pages et couches de texte OCR existantes, aplatit les apparences visibles normales d’annotations et de widgets en Form XObjects vectoriels, répare les problèmes de métadonnées et structurels pris en charge, et valide le résultat sérialisé avant publication

Ce profil ne rasterise jamais une page : RasterizedPages reste à zéro, y compris quand l’OCR rend un bitmap de reconnaissance temporaire et ajoute du texte invisible cherchable

L’acceptation runtime couvre Delphi Win32 et Win64 ; le FPC Windows compile l’implémentation depuis des sources fraîches, et les en-têtes publics générés compilent avec C++Builder Win32 et Win64x

Points d’entrée

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;

Chargez d’abord la source, gardez vivant tout flux d’entrée possédé par l’appelant et donnez au convertisseur un accès exclusif au document pendant l’opération

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

Preuve de préservation

Le convertisseur photographie le graphe source édité courant sous une transaction de graphe et restaure la source après sérialisation, puis effectue tout le travail de conversion sur un clone chargé indépendant

Les flux de contenu de pages décodés originaux doivent rester identiques à l’octet près et joignables depuis leurs pages d’origine dans leur ordre original après rechargement de la sortie

Les arbres de ressources de pages et les arbres de ressources d’apparences normales retenues sont parcourus avec des limites d’objets et de récursion ; les programmes de polices embarqués, maps ToUnicode, images, profils ICC et Form XObjects imbriqués conservent leurs charges utiles encodées originales, vérifiées par SHA-256 en streaming et contrôlées pour rester joignables depuis les pages de sortie

Des flux de contenu indépendants encadrent les opérateurs de pages originaux avec des gardes d’état graphique et portent les opérateurs d’apparences ajoutés, évitant le chemin natif d’ajout en flux unique qui réécrirait un flux de contenu original

TextAndVectorContentPreserved ne passe à true qu’après la validation de sortie native et la réussite des vérifications de préservation ; il est remis à zéro quand la conversion ou la publication du fichier échoue

Traitement des apparences

Fournir une apparence normale existante prend en charge du texte à police embarquée arbitraire déjà représenté correctement dans cette apparence, Unicode compris ; le convertisseur conserve cette apparence au lieu de substituer une police système

L’aplatissement retire l’interaction d’annotations, les champs éditables, les calculs, les actions et les champs de signature tout en gardant les apparences visibles ; chaque annotation affectée et chaque apparence synthétisée produit une entrée de perte avec sa page source, son index d’annotation et son numéro d’objet quand ils sont disponibles

Couleurs, polices et pertes explicites

L’argument ICC requis est un profil sRGB matrix/TRC accepté par le validateur d’archivage existant ; tout profil de sortie existant doit avoir exactement les mêmes octets décodés que le profil fourni, sinon la conversion est rejetée pour éviter de réinterpréter la condition de sortie existante

Le convertisseur n’ajoute un output intent sRGB PDF/A que lorsque c’est nécessaire, synchronise le sérialiseur réel sur un en-tête PDF 2.0 et invoque la réparation bornée de métadonnées et de structure PDF/A-4 de base

Il n’embarque pas les programmes de polices visibles manquants, ne recode pas le texte original, ne recolore pas les opérateurs DeviceCMYK, ne remplace pas une condition de sortie existante et n’aplatit pas la transparence de pages en bitmap ; les constats de preflight natifs non résolus rejettent la publication

Les sources chiffrées doivent être déchiffrées avant conversion ; les champs de signature exigent un AllowSignatureInvalidation explicite et les fichiers embarqués existants exigent un RemoveEmbeddedFiles explicite parce que ce profil cible le PDF/A-4 de base

Losses rapporte aussi l’invalidation de signatures, le retrait de fichiers embarqués, le retrait des dictionnaires Info legacy et le retrait des métadonnées de catalogue ou de présentation interdites

Le XMP existant est conservé quand il est pris en charge ; quand les métadonnées sont générées, les informations de titre, auteur, sujet et mots-clés prises en charge sont transférées, tandis que les champs Info legacy arbitraires ne sont pas promis de survivre

OCR et budgets

AddOCRToImagePages vaut false par défaut ; l’activer reconnaît les pages sans texte extractible et ajoute du texte invisible sans remplacer le contenu original ni les couches OCR existantes

Définissez OCREngine sur un moteur applicatif ou laissez-le nil pour le moteur OCR ASCII borné intégré, dont la couverture de langues et de typographie reste celle du profil de reconnaissance intégré

OCROptions contrôle la résolution de reconnaissance et les budgets de mots, tandis que le convertisseur force l’omission des pages avec texte, la conservation des couches OCR existantes et l’omission d’un nouveau groupe optional-content

Limits utilise THPDFArchivalConversionOptions.Default pour le nombre de pages et d’objets, les octets de sortie mis en scène, le travail par flux individuel, le travail de flux cumulé, l’annulation et les checkpoints synchrones ; les limites de pixels raster ne s’appliquent que lorsque l’OCR rend des bitmaps de reconnaissance

Les défauts supplémentaires sont 1 024 entrées de pertes, 1 048 576 unités de code de texte extraites ou attendues et 4 000 000 de tokens de contenu par passe de validation native

Le hachage des charges utiles de ressources compte les octets encodés dans les mêmes budgets de travail de flux ; la vérification de la source et de la sortie consomment toutes deux du travail cumulé, si bien que de grandes collections de scans peuvent exiger un MaxTotalDecodedBytes explicitement augmenté même si la vérification des ressources utilise un buffer de hachage fixe de 64 Kio

Les budgets s’appliquent après le chargement de la source et bornent séparément les snapshots possédés par le convertisseur et la sortie mise en scène ; configurez les limites du loader quand vous acceptez des entrées non fiables

Publication et validation

L’API de flux exige une destination seekable vide à la position zéro et rejette les alias de sources ; elle copie les octets mis en scène seulement après la réussite du rechargement, de la validation native, des vérifications de préservation et des vérifications d’annulation

Un échec d’écriture de destination déclenche une remise à zéro en mode best-effort ; un flux personnalisé arbitraire peut refuser cette remise à zéro, utilisez donc le point d’entrée fichier pour une publication atomique

L’API fichier sonde les alias de sources, crée un fichier temporaire exclusif à côté de la cible, le flush et remplace la cible par MoveFileEx seulement après que toutes les vérifications sont passées ; les échecs antérieurs conservent une cible existante et suppriment le fichier temporaire

InitialValidationIssues, Repair, Conversion.ValidationIssues, détails OCR, comptages de flux, comptages de texte extrait et pertes explicites restent disponibles pour inspection

La validation native couvre les règles PDF/A-4 HotPDF prises en charge et n’est pas une certification généraliste de PDF arbitraires ; l’acceptation de régression utilise en plus des vérifications indépendantes pypdf et MuPDF plus la validation veraPDF PDF/A-4 sur les artefacts d’apparences générés et d’OCR natif

La régression sur corpus réel inclut des guides Word et bibliothèque à polices embarquées et une collection de scans chinois de 380 pages, tandis qu’un rapport commercial avec polices non embarquées et contenu DeviceCMYK constitue un cas de rejet explicite

Commandes de régression

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

Le runner Delphi supprime le lancement de lecteur et inclut les fixtures de régression de préservation et de raster existantes ; l’acceptation veraPDF indépendante utilise le vrai profil de validation PDF/A-4

Sujets liés

Conversion d’archivage raster fournit un profil séparé avec perte explicite du texte et des vecteurs originaux quand le rendu natif est pris en charge