Loaded PDF to PDF/A-4 with Text and Vector Preservation
HPDFArchivalConversion nabízí zachovávající profil pro načtené dokumenty, jejichž viditelná písma, barevné prostory i rendering resource mohou uspokojit PDF/A-4, aniž by vyměnily obsah svých stránek
Konvertor si uchová původní textové operátory, vektorové cesty, obrázky, geometrii stránek i stávající OCR textové vrstvy, zploští viditelné normal appearance anotací i widgetů do vektorových Form XObject, opraví podporované metadata i strukturální problémy a validuje serializovaný výsledek, dřív než publikace
Ten profil nikdy nerasterizuje stránku: RasterizedPages zůstává nulová, tedy i když OCR renderuje dočasnou rozpoznávací bitmapu a připojí neviditelný prohledávatelný text
Runtime akceptace pokrývá Delphi Win32 a Win64; Windows FPC zkompiluje implementaci z čerstvých zdrojů a generované veřejné hlavičky se kompilují s C++Builder Win32 a Win64x
Vstupní body
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;
Zdroj nejdřív načtěte, držte jakýkoli vstupní stream vlastněný volajícím naživu a konvertoru dopřejte výhradní přístup k dokumentu během operace
Options := THPDFArchivalPreservationOptions.Default;
if not HPDFConvertLoadedToPDFA4PreservingFile(Source, TargetFileName,
SRGBProfile, Options, Report) then
raise Exception.Create(Report.Conversion.Diagnostic);
Důkaz zachování
Konvertor pořídí snapshot aktuálního editovaného zdrojového grafu pod grafovou transakcí, po serializaci zdroj odroluje a pak veškerou konverzní práci provede na nezávisle načteném klonu
Původní dekódované content streamy stránek musí zůstat bajtově identické a dosažitelné ze svých původních stránek v původním pořadí po reloadu výstupu
Stromy resource stránek i držené stromy resource normal appearance se procházejí s limity objektů i rekurze; vložené font programy, mapy ToUnicode, obrázky, ICC profily i vnořené Form XObject si uchovají své původní kódované payloady, verifikované streamovaným SHA-256 a kontrolované na další dosažitelnost z výstupních stránek
Nezávislé content streamy ohrají původní stránkové operátory hlídkami grafického stavu a drží připojené appearance operátory, čímž se předejde nativní cestě appendu jediného streamu, která by přepsala původní content stream
TextAndVectorContentPreserved se stane true až po úspěchu nativní validace výstupu i zachovávajících kontrol; při selhání konverze či publikace souboru se vymaže
Zacházení s appearance
- Viditelná normal
AP/Nappearance se mapují ze svého Form BBox a Matrix na Rect anotace pomocí nativního zploštění anotací, se zachováním vlastních písem i resource - Příznaky Invisible, Hidden a NoView zabrání malování, i když existující normal appearance je přítomná; Popup anotace se odstraní bez malování
- Linky bez ohraničení bez normal appearance se odstraní bez malování jen tehdy, když explicitní nulová šířka ohraničení zavede, že viditelné ohraničení nemají
SynthesizeMissingAppearancesdefaultuje na true a vyvolá nativní generování markupu či appearance pole; nepodporované podtypy, neplatné obdélníky či selhání generování konverzi odmítnou- Chybějící textové appearance podporují ASCII hodnoty s kompatibilním nativním kódováním písma; hexadecimální, Unicode či maskované textové hodnoty vyžadují explicitní normal appearance
- Syntetizovaná textová appearance se kontrolují proti svým zdrojovým hodnotám v reloadovaném prohledávatelném textu po normalizaci bílých znaků; nekompatibilní kódování písma publikaci odmítne
Dodání existující normal appearance podporuje libovolný text s vloženým písmem, který je už v té appearance správně reprezentovaný, tedy i Unicode; konvertor tu appearance uchová, místo aby substituoval systémové písmo
Zploštění odstraní anotační interakci, upravitelná pole, výpočty, akce i pole podpisů, při zachování viditelných appearance; každá dotčená anotace i každá syntetizovaná appearance vytvoří položku ztráty se svou zdrojovou stránkou, anotačním indexem i objektovým číslem, když je dostupné
Barvy, písma a explicitní ztráty
Povinný argument ICC je profil sRGB matrix/TRC přijímaný stávajícím archivačním validátorem; každý stávající výstupní profil musí mít přesně tytéž dekódované bajty jako dodaný profil, jinak se konverze odmítne, aby se předešlo nové interpretaci stávajícího výstupního stavu
Konvertor přidá output intent sRGB PDF/A jen tehdy, když je potřeba, synchronizuje skutečný serializátor na hlavičku PDF 2.0 a vyvolá ohraničený repair metadat i struktury base PDF/A-4
Nevkládá chybějící viditelné font programy, nepřekóduje původní text, nepřebarvuje operátory DeviceCMYK, nevyměňuje stávající výstupní stav ani nezplošťuje transparentnost stránek do bitmapy; nerozřešená nativní preflight zjištění publikaci odmítnou
Šifrované zdroje se musí před konverzí dešifrovat; pole podpisů vyžadují explicitní AllowSignatureInvalidation a stávající vložené soubory explicitní RemoveEmbeddedFiles, protože tenhle profil cílí base PDF/A-4
Losses taky reportuje zneplatnění podpisů, odebrání vložených souborů, odebrání legacy Info slovníků i odebrání zakázaných katalogových či prezentací metadat
Stávající XMP se zachová, když je podporované; při generování metadat se přenese podporovaná informace o titulku, autorovi, předmětu a klíčových slovech, zatímco za přežití libovolných legacy Info polí se neslibuje
OCR a rozpočty
AddOCRToImagePages defaultuje na false; jeho zapnutí rozpozná stránky bez extrahovatelného textu a připojí neviditelný text, aniž by vyměnila původní obsah či stávající OCR vrstvy
Nastavte OCREngine na aplikační engine, či ho nechte nil pro vestavěný ohraničený ASCII OCR engine, jehož pokrytí jazyka i typografie zůstává pokrytím vestavěného rozpoznávacího profilu
OCROptions řídí rozlišení rozpoznání i rozpočty slov, zatímco konvertor vynutí skip-pages-with-text, zachování stávajících OCR vrstev i vynechání nové skupiny optional-content
Limits použije THPDFArchivalConversionOptions.Default pro počet stránek, počet objektů, staged výstupní bajty, práci jednotlivých streamů, kumulativní práci streamů, zrušení i synchronní checkpointy; pixelové limity rasteru platí jen tehdy, když OCR renderuje rozpoznávací bitmapy
Dodatečné defaulty jsou 1 024 položek ztrát, 1 048 576 extrahovaných či očekávaných textových code unit a 4 000 000 obsahových tokenů na jeden nativní validační průchod
Hashování payloadů resource počítá kódované bajty do týže rozpočtů práce streamů; zdrojová i výstupní verifikace konzumují kumulativní práci, takže velké skenové kolekce můžou vyžadovat explicitně zvýšené MaxTotalDecodedBytes, i když verifikace resource používá pevný hash buffer 64 KiB
Rozpočty platí po načtení zdroje a ohraničují snapshoty vlastněné konvertorem i staged výstup samostatně; limity loaderu nakonfigurujte, když přijímáte nedůvěryhodný vstup
Publikace a validace
Stream API vyžaduje prázdný seekovatelný cíl na pozici nula a odmítá aliasy zdroje; staged bajty zkopíruje až poté, co uspějí reload, nativní validace, zachovávající kontroly i kontroly zrušení
Chyba zápisu do cíle spustí best-effort reset; libovolný vlastní stream ten reset může odmítnout, takže pro atomickou publikaci souboru použijte souborový vstupní bod
Souborové API sonduje aliasy zdroje, vytvoří výhradní dočasný soubor vedle cíle, flushne ho a vymění cíl přes MoveFileEx, až poté, co projdou všechny kontroly; dřívější selhání zachovají existující cíl a odstraní dočasný soubor
InitialValidationIssues, Repair, Conversion.ValidationIssues, detaily OCR, počty streamů, počty extrahovaného textu i explicitní ztráty zůstávají k prohlédnutí dostupné
Nativní validace pokrývá podporovaná pravidla HotPDF PDF/A-4 a není všeobjímající certifikací libovolných PDF; regresní akceptace navíc používá nezávislé kontroly pypdf a MuPDF plus validaci veraPDF PDF/A-4 nad generovanými appearance i nativními OCR artefakty
Skutečná korpusová regrese zahrnuje Word i knihovní průvodce s vloženými písmy a čínskou skenovou kolekci o 380 stránkách, zatímco obchodní report s nevloženými písmy i obsahem DeviceCMYK je explicitní case odmítnutí
Regresní příkazy
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
Delphi runner potlačí spuštění čtečky a zahrnuje jak zachovávající, tak stávající raster regresní fixtury; nezávislá akceptace veraPDF používá skutečný validační profil PDF/A-4
Související témata
Raster archivační konverze poskytuje samostatný profil s explicitní ztrátou původního textu i vektorů, když je nativní renderování podporované