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
- Les apparences normales
AP/Nvisibles sont mappées de leur BBox et Matrix de Form vers le Rect de l’annotation via l’aplatissement natif d’annotations, en conservant leurs propres polices et ressources - Les drapeaux Invisible, Hidden et NoView empêchent la peinture même quand une apparence normale existante est présente ; les annotations Popup sont retirées sans peinture
- Les liens sans bordure ni apparence normale ne sont retirés sans peinture que lorsqu’une bordure explicite de largeur nulle établit qu’ils n’ont pas de bordure visible
SynthesizeMissingAppearancesvaut true par défaut et invoque la génération native d’apparences de markup ou de champs ; sous-types non pris en charge, rectangles invalides ou génération échouée rejettent la conversion- Les apparences textuelles manquantes prennent en charge les valeurs ASCII avec un encodage de police natif compatible ; les valeurs textuelles hexadécimales, Unicode ou masquées exigent une apparence normale explicite
- Les apparences textuelles synthétisées sont confrontées à leurs valeurs sources dans le texte cherchable rechargé après normalisation des espaces ; un encodage de police incompatible rejette la publication
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