Převod načteného PDF na rastrové PDF/A-4
HPDFArchivalConversion vytvoří nový dokument PDF/A-4 z viditelného obsahu stránek načteného dokumentu THotPDF, přičemž použije striktní nativní renderování a dodaný sRGB ICC profil
Každá výstupní stránka obsahuje bezztrátově komprimovaný RGB rastrový obrázek v požadovaném DPI, přičemž původní viditelné rozměry, ořez, rotaci i UserUnit nese geometrie výstupní stránky
Když musí přežít původní embedded písma, textové operátory, vektorové path, obrázky, OCR vrstvy a viditelné vzhledy annotací či widgetů, použijte samostatný profil zachovávající text a vektory; rastrový profil tyto struktury nezachovává
Vstupní body
function HPDFConvertLoadedToPDFA4Raster(Source: THotPDF;
Destination: TStream; const SRGBProfile: TBytes;
const Options: THPDFArchivalConversionOptions;
out Report: THPDFArchivalConversionReport): Boolean;
function HPDFConvertLoadedToPDFA4RasterFile(Source: THotPDF;
const TargetFileName: string; const SRGBProfile: TBytes;
const Options: THPDFArchivalConversionOptions;
out Report: THPDFArchivalConversionReport): Boolean;
Nejprve načtěte zdroj a každý vstupní stream vlastněný volajícím udržujte naživu, dokud se nezničí zdrojový dokument
Pro běžné archivní publikování použijte souborový vstupní bod: ten před vytvořením exkluzivního dočasného souboru v cílovém adresáři zjistí, zda cíl není alias zdroje, ověří kompletní konverzi, vyprázdní soubor na disk a nahradí cíl přes MoveFileEx s MOVEFILE_REPLACE_EXISTING a MOVEFILE_WRITE_THROUGH
Selhání konverze, renderování, ověření, zrušení i publikování ponechá existující cílový soubor a dočasný výstup odstraní
Streamový vstupní bod vyžaduje prázdný, vyhledávatelný cíl na pozici nula a známé aliasy vstupu odmítne přes IsLoadedSourceStreamAlias; bajty publikuje až poté, co kompletní připravený výstup projde nativním ověřením
Selhání zápisu do cíle spustí reset na prázdný stream po nejlepším úsilí, ale libovolné zařízení nebo vlastní stream může reset odmítnout a částečný zápis zachovat; pokud musí být publikování souboru atomické, použijte souborový vstupní bod
Volby a meze zdrojů
| Volba | Výchozí | Význam |
|---|---|---|
DPI | 150 | Požadované fyzické rozlišení, přijímaný rozsah 36 až 1200 |
MaxPages | 1000 | Maximální počet načtených zdrojových stránek |
MaxPixelsPerPage | 40,000,000 | Maximální počet pixelů stránky a maximální počet pixelů jednoho zdrojového obrázku |
MaxTotalPixels | 500,000,000 | Maximální počet akumulovaných výstupních rastrových pixelů |
MaxRasterBytes | 256 MiB | Maximální alokace rastru stránky nebo zdrojového obrázku, konzervativně počítaná čtyři bajty na pixel |
MaxOutputBytes | 256 MiB | Maximální velikost připraveného PDF, vynucená před alokací streamu a zápisy |
MaxDecodedStreamBytes | 64 MiB | Ohraničuje každý řetězec filtrů, kombinovaný content preflight každé stránky, jednotlivé nativní callbacky čtení streamu, jednotlivé zakódované streamy zdrojových obrázků i nativní validátor výstupu |
MaxTotalDecodedBytes | 256 MiB | Ohraničuje dodatečnou práci nativních filtrovaných dekodérů v průběhu konverze, kombinovaný content preflight napříč stránkami i kumulované nativní callbacky čtení streamu napříč stránkami |
MaxInputObjects | 200,000 | Maximální počet už načtených nepřímých objektů |
CancellationToken | nil | Přejatý token kontrolovaný před prací, během nativního renderování a dekódování i před publikováním |
Checkpoint | nil | Přejatý synchronní callback volaný s odesílatelem nil na konverzních i nativních zdrojových checkpoitech; nevnorujte se zpět do zdrojového dokumentu |
Limity dekódování počítají práci dekodéru a mohou tentýž filtrovaný stream účtovat znovu během preflightu, kompilace display listu i renderování; zvýšení limitu je explicitní rozhodnutí volajícího
Pixelový preflight zahrnuje požadované fyzické rozlišení i celočíselné DPI nativního rendereru po škálování UserUnit; velmi malé jednotky mohou vyžadovat další rastrové pixely a neceločíselné rozměry stránky mohou při mapování obrázku zpět na fyzickou stránku vnést subpixelový resampling
Meze konverze platí až po načtení zdroje; vlastní limity zdrojů loaderu nastavte, když přijímáte nedůvěryhodný vstup
Graf zdrojových objektů zůstává zachovaný, zatímco se mohou naplnit read cache a statistiky dekódování; nastavení renderování, token zrušení, backend i limity dekódování se obnoví při úspěchu i při selhání
Dejte konvertoru výhradní přístup ke zdrojovému dokumentu po dobu, kdy dočasně aplikuje tato nastavení
Renderování a barvy
Každá stránka se musí vyrenderovat bez nativní fallback diagnostiky, zahozené diagnostiky nebo selhání kvůli chybějícímu zdroji; nepodporovaný obsah konverzi odmítne místo publikování nekompletní stránky
Argument ICC musí popisovat sRGB s rozpoznanou reprezentací matrix/TRC, standardními primárními barvami adaptovanými na D50 a přenosovou funkcí IEC sRGB; nesouvisející RGB profily, CMYK profily, poškozené profily i profily založené na LUT se odmítnou
Výstup deklaruje sRGB OutputIntent a XMP metadata PDF/A-4; vlastní proof či výstupní ICC workflow už nakonfigurované na zdroji se odmítne, protože jeho nastavení image dekodérů nelze bezpečně přeinterpretovat jako sRGB
Build FPC vyžaduje svůj nativní codec bridge s dostupným LittleCMS a konverzi odmítne, když tento backend správy barev chybí
U streamů obrázků JPEG a JPX, včetně zakódovaných inline obrázků, se skutečné rozměry codestreamu zkontrolují před nativním dekódováním pixelů a musí souhlasit s PDF slovníkem obrázku
JPEG přijímá ohraničené hlavičky 8bit baseline, extended sequential i progressive; JPX přijímá ohraničené hlavičky J2K SIZ a JP2 boxy běžné délky s nejvýše čtyřmi komponentami a přesností komponent nejvýše 16 bitů
Zakódované kodeky mají dodatečnou konzervativní pracovní mez 64 bajtů na zdrojový pixel a metadata JPX tile se omezují jak přes MaxInputObjects, tak na 1024 bajtů na tile v rámci MaxRasterBytes; výchozí rastrová mez 256 MiB proto dovolí nejvýše 4,194,304 zakódovaných zdrojových pixelů a volající ji pro větší obrázky mohou explicitně zvýšit
Konverze JBIG2 se odmítne, protože její interní alokace regionů a symbolů nelze z dostupného header API ohraničit; odmítnou se i nonterminální image kodeky, JP2 boxy prodloužené délky, nepodporované wrappery i streamy zabalených kodeků nesoucí DecodeParms
Faxové parametry CCITT musí zachovat deklarované kladné rozměry obrázku; přepisy DecodeParms.Columns a Rows odlišné od slovníku, včetně neznámého Rows=0, se odmítnou před nativním dekódováním
Tyto kontroly ohraničují známé header a alokační profily přijímané tímto konvertorem a neslibují kompletní sandbox procesní paměti pro každý nativní dekodér
Ztráta informací a kvality
- Vektorový obsah, fonty, průhlednost i zdrojové barevné prostory se změní na RGB pixely stránky; vyšší DPI zlepší vizuální detail, ale zvýší spotřebu paměti a velikost souboru
- Výstupní text nelze vyhledávat ani vybírat a žádná textová vrstva ani OCR výstup se nesintetizuje
- Anotace, vzhledy anotací, formulářová pole, vzhledy widgetů i viditelné vzhledy podpisů se vynechají místo zapékání do rastru stránky
- Digitální podpisy, vložené soubory, skripty, akce, záložky, vrstvy jako interaktivní ovládací prvky, strukturální tagy i původní identita dokumentu se neuchovají
- Výsledek neuchová vektorovou editovatelnost, původní platnost podpisů, dostupnost PDF/UA ani sémantiku zdrojového dokumentu
THPDFArchivalConversionReport přináší stav úspěchu a zrušení, počty zdrojových a vyrenderovaných stránek, rastrové pixely, výstupní bajty, počty odstraněných anotací/formulářů/příloh, diagnostiku selhání i nálezy nativního ověření
FailureKind rozlišuje afkNone, afkConversion, afkBudget a afkCancelled; typovaná selhání limitů konvertoru dodají navíc BudgetMetric, BudgetObserved a BudgetLimit
Výjimka z checkpointu konverzi zastaví a nahlásí se přes nativní výsledek selhání; wrappery, které potřebují původní kategorii výjimky callbacku, si ji musí zapamatovat dřív, než ji konvertor zachytí
JSON a C ABI operace archive.pdfa4.raster vyžaduje explicitní přijetí ztráty informací, zachovává handle zdroje, dodá ověřené PDF i report ztrát a aplikuje konzervativní stropy limitů úlohy
Ověření shody
Konvertor znovu načte svůj připravený výstup a před publikováním vyžaduje ValidatePDFA4 se základním profilem PDF/A-4; nativní validátor pokrývá svůj zdokumentovaný ohraničený soubor pravidel a není důkazem splnění každého požadavku ISO 19005-4
Pro nezávislé přijetí lze použít veraPDF s --flavour 4; regresní fixture obsahující nevložený text, průhlednost, RGB obrázek, odkaz, signature widget i přílohu prošla veraPDF 1.30.2 bez jediného nezdařeného pravidla či kontroly
Pro zaměřenou non-GUI regresní sadu spusťte Tests/Delphi/Run-HotPDFArchivalTests.bat