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

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é