Poznámky k vydání PDFlibPas
Historie vydání
Historie verzí pro uživatelsky viditelné funkce PDFlibPas, opravy, vylepšení PDF, změny kompatibility a změny dokumentace
Poslední vydání
- Nejnovější verze: v3.75.6; Datum vydání: 2026-06-23
Version 3.333.0
Added
- Inspekce přírůstkových revizí. Podpis pokrývá bajty revize, do níž byl zapsán, a vše připojené potom je samostatná aktualizace, jejíž obsah rozhoduje, zda podpis stále platí pro dokument v jeho nynější podobě.
GetDocumentRevisionCount,GetDocumentRevisionStartaGetDocumentRevisionEndtyto revize rozkládají aGetSignatureRevisionIndexříká, u které podpis končí GetDocumentRevisionKindhlásí, co aktualizace udělala, jako nejzávažnější z objektů, kterých se dotkla: účetnictví, validační materiál, časové razítko dokumentu, podpis, pole formuláře, anotace nebo obsah dokumentu. Přidávání validačního materiálu pro dlouhodobou validaci proto už nepůsobí jako úprava dokumentuGetDocumentRevisionChangesvyjmenuje každý objekt, který aktualizace přidala, změnila nebo smazala, spolu s tím, co každý je, a pro změněný slovník, které klíče se skutečně lišíGetDocumentRevisionsCompletehlásí, zda byla celá historie obnovitelná. Řetězec, který je přerušený, cyklický nebo delší, než čtečka sleduje, ponechává nejstarší aktualizace bez dohledu, a počty jsou pak dolní hranicí místo odpovědi- Objekt, jehož dřívější verzi nelze přečíst nebo jehož tělo proudu nikdy nebylo porovnáno, je hlášen jako neurčitý místo jako neškodný: aktualizace, která přepíše stránku a přitom nechá její slovník nedotčený, není zaměněna s repakováním
Version 3.332.0
Added
ApplyPAdESLongTermValidationv jednom volání povýší už podepsané PDF na PAdES-B-LT. Cestu certifikátů podepisovatele buduje ze samotného podpisu, pro každý článek sbírá materiál OCSP a CRL přes adresy, které certifikáty jmenují, a zapisuje certifikáty a revokační data s záznamem VRI pro podpis do document security store v jedné přírůstkové aktualizaci.ApplyPAdESLongTermValidationToStreamzapisuje výsledek do proudu místo do souboru- Chování je konfigurovatelné přes masku voleb
PADES_LTV_*: zda zapisovat záznam VRI, zda se dotazovat OCSP responderů, zda se uchýlit k CRL, zda sledovat adresy vydavatelů k doplnění cesty a zda přeskočit revokaci pro samovydaný root - Prázdný název pole zpracuje každý podpis do jedné revize; pojmenované pole zpracuje jen ten jeden
GetPAdESLTVCertificateCount,GetPAdESLTVCRLCount,GetPAdESLTVOCSPCountaGetPAdESLTVErrorhlásí, co poslední volání sesbíralo a proč se předčasně zastavilo, takže částečný výsledek přes nedosažitelný responder je viditelný místo tichý- Materiál totožný s něčím už připraveným se zapíše jednou a odkazuje na něj každý podpis, který ho potřebuje, a podpis bez čitelného certifikátu se nahlásí místo aby byl vydáván za úspěšné povýšení
Version 3.331.0
Added
- Podpis přináší svou vlastní certifikační cestu, takže materiál, který profil dlouhodobé validace potřebuje, lze číst jen z podepsaného souboru.
GetSignatureSignerCertificateDER,GetSignatureEmbeddedCertificateCountaGetSignatureEmbeddedCertificateDERvracejí certifikáty, které podpis vkládá, aGetSignatureCertificateChainLengthaGetSignatureCertificateChainDERje uspořádají do cesty od podepisovatele ven GetSignatureContentsHashHexvrací klíč, jímž je adresován záznamAddPAdESDSSVRI, vypočítaný ze samotného podpisu- Certifikát podepisovatele je rozpoznán bez ohledu na to, zda ho podpis určuje vydavatelem a sériovým číslem nebo identifikátorem klíče subjektu, a cesta se zastaví u posledního vydavatele, kterého podpis skutečně nese, místo aby předstírala úplnost
Fixed
- Čtečka DER odmítne deklarovanou délku prvku větší než data, místo aby téměř maximální hodnota nechala přetéct její kontrolu mezí, a průchod rozšířeními certifikátu už nečte za konec zkráceného či příliš dlouhého certifikátu. Obojí je dosažitelné ze zfalšovaného dokumentu, proto výše uvedené přístupové metody zůstávají při nedůvěryhodném vstupu bezpečné
- Přístupové metody podpisu čtou dokument se sdíleným handle, takže odpovídají, zatímco má verifikátor nebo prohlížeč soubor už otevřený, místo aby selhávaly, jako by podpis chyběl
Version 3.330.0
Added
- OCSP status requests.
BuildOCSPRequestencodes an RFC 6960 request for a certificate and its issuer,FetchOCSPResponseposts it to the responder and returns the reply, andAddPAdESDSSOCSPFromCertificatesdoes both and files the result in the document security store - The responder address is optional: when it is omitted, the one the certificate itself names is used, so a caller that has the certificate chain needs no further configuration
- A certificate pair that does not actually belong together is refused before anything is sent, instead of producing the "unknown" answer such a request earns from the responder and which reads like a revocation problem
- Only a successful response is stored; a responder that answered
tryLaterorunauthorizedis reported throughGetTimeStampErrorrather than filed as if it were a status answer
Version 3.329.0
Fixed
- Reusing one result array across successive enumeration calls no longer leaks the strings held in the array slots that a later call does not fill. This affected the documented "call once for the count, resize, call again" pattern whenever a later call returned fewer items than the array could hold, and the stranded text accumulated for the lifetime of the process
- Affected entry points include
EnumPageContentStates,EnumPageContentStatesEx,EnumAttachments,EnumDocumentFonts,EnumPageElements,EnumNamedDestinations,EnumSignatures,EnumFormFields,GetFormValues,GetTextInAreaEx, and the text-search, form-field-action and certificate enumeration calls
Changed
- The result-array parameter of those calls is now passed as
varrather thanout. Existing Delphi and C++Builder code compiles and links unchanged; the only visible difference is that array slots past the returned count keep whatever they held before instead of being silently blanked
Version 3.328.0
Added
- Certificates now tell the library where their status can be checked:
GetCertificateOCSPURLs,GetCertificateIssuerURLsandGetCertificateCRLURLsread the responder, issuing-certificate and CRL addresses out of a certificate, so assembling long-term validation material no longer requires knowing where a given authority publishes FetchRevocationMaterialdownloads material from those addresses, andAddPAdESDSSCRLFromURLandAddPAdESDSSCertificateFromURLdownload and file it in the document security store in one step- Addresses that name no fetchable resource, such as a directory name or a mail address, are skipped rather than reported as something that can be downloaded
Version 3.327.0
Added
- A built-in RFC 3161 time-stamp client.
SetTimeStampServerandSetTimeStampOptionsconfigure the authority, hash algorithm, requested policy, nonce use and timeout;FetchTimeStampTokenreturns a TimeStampToken for any digest ApplyPAdESSignatureTimeStampcompletes a PAdES-B-T signature in one call: it hashes the signature value, obtains the token from the configured authority and attaches it as the signature time-stamp attribute, replacing the previous three-step exchange the caller had to wire up itself- When a nonce is used the token is checked to carry the same value back, so a replayed or substituted response is rejected instead of being embedded in the document
GetTimeStampStatusandGetTimeStampErrorreport the authority's own status and failure text, so a refused request explains itself
Version 3.326.0
Added
- The PDFium renderer now writes the same image formats the GDI+ and Cairo renderers write.
RenderPageToFile,RenderPageToStreamandRenderPagesToFilesaccept BMP (option 0), JPEG (1), PNG (5), GIF (6), TIFF (7) and G4 TIFF (10) afterSelectRenderer(3), instead of accepting BMP alone - The JPEG quality set through
SetJPEGQualityand the active TIFF compression settings now apply to PDFium output as well, so switching renderers no longer changes the encoding of the file that is produced
Fixed
- Requesting PNG or any other non-BMP format from the PDFium renderer used to return 0 and leave an empty file behind. Applications that offered a renderer choice silently produced unreadable output whenever PDFium was the selected engine
- Asking the PDFium renderer for a metafile format it cannot produce (WMF, EMF, EPS, EMF+, HTML5) now reports which formats are available through
LastRenderErrorinstead of naming BMP as the only option
Version 3.324.0
Changed
- The PDFium renderer now feeds the document to the engine through a streaming data source instead of one resident buffer. Rendering and printing previously serialised the document and then copied it again into a string, so every page cost twice the document size in memory; the copy is gone and PDFium reads only the blocks it needs
- Rendering a page range to files parses the document once for the whole batch instead of once per page, so a long range no longer re-reads the entire file for every image it writes
- Older PDFium builds that do not export the streaming entry point keep working unchanged through the in-memory path
Fixed
- The renderer smoke test located the optional PDFium and Cairo libraries one directory too high and silently skipped both engines; it now finds them and exercises the real rendering paths
Version 3.323.0
Added
CreateValidationReportaSaveValidationReportvytvářejí strukturovanou zprávu o validaci PDF/A a PDF/UA-1 ve formátu XML nebo JSON. Každé zjištění nese id pravidla, normu, do které spadá, krátký název pravidla, doložku ISO, kterou vymáhá, závažnost a počet dotčených objektů, a zpráva je uzavřena statistikami průchod/neprůchod pro každou normu a na úrovni dokumentu- Norma, která nebyla vyžádána, je hlášena jako
not-checkedmísto tichého průchodu, takže částečné spuštění nemůže být zaměněno za čistý zdravotní list - Buildovací pipeliny nyní mohou bránit (gate) na id pravidla nebo na doložku ISO namísto porovnávání podřetězců v textu: rodina preflight reportů nejprve vykreslí lidsky čitelnou zprávu a převede tento text na JSON, HTML nebo CSV, zatímco validační zpráva je sestavena ze surového výstupu kontrol a udržuje pole strojově čitelná nedotčená
Version 3.322.0
Added
- Reference nyní dokumentuje čtyři externě deklarované veřejné typy použité napříč rozhraním
TPDFlib, které dříve neměly vlastní stránku:TPDFlibProgressEvent,TPDFlibLogger,TPDFlibCertificateInfoaTPDFlibWatermarkBase, čímž dokončuje pokrytí veřejných typů událostí, loggeru, výsledku výčtu a vodoznaků
Version 3.321.0
Added
CheckDocumentPolicyvyhodnocuje deklarativní interní pravidla, jako jsouFonts.NotEmbedded = 0,Security.Encrypted = noneboDocument.Pages <= 500, vůči dokumentu a hlásí každé pravidlo jako prošlé nebo neúspěšné se skutečnou hodnotou, čímž mění ingestní bránu pro vydavatele, archivy a tiskárny v konfiguraci namísto ručně psaného inspekčního kódu
Version 3.320.1
Fixed
- Kreslení textu v režimu PDF/A bez předchozího načtení fontu již nezlobí: PDF/A vyžaduje, aby byl každý program fontu zabudován, proto implicitní zkratka k vestavěnému fontu byla odmítnuta a nezůstal vybrán žádný font a
DrawTexta ostatní textová volání padala místo kreslení - Cesta implicitního fontu nyní řeší skutečnou zabudovatelnou sadu, pokud je aktivní režim PDF/A, takže text kreslený bez explicitního volání
AddTrueTypeFontje zabudován a zůstává konformní; přímé voláníAddStandardFontje za PDF/A nadále odmítáno - Na hostitelích, kde nelze vyřešit žádnou zabudovatelnou sadu, kreslení přechází na vestavěné metriky místo selhání a hlásí deficit shody prostřednictvím
LastErrorCode605, takže soubor může být zachycen dříve, než je vydán jako konformní
Version 3.320.0
Added
GetDocumentFeatureReportvrací strukturovaný report příznaků v jednom volání — metadata dokumentu, počty stránek a objektů, stav šifrování, inventáře fontů a obrázků, značkování a osnovy, pole formulářů, podpisy, přílohy a rozklad bajtů podle kategorie — a nahrazuje tucet oddělených dotazů, které katalogizační nebo ingestní pipelina dříve musela poskládat
Version 3.319.0
Added
SetCollectionView,AddCollectionField,SetCollectionSortaSetCollectionItemValuebudují PDF portfolia nad existujícími přílohami, takže sada zabudovaných souborů je prezentována jako procházetelný balíček s vlastními sloupci, pořadím řazení a hodnotami pro každý soubor místo prostého seznamu přílohGetCollectionViewaGetCollectionFieldCounthlásí režim prezentace a počet deklarovaných sloupců načteného portfolia
Version 3.318.1
Fixed
- Volba 12 extrakce textu (ignorovat otočený text) nyní zahazuje otočené úseky bez ohledu na směr otáčení: čtvrt otočení po směru hodinových ručiček a čtvrt otočení proti směru bývaly zpracovány rozdílně, takže boční poznámky na okraji byly v jednom směru zahozeny a v druhém vráceny
- Stejná volba zachovává nakloněný text, který je pouze střižen, například syntetickou kurzívu, a tolerance se nyní škáluje s velikostí textu a s transformací stránky, takže velké nakloněné nadpisy nejsou nadále házeny, jako by byly otočeny
Version 3.318.0
Added
DecodeAllStreamsrozbalí komprimované proudy dokumentu na místě, takže jeho uložení vytvoří kopii, jejíž proudy obsahu, metadata a strukturu lze přímo číst nástroji pro diff, forenzním přezkumem a toky podpory; obrázky, prediktivní proudy a proudy křížových odkazů zachovávají své kódování a proudy objektů jsou materializovány jako první, nic není ztraceno
Version 3.317.0
Added
SetTrappedaGetTrappeddeklarují a čtou stav trappingu dokumentu, který PDF/X vyžaduje, zapisovaný jako název/Trapped, jejž specifikace vyžaduje, nikoli jako textový řetězecSetOutputIntentSubtypeaGetOutputIntentSubtypepřešťítkují výstupní intenci, takže načtený barevný profil může popisovat tiskařskou podmínkuGTS_PDFXnamísto archivační podmínkyGTS_PDFA1, kterou vytvářejí režimy PDF/A
Version 3.316.0
Added
SetEncryptEmbeddedFilesOnlyaGetEncryptEmbeddedFilesOnlyomezují šifrování AES na zabudované soubory: dokument se otevírá a renderuje v libovolném čtečce bez výzvy k heslu, zatímco jeho přílohy zůstávají šifrované, standardní uspořádání pro faktury, zdravotnické záznamy a spisy, jejichž přední strany jsou veřejné, ale náklad nikoli
Version 3.315.0
Added
- Volba 18 extrakce textu otáčí úseky kreslené pod úhlem 90, 180 nebo 270 stupňů do horizontálního čtecího rámce a seskupuje každou čtvrtotuču zvlášť, takže otočené poznámky na okraji, hlavičky tabulek a popisky os grafů jsou extrahovány jako čitelné řádky místo proplétání s vertikálním textem nebo jejich zahazování
Fixed
DASetTextExtractionOptionspřijímá volbu 16 (rozdělování spojovníků) a volbu 17 (dělení slov podle mezer mezi znaky) namísto jejich odmítnutí a cesta extrakce s přímým přístupem nyní předává volby 15, 16 a 17 extraktoru, takže odstraňování podtrhávacích linek, rozdělování spojovníků a dělení podle mezer mezi znaky platí pro handly souborů stejně jako pro načtený dokument
Version 3.314.0
Added
GetFontHasToUnicodehlásí, zda vybraný font nese Unicode mapování, a inventář fontů získává odpovídající poleHasToUnicodepro každý font a navíc souhrnNoToUnicodeCount, takže dokumenty mohou být před zpracováním kontrolovány na fonty bezpečné pro extrakci a převoditelné na PDF/A-*u nebo PDF/UA
Version 3.313.0
Added
SetPDFAModezískává režim 8 pro PDF/A-2u (ISO 19005-2 Level U), úroveň shody, která deklaruje Unicode mapování textu bez povolení zabudovaných souborů, čímž dokončuje rodinu PDF/A-2 vedle stávajících režimů 2b a 2a
Version 3.312.0
Added
GetObjectByPathaGetObjectByPathCountčtou libovolný uzel stromu objektů přes výrazy cesty, jako jsouRoot/Pages/Kids[0]/MediaBox[2]nebopages[0]/Type— typy, skalární hodnoty, serializované formy a počty prvků v jednom volání, nahrazujíce ruční obcházení objektů při sondování metadat, namátkových kontrolách shody a diagnostice podpory
Version 3.311.0
Added
SetBlackPointCompensationdeklaruje kompenzaci černého bodu (ON, OFF nebo Default) pro následné kreslení prostřednictvím stavu grafiky/UseBlackPtCompPDF 2.0, což prepressu a proofu umožňuje fixovat ICC konverze ve tmavých tónech, které dříve byly privátní pro prohlížeč; verze dokumentu je zvýšena automaticky a režimy PDF/A tento stav odmítají
Version 3.310.0
Added
SetCompressionLevelaGetCompressionLevelzpřístupňují úroveň deflate pro každou kompresi, kterou knihovna provádí: 0 zachovává výchozí engine akcelerovaný SIMD, 1 preferuje propustnost a 9 maximalizuje kompresi archivůRecompressStreamsznovu deflatuje každý obyčejný FlateDecode proud vybraného dokumentu na aktuální úrovni a ponechává menší kódování pro každý proud, čímž zmenšuje dokumenty původně uložené při rychlém nastavení komprese bez zásahu do jejich obsahu
Version 3.309.0
Added
SetObjectStreamModeaGetObjectStreamModepřidávají trojstavovou kontrolu proudu objektů: zakázat, generovat (výchozí) nebo zachovat, kde zachování udržuje původní komprimované seskupení načteného souboru a zapisuje kontejnery doslovně, takže konverze existujících souborů PDF 1.5+ jsou levnější, protože nic není rozbalováno ani přeskupováno
Changed
- V režimu zachování jsou členové upravení od načtení povýšeni na objekty nejvyšší úrovně, aby byly jejich změny uloženy, a každý zbývající komprimovaný člen automaticky volí binární formu proudu křížových odkazů
Version 3.308.0
Added
CheckDocumentStructurespouští jednovolací kontrolu strukturálního zdraví: každý objekt a proud je veden svým dekodérem, obyčejné Flate proudy jsou přísně ověřovány vůči koncové značce zlib, takže zkrácená data jsou zachycena, a report označuje chybějící trailery, neřešitelné katalogy a stránky, nepodporované handlery šifrování a soubory opravené skenováním bajtů s nálezy pro každý objekt a souhrnným řádkem
Version 3.307.0
Fixed
- Poškozené dokumenty používající proudy křížových odkazů se nyní opravují úspěšně: surová rekonstrukce obnovuje členy komprimovaných proudů objektů a, pokud v souboru neexistuje nikde klíčové slovo trailer, syntetizuje trailer z nejnovějšího dosažitelného katalogu dokumentu, takže poškozený offset startxref již nečiní takové soubory neotevíratelnými
Version 3.306.0
Added
ExportDocumentDatazapisuje informační klíče dokumentu, celý strom záložek a rozsahy popisků stránek jako upravitelný prostý text v klasickém formátu řádků dump_dataImportDocumentDataaplikuje stejný formát zpět — informační klíče se aktualizují, strom záložek je přestavěn s úrovněmi zanoření a cílovými stránkami a rozsahy popisků stránek jsou nahrazeny — což umožňuje hromadnou úpravu záložek a migraci metadat mezi dokumenty v jednom volání každým směrem
Version 3.305.0
Added
AuditDocumentSpacerozkládá využití bajtů dokumentu podle kategorie — obrázky, programy fontů a slovníky, proudy obsahu, form XObjects, proudy objektů, zabudované soubory, metadata, strom struktury, anotace, strom stránek a další — s počty objektů, součty bajtů a procenty, odpovídajíc na to, proč je soubor tak velký, jaký je, a která optimalizace se nejlépe vyplatí
Version 3.304.0
Added
StructTreeItemCount,GetStructTreeItemTextaGetStructTreeItemIntPropertyčtou strom struktury tagovaného dokumentu jako zploštěný seznam položek v pořadí do hloubky — typy prvků (surové a s rolemi mapovanými), alternativní a skutečný text, jazyk, názvy, id značeného obsahu, čísla stránek a vztahy rodič-potomek
Changed
- Čtečka stromu struktury se chrání před poškozenými dokumenty: referenční cykly, čísla objektů mimo rozsah a stromy zanořené hlouběji než 64 úrovní jsou uťaty místo zacyklení
Version 3.303.1
Fixed
- Průsvitná podkladová razítka vytvořená pomocí
StampTextaStampImagejiž neproráží svou neprůhlednost do původního obsahu stránky — stav průhlednosti je nyní omezen na samotné razítko, takže stránka si zachovává plnou neprůhlednost
Version 3.303.0
Added
OverlayDocumentPagesrazí stránky jiného otevřeného dokumentu na stránky vybraného dokumentu, jednu zdrojovou stránku na každou cílovou stránku, nad nebo pod existující obsah — hlavičkový papír, spojitá pozadí stránek a naskenované šablony formulářů v jednom volání- Vyčerpání zdroje je konfigurovatelné: zastavit, cyklit zdrojové stránky nebo neustále opakovat poslední zdrojovou stránku; další volba brání zvětšení razítka nad jeho přirozenou velikost
Changed
- Razítka dokumentu jsou přizpůsobena CropBox cílové stránky a umístěna vzpřímeně na stránkách nesoucích záznam
/Rotatea každá zdrojová stránka je importována jednou jako sdílený Form XObject, takže opakované šablony nikdy neduplikují své zdroje
Version 3.302.0
Fixed
- Hesla AES-256 jsou nyní před hashováním zpracována pomocí SASLprep (RFC 4013), takže hesla obsahující mezery non-ASCII, měkké spojovníky, znaky kompatibility nebo kombinační sekvence se otevírají správně v aplikaci Acrobat a jiných konformních čtečkách
- Otevírání dokumentů AES-256 nejprve zkusí standardní připravené heslo a vrátí se k legacy bajtové formě, takže soubory zapsané staršími verzemi s hesly non-ASCII se nadále otevírají
Added
- Chybový kód 604 hlásí heslo AES-256 odmítnuté SASLprep, protože obsahuje zakázané kódové body nebo porušuje obousměrná pravidla
Version 3.301.0
Added
SplitDocumentToFilesrozděluje vybraný dokument na dávku výstupních souborů s pevným počtem stránek každý, s použitím zástupného symbolu názvu souboru%p
Changed
- Dávkové rozdělení analyzuje zdrojový dokument jednou a kopíruje každý blok ze stejné struktury v paměti, čímž nahrazuje opakovaný úplný přeparse, který smyčka nad
ExtractFilePagesvykonává pro každý rozsah
Version 3.300.0
Added
CollateDocumentsslučuje stránky z několika otevřených dokumentů do vybraného dokumentu rotačně, přičemž odebírá konfigurovatelný počet stránek z každého zdroje na kolo (A1, B1, A2, B2, …)CollateDocumentsExpřijímá seznam rozsahů stránek pro každý zdroj, kde sestupné rozsahy jako3-1obrátí zdroj, takže přední a obrácené zadní průchody scanneru se sloučí do pořadí čtení v jednom volání
Changed
- Skládání importuje každý zdroj přes jednu mapu objektů a proplétá přeskupením stránek, takže fonty a obrázky sdílené uvnitř zdroje jsou zapsány pouze jednou, bez ohledu na velikost skupiny
Version 3.299.0
Added
SetDeterministicDocumentIDaGetDeterministicDocumentIDpřepínají identifikátor souboru traileru na reprodukovatelnou hodnotu, takže shodné vstupy produkují shodné výstupní bajty pro build cache, content-addressable storage a porovnání regrese na úrovni bajtůSetDocumentIDSeeddodává explicitní seed pro reprodukovatelný identifikátor souboru; bez seedu je identifikátor odvozen z metadat dokumentu, hlavičky verze a počtu stránek
Changed
- Reprodukovatelné identifikátory souboru jsou obnovovány pouze při úplných uloženích; přírůstkové aktualizace a šifrované dokumenty zachovávají svůj existující identifikátor, aby podpisy a heslem chráněné soubory se nadále otevíraly správně
Version 3.298.0
Added
AddLinkToArticleThreadaSetOutlineArticleThreadspojují hotspoty stránky a osnovy s vláknem článku nebo kuličkou pomocí standardních akcí ThreadAddActionNextArticleThreadaPDF_ACTION_BUILDER_THREADpřidávají akce Thread do zřetězených pracovních postupů akcí formuláře, stránky a dokumentu
Changed
- Cíle akce Thread používají stabilní nepřímé odkazy na vlákno a kuličku a odmítají neplatné indexy beze změny cílového kontejneru
- Konstruktory akcí pole formuláře odmítají další akce, když je aktivní režim PDF/A, čímž zachovávají zákaz PDF/A pro slovníky
/AApole a widgetu
Version 3.297.0
Added
- Reference flat-DLL
DLnyní dokumentuje každý vstupní bod ANSI s příponouA(char) a přidává 353 referenčních stránek, které zrcadlí své unicode protějšky s přesnými signaturamiPAnsiCharDelphi aconst char *C - Přebudovány
BufferUtilities,DirectAccessFunctionalityaMiscellaneousFunctionsjako čisté indexové stránky skupin funkcí řízené sdíleným schématem kategorií, opravující poškozené značkování, chybně označené sekce a chybějící štítky - Navigační index a sdílený vyhledávací index nyní pokrývají celou plochu DLL jak pro volající Unicode, tak ANSI
Fixed
- Odstraněn zastaralý záznam
SetLogger, který neměl odpovídající symbol ve zdrojovém kódu; zdokumentovanou vlastností jeLogger
Version 3.296.0
Added
AddAlternateImage,AlternateImageCount,GetAlternateImageInfoaRemoveAlternateImageposkytují typované vytváření a kontrolu variant obrazu pro zobrazení a tisk- Alternativní obrazy mohou být přidruženy ke skupině volitelného obsahu nebo ke slovníku příslušnosti, zatímco jednu variantu na základní obraz lze vybrat jako výchozí pro tisk
Changed
- Vestavěný renderer nyní vybírá alternativní obrazy volitelného obsahu, když je základní obraz skryt, a respektuje výchozí hodnotu tisku u cílových míst tiskáren
FindImagesnyní registruje XObjecty alternativních obrazů dosažitelné ze zdrojů stránky, aby importované varianty získaly použitelné handly obrazu
Version 3.295.0
Added
AddArticleThreadvytváří článkovou navigaci vyhovující standardům s typovanými metadaty, seřazenými obdélníky stránek, kruhovými odkazy korálků a poli korálků pro jednotlivé stránkyArticleThreadCount,GetArticleThreadInfoaGetArticleThreadBeadkontrolují vytvořené nebo importované článkové vlákna s omezeným průchodem poškozených cyklů odkazů
Changed
DeletePagesnyní odstraňuje článková vlákna, která přijdou o všechny korálky, a opravuje kruhové odkazy přeživších vláken- Sledování odstraněných stránek nyní zachovává stabilní nepřímé odkazy na stránky, takže čištění osnovy a článků nemůže při pohybu kurzoru stromu stránek zbloudit
Version 3.294.0
Added
SearchTextBatchvyhledává více textových dotazů, zatímco každé extrakce stránky zůstává rezidentní, a vrací původní nulový index dotazu s každým zásahemSearchTextBatchEachposkytuje stejné jednoprzchodové vyhledávání prostřednictvím streamovaného zpětného volání s hlášením průběhu a možností zrušení
Changed
- Textové vyhledávání s jedním dotazem a dávkové vyhledávání nyní sdílejí jedno porovnávací jádro, zachovávající sémantiku rozlišování velikosti písmen, celých slov a rozsahu stránek, a přitom se vyhýbají opakované extrakci stránek, skládání textu a práci s geometrií zásahů
Version 3.293.1
Fixed
- Rasterizace mesh shadingu se již nedaří zkompilovat v žádné verzi Delphi, což řeší
E2089 Invalid typecastu přetypování reálných hodnot na hodnoty s pohyblivou řádovou čárkou v malíři GDI+ - Paralelní dávkové vykreslování stránek se nyní kompiluje v Delphi XE5 a XE6, kde
System.Threadingnení k dispozici; starší sady nástrojů se vracejí k sériové cestě vykreslování, jako na systémech jiných než Windows - Zjišťování schopností tiskárny již nevyvolává chybu nekompatibilních typů ve starších verzích Delphi tím, že zarovnává volání
SetPrinterse zbytkem tiskového kódu - Výčet úložiště certifikátů se nyní sestavuje v RAD Studio 10.3 Rio, které dříve přerušilo práci s vnitřní chybou kompilátoru při optimalizaci rutiny výčtu
Version 3.293.0
Added
- Slovníky příslušnosti volitelného obsahu lze nyní vytvářet, aktualizovat a vypočítávat se zásadami kompatibility
AnyOn,AllOn,AnyOffaAllOff - Vnořené výrazy viditelnosti
/VEz PDF 1.6 podporujíAnd,OraNotprostřednictvím kompaktní reprezentace předpon sdílené Delphi a C++Builderem
Changed
- Rozsahy volitelného obsahu, proudy obsahu, zachycené stránky, obrazy, pole formuláře a anotace nyní přijímají buď handle skupiny, nebo handle příslušnosti
- Vykreslování nejprve vyhodnocuje platné výrazy
/VEa v případě poškozených nebo nepodporovaných výrazů se vrací k/OCGsplus/P
Fixed
- Vnořený volitelný obsah již nemůže způsobit viditelnost obsahu, když je uzavírající skupina nebo příslušnost skryta
- Slovníky příslušnosti bez efektivních skupin volitelného obsahu nyní ponechávají viditelnost beze změny, jak vyžaduje specifikace PDF
Version 3.292.0
Added
EnumAttachmentsnyní hlásí data vytvoření a úpravy, šestnáctkové kontrolní součty, vztahy přidružených souborů a čísla objektů specifikace souboru jak pro přílohy dokumentu, tak anotaceValidateAttachmentChecksumna vyžádání ověřuje obsah přílohy vůči jejímu uloženému kontrolnímu součtu, zatímco nově vložené soubory nyní automaticky dostávají metadata kontrolního součtu
Fixed
SetEmbeddedFileAFRelationshipnyní přijímá stejné indexy vložených souborů založené na 1 jako zbytek API příloh, včetně dokumentů s jednou přílohou
Version 3.291.0
Added
DeduplicateResourcesnyní slučuje přesně duplicitní proudy obrazů, Form, vzorů, stínování, funkcí, profilů ICC, programů písem, CMap, CharProc Type 3, vložených souborů, metadat a PostScriptu napříč načteným dokumentem- Deduplikace zdrojů poskytuje nezávislé příznaky typů, analýzu zkušebního běhu, volitelný sběr osiřelých objektů a podrobné statistiky hašování, porovnání, obsahu, odkazů a podle kategorií
Changed
- Detekce duplikátů kanonizuje úplné slovníky proudů nezávisle na pořadí klíčů, jednou vytvoří haš každého obsahu kandidáta pomocí SHA-256 a před přesměrováním odkazů potvrzuje odpovídající skupiny bajt po bajtu
- Skupiny přesné ekvivalence zachovávají nejnižší číslo objektu a generaci pro deterministický výstup, zatímco cykly poškozených přímých objektů a sémantické rozdíly ve slovnících zůstávají nespojené
Version 3.290.0
Changed
PurgeUnusedResourcesnyní vypočítává tranzitivní uzávěr závislostí napříč dlaždicovými vzory, glyfy Type 3, stavy vzhledu anotací, skupinami soft-mask ExtGState, obrazy, stínováními a vnořenými barevnými prostory- Výchozí možnosti čištění nyní aktivují analýzu závislostí vzorů, Type 3, vzhledu, soft-mask a obrazů, s nezávislými příznaky pro volající, kteří potřebují užší skenování
- Vnořené programy obsahu a záznamy závislostí jsou ukládány do mezipaměti, sdílené rozsahy zdrojů jsou před prořezáváním privatizovány a poškozené cykly jsou omezeny strážci aktivního proudu a hloubky
Fixed
- Zdroje stránek používané pouze prostřednictvím barevných prostorů obrazů, bází Indexed, alternativ Separation nebo DeviceN, podkladových prostorů Pattern, alternativ ICCBased nebo slovníků stínování již nejsou odstraňovány jako nepoužité
- Zdroje používané pouze CharProcs Type 3, buňkami dlaždicových vzorů, vzhledy anotací nebo skupinami soft-mask průhlednosti již nejsou odstraňovány z vlastního nebo zděděného rozsahu
Version 3.289.0
Added
PurgeUnusedResourcesnyní odstraňuje pojmenované zdroje stránek, na které neodkazují vybrané vrstvy obsahu, a může vracet podrobné statistiky podle kategorií- Čištění zdrojů nyní podporuje rozsahy stránek, hlášení zkušebního běhu, průběh a zrušení, rekurzivní analýzu Form XObject, odstraňování zastaralých ProcSet a volitelný sběr osiřelých objektů
Changed
- Analýza zdrojů nyní respektuje rozlišování velikosti písmen názvů PDF, zděděné zdroje Form, vlastní barevné prostory vložených obrazů a všech sedm standardních kategorií zdrojů
- Opakované programy Form jsou ukládány do mezipaměti, sady použitých zdrojů využívají seřazené vyhledávání a záznamy slovníků jsou odstraňovány v sestupném pořadí pro předvídatelný výkon u velkých dokumentů
Fixed
- Odstraňování záznamů slovníku nyní zneplatňuje indexy klíčů velkých slovníků, takže pozdější vyhledávání nemohou vracet zastaralé záznamy
- Poškozené proudy a neznámé operátory ve výchozím nastavení zachovávají svůj úplný rozsah zdrojů, zatímco sdílené nebo zděděné slovníky zdrojů jsou před mutací klonovány
Version 3.288.0
Added
- Digitální podpisy mohou nyní generovat úplné struktury certifikace DocMDP a zámku polí FieldMDP, se zprávami o strukturálních oprávněních pro každý vybraný podpis
- Časová razítka dokumentu RFC 3161, časová razítka podpisu, vkládání tokenů PAdES-B-T, validace řetězce certifikátů, důkazy OCSP a validační materiál DSS nebo VRI mají nyní úplné pracovní postupy vytváření a ověřování
- Anotace RichMedia nyní podporují vložené prostředky, nastavení aktivace a deaktivace, vzhledy plakátů, výčet, extrakci a odstraňování
- Tisk plakátů nyní podporuje vektorovou sazbu stránek, značky přesahu a ořezu, umístění respektující tvrdé okraje a znovupoužitelné plány dlaždic
- Označené tabulky nyní generují sémantickou strukturu Table, TR, TH a TD se stabilními identifikátory, přidruzeními záhlaví, rozpětími, opakovanými záhlavími a zartefaktovanou výzdobou
- Prohlížeč nyní poskytuje úpravy AcroForm přístupné z klávesnice pro textová pole, pole výběru, zaškrtávací políčka, přepínače a tlačítka, a zároveň odesílá akce hostitelské aplikaci
Changed
- Stínování mesh založená na funkcích Type 1 a stínování mesh od Type 4 do 7 jsou nyní vykreslována prostřednictvím nativního vyhodnocování funkcí a omezené teselace mesh
- Vykreslování barev ICCBased nyní sdílí transformace uložené v mezipaměti napříč obrazy a stínováními a přitom zachovává chování kalibrovaného barevného prostoru
- Přírůstkové ukládání nyní konzistentně přestavuje proudy objektů a proudy křížových odkazů a vybrané podpisy jsou ověřovány vůči vlastní podepsané revizi
Fixed
- Žádosti o časové razítko podpisu SHA-1 nyní vytvářejí haš hodnoty podpisu podepisujícího pomocí SHA-1 namísto návratu k SHA-256
- Odmítnuté náhrady zámku pole již nezahazují dříve platnou konfiguraci zámku pole
- Widgety přepínačů s duplicitními názvy stavů vzhledu nyní zachovávají vybraný widget a udržují sourozenecké widgety vypnuté
Version 3.287.0
Changed
- Slovníky vložených obrazů nyní respektují hranice komentářů, oddělovačů, literálů, šestnáctkových čísel, polí a slovníků PDF s omezeným vnořováním
- Obsahy vložených obrazů nyní používají ukončení citlivé na formát pro data raw, DCT, ASCII85, ASCIIHex, RunLength a Flate
- Zjišťování obsahu Flate nyní provádí jedno omezené inflate od offsetu proudu obsahu s přesným účtováním komprimovaných bajtů, zatímco zřetězené bezztrátové filtry sdílejí celkový limit výstupu
- Proudy obrazů ASCII85, ASCIIHex, LZW, predictor, barevného profilu a pomocné nyní vynucují omezený mezilehlý výstup bez nadměrných dočasných alokací
Fixed
- Poškozené nebo zkrácené vložené obrazy již nečtou za zdrojovými daty, neuvízají v cyklu u neukončených hodnot a nezachovávají zastaralý stav mezi opakovanými použitími dekodéru
- Zabalené řádky obrazů nyní počítají bity komponent před zaokrouhlením na bajty, což brání nesprávným délkám u RGB obrazů s nízkým počtem bitů a víceřádkových obrazů
- Barevné prostory zdrojů nyní zachovávají své původní názvy při odvozování počtů komponent Lab, nepřímých ICCBased a DeviceN a při dekódování proudů palet Indexed za přísných limitů
- Hranice vložených obrazů nyní konzistentně odmítají neplatné rozměry, bitové hloubky, nepodporované filtry, nebezpečné řetězy filtrů, komprimované proudy a nejednoznačné koncové značky
- Vykreslování barev Indexed nyní validuje každý přístup k paletě a odmítá zkrácená data vyhledávání místo čtení za dekódovanou tabulkou
- Prediktory PNG 10 až 15 se nyní správně dekódují pro proudy Flate a LZW, odmítají neplatné řádkové filtry a validují všechny velikosti řádků a stavů před alokací
- Obsahy JPEG a JPEG 2000 nyní před alokací obrazu ověřují své kódované rozměry, komponenty, přesnost, strukturu značek, délky boxů a dekódované využití úložiště
- Validace vložených obrazů nyní omezuje jak zabalené, tak rozbalené úložiště bitmap a omezuje profily ICC, globální proměnné JBIG2 a parametry koncových filtrů
- Obsahy binárních filtrů obsahující vložený text koncové značky nyní pokračují k prvnímu kandidátovi, který projde omezenou validací formátu
Version 3.286.0
Changed
- Content stream tokenization now follows PDF whitespace, comment, delimiter, literal string, hexadecimal string, and name boundaries
- Text splitting and resource replacement now use geometrically grown output buffers for linear processing of large content streams
- Reusable content stream processors now reset derived output and parser state before every
Processcall
Fixed
- Malformed or truncated literal and hexadecimal strings no longer read beyond the source buffer or emit an extra empty token
- Resource replacement now preserves case-sensitive PDF name semantics, accepts optional leading slashes, and updates duplicate mappings deterministically
- XObject and shading operands at the beginning of a stream are now excluded from text output, while unmatched restore operators no longer cancel later saved graphics states
Version 3.285.0
Changed
- LZW encoding now uses constant-time dictionary lookup and buffered stream writes, while decoding uses compact prefix and suffix tables with geometric output growth
- Flate predictor decoding now processes rows directly in the output buffer and supports packed, 8-bit, and 16-bit TIFF samples with arbitrary colour counts
- Stored Deflate streams now write into an exact pre-sized result, and zlib wrappers release temporary buffers safely when compression or decompression fails
Fixed
- LZW code-width changes now follow PDF
EarlyChangesemantics across 9-bit through 12-bit codes, including dictionary resets andEarlyChange=0 - LZW decoding now rejects invalid future codes and truncated bit streams without reading beyond the source buffer
- PNG predictors now use the ceiling byte width of a pixel, preserve previous decoded rows, and safely pad a partial final row
- TIFF predictor decoding now handles 1-bit, 2-bit, 4-bit, 8-bit, and 16-bit components consistently in both LZW and Flate paths
Version 3.284.0
Changed
- Buffer searches now scan fixed 64 KiB blocks, use byte lookup tables for set membership, and preserve the caller's position across every search path
- Unicode, Latin-1, hexadecimal digest, and ARC4 conversions now reserve bounded output once instead of repeatedly growing strings or temporary arrays
- ASCII85 encoding now reads input streams in 32 KiB blocks, while decoding uses exact integer arithmetic and writes directly into a pre-sized output buffer
- MD5 string hashing now avoids a temporary memory stream, digest comparison examines every byte, and ARC4 key scheduling no longer allocates an expanded key array
Fixed
DistanceToAnyBytenow returns the correct offset beyond its first block instead of rereading the same prefix and overcounting skipped bytes- Stream-backed buffer reads now honour the actual byte count returned by custom streams, shrinking results and advancing positions only by bytes received
- Buffer length reductions now clamp the current position, and nil pointer or stream sources behave as empty inputs instead of exposing invalid memory
- Latin-1 decoding now maps the complete byte range 0x00-0xFF instead of replacing bytes 0x7F-0xFF
- ASCII85 decoding now preserves the valid maximum 32-bit group
s8W-!and stops at the first end marker without floating-point boundary loss
Version 3.283.0
Added
TPDFlibSignatureVerifiercan now enumerate signature fields and CMS signers, open files, streams, or strings, and verify a selected field and signer by index or field name- Detailed verification reports now separate cryptographic integrity from signed-revision coverage, current-file coverage, later revisions, strict Contents-gap validation, and native crypto errors
Changed
- Detached CMS validation now streams both ByteRange segments through Windows CryptoAPI in bounded chunks instead of materialising the complete PDF in memory
- Signature fields under nested AcroForm Kids arrays and inherited
/FT /Sigentries are now enumerated with fully qualified names, and direct signature value dictionaries are supported
Fixed
- ByteRange validation now rejects overflow, overlap, truncation, a gap that is not exactly the selected hexadecimal
/Contentstoken, and a signed revision that does not end at its own%%EOF - Certificate lookup no longer falls back to an unrelated embedded certificate when the selected CMS signer identifier has no exact issuer-and-serial match
- Incremental updates that use cross-reference streams now include the cross-reference stream object's own type 1 entry, preventing strict PDF validators from reporting a missing self entry after signing
Version 3.282.1
Changed
- Full saves now rebuild imported object streams from the live object graph, preserve private trailer roots, and retain free-object generations without reusing structural object numbers
- Cross-reference streams now size their offset fields for large files, preallocate their payload, include their own entry, and preserve trailer extension keys
Fixed
- Object-stream packing now writes real
/ObjStmcontainers and type 2 member entries instead of only switching to an xref stream - Garbage collection no longer writes missing object numbers as in-use entries at offset zero and now emits a linked free-object chain in both plaintext and stream cross-references
- Loaded packed PDFs can now be saved repeatedly with packing enabled or disabled without retaining stale object streams, losing live members, or requiring cross-reference repair
Version 3.282.0
Added
- Imported ICCBased colours now use the embedded ICC profile across vector painting, function and mesh shadings, indexed palettes, raw bitmap, CCITT and JBIG2 images, CMYK JPEG images, and JPEG 2000 images
Changed
- ICC transforms now use a bounded Windows Color System lookup table with multilinear interpolation, replacing the temporary PNG round trip used during image rendering
- The renderer now honours content-stream and graphics-state rendering intents, ICCBased
/Range, image/Decode, and original-domain colour-key masks while validating profile channel counts against the PDF colour-space dictionary - Repeated uses of the same profile and rendering intent now share one lookup table across vector colours, patterns, shadings, and images
Fixed
- Encrypted ICC profile streams are now decrypted only while decoded and restored afterward, and embedded profiles are no longer compressed twice while writing image output
Version 3.281.0
Added
- The built-in GDI+ renderer now paints imported PDF function-based shadings and free-form, lattice, Coons, and tensor mesh shadings (types 1 and 4-7), including transparency and clipping
- Shading dictionaries now support component Function arrays, calibrated Lab, CalGray, and CalRGB spaces, Separation and DeviceN tint transforms, PatternType 2 Background fills, and BBox clipping across the GDI+ and Cairo renderers
Changed
- Type 1 shading functions now use bounded adaptive colour sampling with additional quarter-cell probes for higher narrow-feature accuracy and lower work on constant or smooth regions
- PatternType 2 matrices around mesh shadings are now composed exactly once in both GDI+ and Cairo, preserving translated, scaled, and rotated pattern placement
- Mesh colour components are now interpolated in their source colour space before Function evaluation and conversion to RGB, preserving nonlinear functions, DeviceCMYK gradients, and the correct ordering for managed colour transforms
- Coons and tensor surfaces now use bounded device-pixel error subdivision for smoother high-curvature output at large render sizes
- Encrypted shading and Function streams are decoded through the document crypt callbacks, and Type 5 vertex records honour their required byte alignment
Version 3.280.1
Fixed
MergeFileList/MergeFileListFast/MergeFileListStrictleaked aTSmartPDFReader/TSmartPDFDocumentpair (and everything they own) when a non-PDF file appeared in the merge list: the reader and document were constructed before thetryblock that frees them, so a parse failure on the malformed file's content orphaned the already-constructed reader instead of being cleaned up by the surrounding exception handler; construction now happens inside the protectingtryin both the single-file and multi-file prescan paths- Mesh shading parsing (
TPLMeshShading.Parse, shading types 1 and 4-7) leaked the decoded/Functionobject on every parse - every early-exit path and the normal completion skipped freeing it; the function is now released in afinallyblock regardless of howParseexits TPDFlibSignDoc.Closenow nils its smart-reader/document/info fields after freeing them, and the exception paths inOpen,OpenStreamandOpenStringnow release any partially-constructed smart objects instead of only clearing the stream reference, preventing a leak when opening a signing target fails partway through
Version 3.280.0
Added
- Error category enumeration
TPDFlibErrorCategory(ecSuccess/ecStructure/ecSave/ecCrypto/ecGeneric/ecCompliance/ecAcroForm) layered on top of the existing numericLastErrorCodetaxonomy, so callers can classify failures without memorising code ranges; exposed viaTPDFlib.LastErrorCategory,TPDFlib.ErrorCategory(Code)andTPDFlib.ErrorMessage(Code) - Form-field error codes 701-704 (field not found, field read-only, no AcroForm, invalid value) with human-readable messages, letting callers distinguish "field is locked" from "no such field" instead of receiving a single generic failure
SetFormFieldValueForcedforce-write variant that bypasses the read-only guard, used internally bySetFormValues(SkipReadOnly=False)so bulk imports can still overwrite locked fields when the caller explicitly opts out
Changed
SetFormFieldValuenow setsLastErrorCodeto 701/702/703 on failure (field not found / read-only / no AcroForm) instead of returning 0 silently;LastErrorCategoryis a non-consuming read so callers can inspect the category before retrieving the numeric code
Version 3.279.0
Added
ReplacePageRangesreplaces visual page content from another open document without changing the target page count or target page object identities, preserving bookmarks, links, annotations, and form widgets already attached to those pages
Changed
- Cross-document page copying no longer creates and removes an extra placeholder page before importing the requested range
Version 3.278.0
Added
PrintPagesAdvancedapplies copies, collation, duplex, orientation, color, quality, paper-size and input-bin settings to arbitraryPrintPagesrange expressions while retaining one printer profile and one print job
Changed
- Advanced print settings are validated before the job starts, positive print-quality values above the four named presets are applied as DPI, and paper or input-bin identifiers may use the full positive range supported by the corresponding
DEVMODEfields
Fixed
- Damaged cross-reference recovery now dispatches its bounded block reads through the traditional
TStream.Readoverride on Win64, preserving instrumentation and custom-stream behavior while retaining 64 KiB sequential I/O
Version 3.277.0
Changed
- Damaged cross-reference recovery now scans source data in 64 KiB sequential blocks instead of seeking once for every matching character, keeping auxiliary memory bounded while scaling to large PDF files and non-memory streams
- Recovery validates complete indirect-object tokens, skips object-like data inside comments, strings, and streams, confirms stream endings with a following
endobjtoken, preserves headers split across read boundaries, and selects the last valid trailer dictionary
Fixed
- Trailer reconstruction now supports nested dictionaries and delimiter text inside literal strings and is no longer truncated to the first 2048 bytes or the first apparent
>>pair
Version 3.276.0
Added
ActivateWebLinksandActivateWebLinksExscan existing page text once per page and create non-duplicate URI link annotations for HTTP, HTTPS,www., FTP,mailto:, and bare email targets with selectable detection and border options- Generated links use matched-character geometry, precise quadrilaterals for rotated or skewed text when permitted, PDF/A print flags, progress and cancellation support, and selected-page restoration; tagged PDF and PDF/UA documents are protected from incomplete structure-tree updates
Changed
SetAutoCreateWebLinksnow uses the same boundary-aware detector and target normalization when creating links for newly drawn text, addingwww., FTP, and bare email support
Fixed
- Updating annotation
/Contents, name, date, title, or subject properties no longer overwrites the subtype of an existing action dictionary, so URI and other actions remain valid after annotation metadata changes
Version 3.275.0
Added
ExtractPageRangeText,SavePageRangeTextToStream, andSavePageRangeTextToFileextract a parsed page range in one traversal with caller-defined page separators; stream and file output writes UTF-8 data incrementally so large documents do not require a complete document-sized text bufferSetPageBoxRangeandRemovePageBoxRangeapply page-boundary changes across the standard page-range syntax while preserving the caller's selected pageSetPageTransitionRangeandSetPageTransitionRangeExapply legacy or extended presentation transitions to page ranges with per-page progress and cancellation supportGeneratePageThumbnailsrenders requested pages directly into reusable memory and attaches their/Thumbimages without intermediate files or nested progress operations
Version 3.274.0
Fixed
- GDI+ rendering of axial shading patterns now honours the PDF
/Extendarray:SetupGDIPlusPatternpassesWrapModeClampwhen either end is extended (matching the Cairo backend) instead of always usingWrapModeTile, so end colours paint the area outside the gradient axis correctly
Added
- The scroll-hint bubble (
"Page N / M") shown while dragging the vertical scrollbar now auto-hides after 3 seconds of inactivity via aWM_TIMERhandler, so it no longer lingers until a separate scroll event dismisses it ZoomInStep/ZoomOutStepnow snap ontoActualSize(100%),FitWidthandFitPagepercentages when they fall between the current zoom and the next preset on the 14-step ladder, matching the behaviour of professional PDF viewers- The viewer disk page cache writes a build-version marker (
cache.version) and wipes the whole cache root when the library version changes, so a build upgrade never reuses stale bitmaps rendered by an older code path
Version 3.273.1
Fixed
- Object-stream container and xref-stream objects created during save were leaked because they bypassed
TPDFStructure.AddObjectregistration; both call sites now use theNewStreamWithDictownership-tracking factory, eliminating theTPDFStreamleak reported by the test runner underReportMemoryLeaksOnShutdown - Cross-reference stream
/Sizewas off by one: it must be one past the highest object number in the whole file, and the xref stream is itself an indirect object numberedMaxObj+1, so/Sizeis nowMaxObj+2
Changed
- Peephole content-stream optimiser now also removes identity text-matrix operators (
1 0 0 1 0 0 Tm), covering bothcmandTmwith the same six-operand identity check - Mark-sweep GC preserves object 1 (the
/Linearizedparameter dictionary) when the source document was loaded linearized, since that dictionary is never referenced from/Rootbut must survive
Version 3.273.0
Added
- Object-stream packing on save (
TPDFDocument.PackObjectsIntoStreams) collects eligible non-stream indirect objects, serialises them into PDF 1.5 object streams (/Type /ObjStm) with Flate compression, and emits a binary cross-reference stream (/Type /XRef) carrying type-0, type-1 and type-2 entries, reducing the size of saved files 10-40% on object-dense documents TPDFlibSaveOptions.PackObjectStreamsflag plusTPDFlib.SetPackObjectStreams/GetPackObjectStreamsAPI; defaults to enabled, auto-gated by PDF version (1.5+ activates packing and xref streams, 1.4 and below keep the traditional plaintext xref for compatibility), andTPDFlib.GetLastSaveUsedObjectStreamsreports whether the last save actually packed
Version 3.272.0
Added
- Mark-sweep garbage collection of unreferenced indirect objects (
TPDFDocument.GarbageCollectUnusedObjects) walks the object graph from the trailer roots (/Root,/Info,/Encrypt) and removes every indirect object that is not reachable, stopping the file-size growth that accumulates when pages are deleted and their font, content and XObject resources become orphans TPDFlibSaveOptions.GarbageCollectflag plusTPDFlib.SetGarbageCollect/GetGarbageCollectAPI let callers opt in to GC during a full save (defaults to off for backward compatibility), andTPDFlib.GarbageCollectObjectsruns GC immediately and returns the number of orphaned objects removed
Version 3.271.0
Added
- Peephole content-stream optimiser (
TPDFContentPeepholeOptimizer) rewrites a parsed page content stream before Flate compression, removing semantically redundant PDF operators: identitycmmatrices, emptyq/Qpairs, emptyBT/ETobjects, no-op paths terminated bynwith no clip, duplicate graphics-state setters (colour, line width, cap/join, dash, text state), and deadnafter a painting operator - all transforms are output-equivalent so visible page output is unchanged TPDFlibSaveOptions.OptimizeContentStreamsflag and matchingTPDFlib.SetOptimizeContentStreams/GetOptimizeContentStreamsAPI let callers opt in or out of the peephole rewrite duringCompressContent/CompressPage; enabled by default
Changed
TPDFDocument.CompressPagenow forwards the optimisation flag to the page tree so the peephole pass runs insideTPDFPageTree.Compressbefore the existing Flate compression, stacking operator-level reduction on top of byte-level compression
Version 3.270.0
Added
- New
PLParseDefaultAppearancedecodes a/DAdefault-appearance byte string (ISO 32000-2 12.7.4.3) into the font resource name, font size and fill colour, covering therg,kandGcolour operators so form-field and annotation appearance generators can paint text with the author-intended styling
Changed
- Page content-stream assembly (
TPDFRenderer.GetContents) now concatenates multi-part/Contentsarrays through aTStringBuilderinstead of repeatedResult := Result + chunk, removing the O(n^2) string growth that penalised pages with many content-stream parts
Version 3.269.0
Added
- New
BeginMarkedContent/EndMarkedContentwrite inline marked-content sequences with accessibility properties (/Alt,/ActualText,/Lang,/E) directly in the BDC property list per ISO 32000-2 14.9.2–14.9.5, so screen readers and accessibility tooling can read substitute text without a structure-tree entry - Annotation reader exposes
GetAnnotEffectiveBorderimplementing the Errata #287 precedence (border style dict/BSwins over the legacy/Borderarray) and resolving width, style and dash pattern into one call - Signature documents expose
GetSignatureSeedValueto read the seed-value dictionary (/SV, ISO 32000-2 12.7.5.5 Tables 236–237): required filter, allowed SubFilters and allowed digest methods, so a signer can honour the constraints the author embedded GetSignatureFieldLockreads the/LockFieldMDP seed dictionary (Table 238): action (/All,/Include,/Exclude) and the affected field names that must be locked at sign time
Version 3.268.0
Added
- New
PLParsePDFDateparses ISO 32000-2 7.9.4 date strings (D:YYYYMMDDHHmmSSOHH'mm') into a localTDateTime, honouring the mandatoryD:prefix, the field-dependency ladder (each field only when all preceding fields are present) and the UT offset (+/-/Zwith optional apostrophe-minute), returning the local equivalent of the documented instant - Text-string decoding (
PLDecodeTextString) now recognises the PDF 2.0 UTF-8 BOM (EF BB BF) per 7.9.2.2.1, so UTF-8-authored metadata decodes correctly instead of being misread as PDFDocEncoding - File specifications expose
GetFileNamehonouring the PDF 2.0 precedence (Path > UF > F) per Errata #444, plusGetEmbeddedFileStreamandGetRelatedFilesaccessors for the/EFand/RFdictionaries - Annotation readers expose appearance-precedence helpers
GetAnnotNormalAppearance,GetAnnotDefaultAppearanceandGetAnnotOffStateAppearanceimplementing the Errata #23/#34/#42/#170 rules (AP/N is authoritative; DA is the byte-string fallback; Off state lives under the nameOff) - PDF/UA validation reports a new code 10045 when a non-standard structure type fails to terminate at a standard type through the role-map chain (ISO 14289-1:2014 7.1), with cycle protection to a depth of 8
- PDF/A and PDF/UA font audits now validate that embedded CIDFontType2 fonts carry a
/CIDToGIDMapwhose value is either the nameIdentityor a stream, not merely present (ISO 32000-1 9.7.4)
Changed
- Name-tree lookup (
NameTreeLookup) now binary-searches the sortedNamesarray per ISO 32000-2 7.9.6 before falling back to a linear scan, turning large EmbeddedFiles/JavaScript/Dests lookups from O(n) into O(log n) on conformant files - PDF/UA standard-structure-type set expanded with PDF 2.0 additions (
Artifact,DocumentFragment,FENote,MarkedContent,Title) so the role-map no-remap and chain-termination checks recognise the full tag vocabulary
Version 3.267.0
Added
EnumPageContentStatesExcan recursively enumerate Form XObject instructions with configurable depth, cycle protection and depth-first execution ordering- Content snapshots now expose invocation-tree identity, containing stream and parent XObject information, resource-scope identity, Form traversal status and descendant counts
- Standalone content trackers can register scoped fonts and initialise isolated Form execution state with matrix concatenation and bounding-box clipping
Changed
- Recursive content tracing selects each Form resource dictionary independently, inherits invoking resources for compatible legacy Forms, preserves inherited font identity and caches decoded Form programs across repeated invocations
Version 3.266.0
Added
- Text runs returned by
GetTextRunsnow carry the glyph origin (OriginX/OriginY) and the full text matrix components (Tm11/Tm12/Tm21/Tm22/TmDX/TmDY) captured by replaying BT, Td, TD, Tm and T* alongside the show operators, so consumers can locate glyphs without a separate text-funnel pass - Mesh shading decoding now routes Lab, CalRGB and CalGray colour spaces through the colour manager instead of falling through to black, producing correct fills for non-DeviceRGB free-form and coons patches
- Redaction now emits a real
/Subtype /Redactannotation with/Rect,/ICinterior colour and optional overlay text alongside the existing content removal, so redaction-aware viewers mark the sanitized region - Library operations emit structured log records at load and save boundaries through the previously dormant
Logger, with ISO-8601 UTC timestamps and a cachedTStreamWriterfile sink that no longer reopens the log file on every line - New
Tests.Memoryfixture guards create/draw/save/free andNewDocumentcycles against heap regression, and the console test runner now enablesReportMemoryLeaksOnShutdown - EMF interpretation now counts unknown or private records via the
UnknownRecordCountproperty so silent metafile gaps are observable
Changed
- Dictionary key lookup (
TPDFDictionary.FindIndexByKeyName) builds a lazy open-addressing hash index for dictionaries with more than 16 entries, turning the linear scan that dominated renderer Resources/ColorSpace/Font/ExtGState lookups into an O(1) probe - sRGB gamma conversion (
XYZ2RGB) uses a shared 4096-entry lookup table instead of threePower(x, 1/2.4)calls per pixel, and Lab-to-XYZ cubing now uses direct multiplies; both are the dominant per-pixel cost when decoding Lab or ICC-based images - Page lookup (
TPDFPageTree.GetPage) returns the cached page dictionary on repeat access instead of re-walking the page tree every call - Content-stream operator dispatch (
ContentOperatorFromName) buckets the 73 operators by first byte, cutting the per-token linear scan to a short residual compare - PDF/A colour-space audit now recurses into the base or alternate space of Indexed, Separation, DeviceN and ICCBased up to a depth of 8, so a hidden DeviceCMYK tint transform or bare Lab name is flagged rather than passing silently
- Shaped-font finalize now walks the used-glyph set recorded at draw time instead of scanning all 65536 glyph slots four times per save
- String escape routines (literal-string, XFDF, stamp and variable token expansion) build output through
TStringBuilderor two-pass allocation, removing O(n^2) concatenation from save and form-export hot paths - AES stream encrypt/decrypt reuse their chunk buffer across loop iterations instead of reallocating per block
- Composite-glyph parsing in the TrueType parser grows the components array geometrically instead of one element at a time
- Mesh shading
ReadBitsreads the minimum covering bytes in one pass andWriteBitspre-sizes the output buffer, eliminating per-bit reallocation - Painter circle control point uses a precomputed kappa constant and arc squaring uses
Sqrinstead ofPower
Fixed
- Fixed a non-Windows compile break in
PDFlibParallelwhere the stub body signature forPDFlibRenderPagesParalleldid not match the interface declaration
Version 3.265.0
Added
- Added 59 C++Builder console demos to align the C++Builder demo suite with Delphi, bringing the total from 33 to 92 demos covering the same API surfaces
- Added Demo/C++Builder/index.html expansion from 35 to 92 entries with Navigation, Color & ICC, Barcode & media, and Structure & compliance sections
Fixed
- Fixed all 33 existing C++Builder cbproj files that were missing 20 library units (PDFlibMeshShading, PDFlibGraphics, PDFlibWindows, PDFlibParallel, PDFlibLogger, PDFlibMail, PDFlibViewer, etc) from their DelphiCompile list, which prevented every C++Builder demo from compiling
Version 3.264.0
Added
- Content graphics-state snapshots now resolve
Dooperands as image, form or PostScript XObjects and report their resource names, object numbers and transformed bounds - Form snapshots expose the original
/Matrixand/BBoxtogether with resource, group, transparency-group and reference-form indicators - Standalone content trackers can pre-register XObject streams through
RegisterXObject
Changed
- Page content-state enumeration now precompiles selected-page XObject resources and calculates invocation bounds from all four transformed corners
Version 3.263.0
Added
- Content graphics-state snapshots now expose current path bounds, current point, path complexity, pending clipping rules and effective clipping bounds
- Standalone content trackers can initialise an explicit clipping boundary through
SetInitialClipBounds
Changed
- Page content-state enumeration now follows delayed
WandW*clipping, exact transformed cubic extrema,q/Qclipping restoration and selected-pageCropBoxboundaries
Version 3.262.0
Added
- Content graphics-state snapshots now report font writing mode, exact per-instruction text displacement and whether font metrics were resolved
- Standalone content trackers can provide font measurements through
OnMeasureText
Changed
- Page content-state enumeration now advances text matrices for
Tj,TJ,'and"using simple or composite font metrics, horizontal scaling, spacing and vertical writing rules
Version 3.261.0
Added
- Content graphics-state tracing can now resolve page
ExtGStateresources, including transparency, blending, overprint, soft masks, device controls and embedded font references TPDFContentStateTrackercan pre-register external graphics-state dictionaries for standalone content-program analysis
Changed
- External graphics-state parameters now apply cumulatively and participate in complete
q/Qsave and restore snapshots
Version 3.260.0
Added
- Added single-pass effective graphics-state tracing for structured content programs and complete selected pages
- Snapshots expose CTM, text matrices, line style, dash pattern, colours, text state and graphics-state stack depth before or after each instruction
Changed
- Image placement enumeration now maps all four unit-square corners, producing correct bounds under rotation and shear
Version 3.259.0
Added
- Added typed time, special-pattern and arbitrary-mask helpers for interactive form fields
- Added range validation with independently optional zero-safe bounds
- Added sum, average, product, minimum and maximum field calculations with automatic calculation-order registration
Security
- Generated JavaScript string values now escape quotes, backslashes, control characters and JavaScript line separators
Version 3.258.0
Added
- Added typed
SetOCGStateaction creation for form-field events, existing actions and action chains - Optional-content actions preserve left-to-right state changes, repeated groups and the optional radio-button relationship preference
Changed
- Optional-content action enumeration now returns canonical group handles that round-trip through the writer APIs
Version 3.257.0
Added
- Added complete explicit remote-destination writing with zero-based pages, all standard fit types, nullable XYZ values and tri-state window preferences
- Added complete launch-action writing for portable files, Windows parameters, default directories and open or print operations
- Existing action handles can now update these payloads or append them to action chains without container-specific duplicate APIs
Security
- Remote go-to and launch action builders now reject PDF/A mode before modifying an action chain
Version 3.256.0
Added
- Remote go-to action inspection now reports named and explicit destinations, zero-based target pages, fit types, coordinates and zoom values
- Launch action inspection now reports Windows application parameters, default directories and open or print operations
- Action information distinguishes an absent
/NewWindowpreference from an explicit false value and identifies array-based targets
Version 3.255.0
Added
- Added typed builders for remote named-destination and external application launch actions
- URI action builders now support coordinate-map requests through the standard
/IsMapflag - The new action kinds work across lifecycle, form-field and chained-action APIs through the existing extended builder interface
Version 3.254.0
Added
- Added 14 Delphi API-coverage demos for library surfaces that had no dedicated demo: OutlineBuilder, NamedDestinations, DocumentActions, EmbeddedFiles, LinearizeDemo, BarcodeGallery, XfaFields, TaggedPDF, OutputIntent, HtmlTextFlow, RichMediaAnnotations, MailSendDemo, TextBlockExtraction, and PadesDssDemo
- Added a Navigation section, Color & ICC section, Barcode & media section, and Structure & compliance section to the Delphi demo index, bringing the total from 56 to 92 listed demos
- Added Readme.en-us.html guides for the 20 demos that previously shipped without one
Changed
- Applied the project Formatter.config across all Delphi demo sources so operator spacing, indentation, and keyword casing follow one style, and set NewLineBeforeThen to False so If...Then stays on a single line
- Hardened error handling across the classic GUI demos: SaveToFile return values are now consistently checked, TPDFlib and secondary object lifetimes are always protected by try/finally, and failure messages include LastErrorCode
Fixed
- Fixed inverted SaveToFile polarity in ImageToPdf that treated success as failure, and stopped AddTrueTypeSubsettedFont from opening a stale file when the save failed
- Fixed resource leaks in CreateWithImageToStream, DoInTheStream, CanvasText, ExtractText, ExtractImage, PdfDecrypt, PdfEncrypt, and PdfPermission where TPDFlib, TStream, TBitmap, TOpenDialog, or TStringList instances could escape on an exception path
- Removed dead code in AddFormattedTitle (unused RectParts allocation, redundant try/except around StrToFloatDef) and MultiFunction (overwritten SetTextSize call)
Version 3.253.0
Added
- Added typed action details for thread, sound, movie, optional-content, rendition, transition and 3D-view actions
- Added reusable action-handle lookup and ordered optional-content state enumeration
- Added complete PDF transition records covering replacement, Fly, Push, Cover, Uncover and Fade styles
Fixed
- Wipe and Glitter transitions now store their direction in
/Di, read page display duration from the page dictionary and clear both transition and timing entries - Standard pre-PDF-1.5 transition styles no longer force a PDF 1.5 output version
Version 3.252.0
Added
- Added single-pass form-field action discovery with typed action details across primary, widget and field triggers
- Added complete calculation-order enumeration, per-field lookup and removal for interactive forms
- Extended bulk form-field snapshots with calculation order and action count
Changed
- Widget lifecycle triggers now support page-open, page-close, page-visible and page-hidden actions with the required PDF 1.5 version handling
Version 3.251.0
Added
- Added single-pass named-destination enumeration across legacy catalog entries and modern name trees with resolved page and view parameters
- Added named-destination removal, complete push-button captions, button text positioning and form-field mapping names
- Extended bulk form-field snapshots with mapping names, button captions and button text position
Fixed
- Name-tree editing now supports direct destination values and uses unambiguous multi-node index encoding
Version 3.250.0
Added
- Added single-pass form field snapshots with field identity, type, page, flags, values and Choice state
- Added typed Choice-field flag queries plus validated selected-index and top-visible-index accessors
Fixed
- Single-selection Choice fields no longer retain a multi-selection
/Iarray, and switching from multi-select to single-select now replaces the old/Varray with a string value
Version 3.249.0
Added
- Added one-pass stateful text search traversal so applications can iterate cached hits without extracting pages twice
- Added bulk form value export and name-based application with optional read-only field protection
Version 3.248.0
Added
- Added retained Viewer selections with page-space geometry, extracted text, enumeration, clearing and a vetoable marquee event
- Added exact current-viewport bitmap capture and file output including persistent overlays
Version 3.247.0
Added
- Added independent Viewer controls for user form editing and annotation activation
- Added configurable foreground colour for text and choice form editors
Version 3.246.0
Added
- Added typed line ending styles, shape interior colours, link highlight modes, FreeText alignment, Text annotation open state and Caret symbols
- Annotation setters validate compatible subtypes and automatically raise the minimum PDF version where required
Version 3.245.1
Fixed
- Corrected FastReport export page sizing and memo layout so A4 reports retain their intended scale, text stays within memo bounds and unconfigured memo frames remain hidden
Version 3.245.0
Added
- Added
OnPasswordso applications can supply another password after an encrypted document rejects the initial credential - Password retries now work consistently for file, stream and string loads, expose the next attempt number and allow the handler to cancel
Security
- Password callbacks are limited to sixteen total attempts and every retry uses a fresh parser and decryption state
Version 3.244.0
Added
- Added
SetXMPPropertyExfor safely writing scalar properties in caller-defined XMP namespaces - Custom XMP values are escaped through the XML DOM, repeated writes replace the matching namespace property and invalid or reserved XML names are rejected
Version 3.243.0
Added
- Added typed document lifecycle actions for before close, before save, after save, before print and after print triggers
- Added typed page open and close actions with shared support for URI, named, JavaScript, form and destination action builders
- Added action inspection and removal methods for every document and page lifecycle trigger
Version 3.242.0
Added
- Added
SaveChangesto append changes to the originally loaded file and automatically reload the updated xref chain for repeated incremental saves SaveChangesvalidates the reload password before writing and preserves the selected public document handle after reload
Changed
AppendToFilenow rejects a target whose current length differs from the loaded source, preventing stale incremental offsets from being appended to an externally changed file
Version 3.241.0
Added
- Added
GetLastOutlineandGetLastChildOutlinefor direct access to the tail of a bookmark list - Added
GetOutlineChildCountandGetOutlineSiblingIndexfor lightweight bookmark tree inspection without allocating a full tree snapshot
Version 3.240.0
Added
- Added
SaveAllAttachmentsExwith overwrite, skip and automatic rename conflict policies plus a per-attachment naming callback - Attachment exports now reduce requested names to safe leaf names and protect Windows reserved device names
Fixed
- Fixed
SaveAllAttachmentsreturning without writing files because its attachment snapshot was counted but not allocated and populated
Version 3.239.0
Added
- Added
OnPageMouseDown,OnPageMouseMoveandOnPageMouseUpso Viewer hosts receive one-based page numbers and top-down PDF point coordinates independent of zoom, scrolling and view rotation - Added
RegionAtClientPoint,ActiveRegionandOnActiveRegionChangeto distinguish links, non-link annotations and form fields as the pointer enters or leaves them - Added
CreatePDFlibViewerDefaultPopupMenuandInstallPDFlibViewerDefaultPopupMenu, which compose the existing Viewer action classes into a ready context menu for copy, zoom, fit, rotate, navigation, save and print
Version 3.238.0
Added
- Added
OnOperationProgresswith typed operation kind, lifecycle phase, current and total units, percentage and detail text while preserving the classicOnProgresspercentage callback - Load, save, search, merge and page-render file, stream and string entry points now report starting and terminal phases; operations with intermediate progress also report
opRunning - Setting
CancelduringopStartingoropRunningactivates the existingAbortstate, providing one cancellation path for old and new callers
Fixed
LoadFromFilenow preserves error code 404 for a wrong password instead of overwriting it with the generic load error 401 after cleanup
Version 3.237.0
Added
- Added
SearchTextEachandTPDFlibSearchHitEventto emit every text hit immediately without allocating or sizing a result array SearchTextandSearchTextEachnow report page progress throughOnProgressand honour bothAbortand callback cancellation; callback cancellation uses the existing abort state untilResetAbort- The Viewer search panel and search-highlight layer now consume the streaming API in one pass, removing their former 256-row and 512-highlight limits
Fixed
- Whole-word search now continues past an earlier substring occurrence in the same text block to find a later correctly bounded match
Version 3.236.0
Added
- Added
GetPrinterCapabilitiesto capture a live printer-driver snapshot without starting a print job - The typed
TPDFlibPrinterCapabilitiesresult includes paper IDs, names and millimetre dimensions, input-bin IDs and names, duplex, colour, landscape and collation support, the printer port and the maximum driver-reported copy count - Drivers that omit paper or bin metadata still return the remaining capabilities with empty arrays, while invalid printer names return a fully cleared snapshot
Version 3.235.0
Added
- Added
SendDocumentByMailfor saving the loaded document to a temporary PDF and delivering it as an SMTP attachment through the built-in Windows CDO provider - Added the reference-counted
IPDFlibMailProviderextension point so applications can supply another transport, support non-Windows hosts and test mail workflows without network access - Each send uses an isolated temporary directory, sanitises the attachment display name and removes both the PDF and its directory after the provider returns;
GetLastMailErrorreports validation, save, transport and platform failures
Version 3.234.0
Added
- Added variable placeholders to stamp, header and footer text:
<%PageNo%>,<%TotalPages%>,<%ShortDate%>,<%LongDate%>,<%ShortTime%>and<%LongTime%>expand per page alongside the classic &-tokens - Any custom
<%name%>placeholder resolves through the newOnCalcVariableevent, which receives the name and the page number and supplies the replacement - running numbers, batch codes and client fields stamp without pre-processing the text; without a handler unknown placeholders stay verbatim
Version 3.233.0
Added
- Added superscript/subscript detection to text extraction: the new
GetTextBlockVAlignreports each extracted text block's baseline classification (0 = baseline, 1 = superscript, 2 = subscript) relative to its visual line, so chemical formulas, exponents and footnote markers can be recognised - A block classifies as super-/subscript when it is markedly smaller than the line's dominant text and its vertical centre sits above/below the dominant centre within one text height
Version 3.232.0
Added
- Added character-level word splitting to text extraction:
SetTextExtractionOptions(17, 1)re-splits show-text runs that carry no space characters into words wherever a per-character advance step is much wider than the run's median glyph advance - documents that paint whole lines as a single operator with kerning gaps standing in for spaces now extract as separate words inGetPageTextmodes 7 and 9-11 - The advance arrays stay aligned with the widened text, so block quads and per-character width outputs remain consistent
Version 3.231.0
Added
- Added layout-preserving fixed-grid text export:
GetPageText(11)maps the page geometry onto a monospace character grid - rows cluster by baseline, every block lands at its column computed from the average character width, and shorter cells pad with real spaces - so tables and forms keep their visual alignment in plain-text viewers, terminals and diffs without relying on tab stops - The reference page for
GetPageTextnow documents the reading-order (9), tab-separated table (10) and fixed-grid (11) modes
Version 3.230.0
Added
- Added dehyphenation to text extraction:
SetTextExtractionOptions(16, 1)re-joins words hyphenated across line breaks ("inter-" at a line end followed by "national" becomes "international") in the line-oriented outputs ofGetPageTextmodes 7 and 9 - The heuristic only merges when a letter precedes the hyphen and a lowercase letter starts the next line, so numeric ranges, proper nouns and sentence-initial capitals keep their hyphens
Version 3.229.0
Added
- Added the
OnBeforeSnapshotevent to theTPDFlibViewercontrol: it fires before a snapshot drag is captured with the dragged region, and setting Handled cancels the default clipboard capture so applications can process the region themselves - Exposed
PrefetchEnabled: the background pre-render worker can now be switched off and on at run time (the worker stops immediately and restarts on the open document) - Exposed
DiskCacheMaxDocuments: the number of documents the cross-session disk page cache keeps before pruning is now tunable (default 10)
Version 3.228.0
Added
- Added precise navigation to the
TPDFlibViewercontrol:GoToPagePointjumps to a page and scrolls a given page point to the top-left of the viewport, so link destinations and search hits land exactly in view - Added programmatic scroll control:
ScrollBypixel stepping, read/writeHScrollPos/VScrollPosproperties (ideal for synchronising two side-by-side viewers over the same document), andGetScrollPosForPagereporting each page's scroll anchor in continuous mode - Added public coordinate bridges
ClientPointToPageandPageRectToClientRectconverting between client pixels and page user space through zoom, rotation and scroll; the internal hit-testing now shares the exact geometry of the paint path and also works on unparented (headless) controls
Version 3.227.0
Added
- Added view-state events to the
TPDFlibViewercontrol:OnZoomChangefires on every effective-zoom move (explicit zoom, preset steps, fit-mode recomputation on resize, rotation or DPI change) andOnHScroll/OnVScrollfollow the scroll position, so toolbars and status displays stay in sync without polling - Dragging the vertical scrollbar thumb now shows a floating "Page N / M" bubble that previews the page the view will land on - a big help in long documents; the
ScrollHintEnabledproperty (on by default) turns it off
Version 3.226.0
Added
- Completed the fill-and-save loop in the
TPDFlibViewercontrol:SaveToFileandSaveToStreamwrite the displayed document - committed form edits included - back to disk or a stream (any open in-place editor commits first) - Multiline text fields now edit in a proper multi-line memo: Enter inserts a line break, Ctrl+Enter commits, Escape cancels; single-line fields keep the plain Enter-commits behaviour
- Tab and Shift+Tab cycle the in-place editor through the document's editable text and choice fields, following each field's page;
FocusNextFormFieldexposes the same navigation programmatically
Version 3.225.0
Added
- Added preset-ladder zooming to the
TPDFlibViewercontrol:ZoomInStepandZoomOutStepsnap the zoom to the standard preset sequence (1, 5, 10, 25, 50, 75, 100, 150, 200, 400, 800, 1600, 2400, 3200 percent), starting from the zoom currently in effect so fit modes step naturally; the toolbar zoom actions now use the same ladder - Ctrl+mouse wheel now zooms along the preset ladder while a plain wheel keeps scrolling
- Added keyboard shortcuts: Ctrl+'+'/'-' step the zoom, Ctrl+1/2/3 switch to actual size, fit width and fit page, and Shift+Up/Down jump to the first and last page
Version 3.224.0
Added
- Added
CreateSelfSignedCertificatewith Delphi, DLL and ActiveX entry points: generates a self-signed RSA certificate (SHA-256 signature, configurable subject, validity and key length) and exports it with its private key to a password-protected PFX file, ready forSignFileand the sign-process APIs - so signing workflows can be built and tested without an external certificate authority - The certificate is created in a throwaway key container that is deleted after the export; only the PFX keeps the key material. Self-signed certificates are meant for testing and internal documents - viewers flag them as untrusted unless installed explicitly
Version 3.223.0
Added
- Added
TPDFlibShapeWatermarkto the composable watermark layer: rectangles, circles, ellipses, polygons, Bezier curve chains and straight lines stamp onto a page range with fill and stroke colours, line width and opacity, through the sameApplyWatermarkentry point as text and image watermarks - Rectangle, circle and ellipse shapes size themselves from Width/Height; polygon, curve and line shapes take their geometry from
SetPoints(local X,Y pairs), so the nine-point Position grid and custom placement apply to every shape kind; degenerate geometry (too few points) is rejected
Version 3.222.0
Added
- Added
AddLinkToEmbeddedPDFwith Delphi, DLL and ActiveX entry points: a page hotspot that opens a PDF embedded in the current document (by its EmbeddedFiles name) and jumps to a chosen page there, using the standard embedded go-to (/GoToE) action of ISO 32000-1 §12.6.4.4 with an optional new-window request; the document version rises to PDF 1.6 automatically GetAnnotActionInfoand its outline/form-field siblings now recognise embedded go-to actions, reporting the newakGoToEkind together with the embedded target name, the parent/child target relationship, the optional file specification and the /NewWindow flag
Version 3.221.0
Added
- Added
SetSignProcessAppearanceTextwith Delphi, DLL and ActiveX entry points: digital signatures can now show an automatically generated visible text appearance composed of the signer name, reason, location and signing date, with optional descriptive labels ("Signed by:", "Reason:", ...) selected through a bit mask - The text block lays out inside the signature field rectangle in Helvetica with a configurable colour; font size 0 auto-fits the lines to the field. A field image set through
SetSignProcessFieldImageFromFilekeeps precedence, and document time-stamp processes ignore the text appearance
Version 3.220.0
Added
- Added interactive form filling to the
TPDFlibViewercontrol: clicking a checkbox or radio button toggles it, and clicking a text or choice field opens an in-place editor over the field (Enter commits, Escape cancels, leaving the editor commits); read-only fields are left alone and the changed page re-renders automatically - Every write fires the new
OnFormFieldValueChangedevent, andHighlightFormFieldswithFormHighlightColorpaints a translucent backdrop over each fillable area so users can spot form fields - Added the programmatic counterparts
FormFieldAtPagePoint,GetFormFieldPageRect,ToggleCheckBoxField,SetFormFieldValueAndRefresh,BeginEditFormFieldandCommitInplaceEditor, driving the same machinery without mouse input
Version 3.219.0
Added
- Added annotation interaction to the
TPDFlibViewercontrol: clicking a non-link annotation fires the newOnAnnotClickevent with the page, annotation index and subtype, andAnnotAtPagePointexposes the hit test programmatically (Popup companions are skipped) - Hovering an annotation now shows its Contents text as the control's hint (the
AnnotHintsswitch, on by default, works with the standardShowHintproperty) - Added
SaveAnnotAttachmentToFileto write a FileAttachment annotation's embedded file to disk, completing click-to-save attachment workflows in the viewer
Version 3.218.0
Added
- Added a cross-session disk page cache to the
TPDFlibViewercontrol: settingDiskCacheFolderpersists rendered pages on disk so a recently viewed document reopens instantly without re-rendering - Cached pages are keyed by a fingerprint of the document's path, size and last write time, so editing the file automatically invalidates its stale pages; the cache keeps up to ten documents and prunes the least recently used ones
- Added the
DiskCacheHitscounter reporting how many page renderings the disk cache saved
Version 3.217.0
Added
- Added the
PDFlibViewerActionsunit with twenty ready-madeTActiondescendants forTPDFlibViewer, so toolbars and menus work without glue code: page navigation (First/Prior/Next/Last), zoom (In/Out/FitWidth/FitPage/ActualSize), view rotation (clockwise/anticlockwise), printing, file open and save-as dialogs, copy selected text, and the five mouse-tool mode switches - Each action targets a viewer through its
Viewerproperty and keeps its enabled state (document open, page position, selection present) and checked state (active zoom fit or mouse tool) up to date automatically; all actions register in the losLab PDF category for the Action List editor - Added
TPDFlibViewer.EffectiveZoomPercentreporting the zoom actually in effect (including computed fit-width/fit-page factors) so zoom steps can build on it
Version 3.216.0
Added
- Added search-hit highlighting to the
TPDFlibViewercontrol:HighlightSearchHitssearches the whole document and paints a translucent bar over every match that stays in place while scrolling, zooming and rotating, withClearSearchHighlights,SearchHighlightCountand a configurableSearchHighlightColor TPDFlibSearchPanel.RunSearchnow also paints the hit bars in the attached viewer (the newHighlightInViewproperty, on by default, turns this off), so search results are visible on the pages, not just in the hit list
Version 3.215.0
Added
- Added mouse tool modes to the
TPDFlibViewercontrol through the newViewerModeproperty:vmSelecttext selection (default),vmHandpan-by-dragging with a grab cursor (a plain click still follows links),vmZoommarquee zoom that magnifies the dragged band to fill the viewport,vmSnapshotregion capture to the clipboard, andvmHighlightpersistent translucent region highlighting - Added
CaptureRegionto render any client region (pages plus highlights) into a caller-owned bitmap, theOnSnapshotevent andSnapshotToClipboardswitch for snapshot handling, andAddHighlightRegion/ClearHighlightRegions/HighlightRegionCountwith a configurableHighlightColorfor page-anchored highlights that survive zoom, rotation and navigation
Version 3.214.0
Added
- Added printing to the
TPDFlibViewercontrol:PrintDocshows the standard Windows print dialog (printer choice, page range, copies, collation) and hands the job to the library's printing engine, whilePrintDoc(False)prints the whole document to the default printer without any UI - Added
PrintDocRangefor fully programmatic viewer printing with an explicit printer name, page range, copy count and collation flag
Version 3.213.0
Added
- Added view rotation to the
TPDFlibViewercontrol:RotateClockwise90andRotateAntiClockwise90turn the displayed pages in 90-degree steps, and theViewRotationproperty reads or sets the angle directly (0, 90, 180 or 270) - Rotation is a pure view attribute: the document is never modified, link clicking and text selection keep working at every angle, fit-width and fit-page zoom modes adapt to the rotated page shape, and opening a new document resets the view to 0 degrees
- Rotated page bitmaps are cached per angle, so switching between angles reuses previous renderings instead of re-rendering
Version 3.212.0
Changed
- Improved XFA datasets SOM path compatibility:
GetXFAFormFieldValueandSetXFAFormFieldValuenow accept simple FormCalc-style predicate selectors such as$data.Receipt.Detail.[Total_Price > 200].Descriptionand update every matching data node when a predicate selects a subset
Version 3.211.0
Changed
- Improved XFA datasets SOM path compatibility:
GetXFAFormFieldValueandSetXFAFormFieldValuenow accept Data DOM class selectors#dataGroupand#dataValuewith numeric or wildcard occurrences, allowing class-based paths such as$data.Receipt.#dataGroup[0].#dataValue[0]
Version 3.210.0
Changed
- Improved XFA datasets SOM path compatibility:
GetXFAFormFieldValueandSetXFAFormFieldValuenow accept the$recordroot in non-record-processing packets, so paths such as$record.Taxand$record/Detail[0]/Total_Priceresolve from the outer data record element
Version 3.209.0
Changed
- Improved XFDF annotation interchange: annotation exports now write standard border style attributes
width,style, anddashesfrom PDF annotation/BSvalues, and annotation imports restore those attributes on inserted annotations
Version 3.208.0
Changed
- Improved XFDF annotation interchange: annotation exports now write standard
creationdateandopacityattributes from PDF annotation/CreationDateand/CAvalues, and annotation imports restore those attributes on inserted annotations
Version 3.207.0
Changed
- Improved XFDF annotation interchange: annotation exports now write standard
flagsnames from PDF annotation/Fvalues, and annotation imports restore those names to the inserted annotation flags
Version 3.206.0
Changed
- Improved XFA datasets SOM path compatibility:
GetXFAFormFieldValueandSetXFAFormFieldValuenow accept direct child wildcard selectors such as$data.Receipt.*.Total_Priceto read or update matching child branches without selecting same-name fields on the parent node
Version 3.205.0
Changed
- Improved XFA datasets SOM path compatibility:
GetXFAFormFieldValueandSetXFAFormFieldValuenow accept descendant selectors such as$data..Total_Priceand$data.Receipt..Total_Priceto read or update the first matching descendant data node
Version 3.204.0
Changed
- Improved XFA datasets SOM path compatibility:
GetXFAFormFieldValueandSetXFAFormFieldValuenow accept theparentproperty in paths such as$data.Receipt.Detail[1].parent.Taxto read or update a selected node's parent sibling data
Version 3.203.0
Changed
- Improved XFA datasets SOM occurrence handling:
GetXFAFormFieldValueandSetXFAFormFieldValuenow support[*]selectors such as$data.Receipt.Detail[*].Total_Priceto read or update every matching repeated data node
Version 3.202.0
Changed
- Improved XFA SOM path compatibility: XFA datasets and template field APIs now preserve literal periods in slash-delimited field paths and accept escaped periods such as
Line\.Itemin dot-delimited SOM paths
Version 3.201.0
Changed
- Improved XFA datasets path compatibility: XFA field value APIs now accept slash-delimited paths after standard data SOM roots such as
$data/...,xfa.datasets.data/..., andxfa.datasets/...
Version 3.200.0
Changed
- Improved XFA datasets SOM compatibility: XFA field value APIs now accept the standard
!data...short form, including slash-delimited!data/...paths
Version 3.199.0
Changed
- Improved XFA template path compatibility: template editing APIs now accept slash-delimited field paths returned by XFA field-name enumeration, including
$template/...paths
Version 3.198.0
Changed
- Improved XFA datasets namespace compatibility: field value APIs now read and update data nodes by local XML name when the business data inside the datasets packet uses its own namespace prefix, and field-name enumeration returns prefix-free paths
Version 3.197.0
Changed
- Improved XFDF annotation interchange: annotation exports now include the common
nameanddateattributes from PDF/NMand/M, annotation imports restore those values on inserted annotations, andSetAnnotStrPropertynow accepts tag 104 for annotation modified dates
Version 3.196.0
Changed
- Improved XFA field-name enumeration: field list APIs now scan every top-level data record in the datasets packet and return leaf data fields without adding container groups as fields
Version 3.195.0
Changed
- Improved XFA datasets compatibility: XFA field value APIs now read and update complete XDP packets whose datasets packet uses an unprefixed
dataelement
Version 3.194.0
Fixed
- Improved XFA template field updates: XFA template field APIs now accept standard template SOM roots such as
$templateandxfa.template, and template-only changes in complete XDP streams are saved correctly
Version 3.193.0
Changed
- Improved XFA field addressing: XFA field value APIs now accept standard data SOM roots such as
$dataandxfa.datasets.datain addition to relative field paths
Version 3.192.0
Changed
- Improved XFA XML packet handling: XFA streams with UTF-16 byte order marks or UTF-16 XML byte patterns now decode before XML parsing, so UTF-16 encoded form values remain available through XFA field read/write APIs
Version 3.191.0
Changed
- Improved XFA packet authoring:
SetXFAFromStringnow creates the requiredAcroFormcontainer when a document does not already have form data, replaces stale parsed XFA state when a complete XFA packet is stored, and keeps the saved packet available through XFA field read/write APIs
Version 3.190.0
Changed
- Improved XFDF annotation interchange: annotation exports now write the common
colorattribute from the PDF/CRGB array, and annotation imports now restorecolor="#RRGGBB"values into the inserted annotation color array
Version 3.189.0
Added
- Added XFDF annotation interchange APIs:
ExportAnnotationsToXFDF,ExportAnnotationsToXFDFString,ImportAnnotationsFromXFDFandImportAnnotationsFromXFDFStringnow read and write ISO 19444<annots>data for text-style annotation comments, including page, rectangle, title, subject and plain contents data
Version 3.188.0
Changed
- Improved XFDF rich text field import: fields with
<value-richtext>now preserve the rich text XML in the fieldRVvalue while still applying the plain<value>fallback when present
Version 3.187.0
Changed
- Improved XFDF form-data interchange for multi-select choice fields: repeated
<value>elements now import into the selected-value array, and exporting a multi-select choice field now writes one<value>element per selected item instead of flattening them into one escaped text node
Version 3.186.0
Changed
- Improved XFDF form-data export for rich text fields: fields with an
RVrich text value now include a<value-richtext>element while preserving the plain<value>fallback
Version 3.185.0
Changed
- Improved XFDF form-data import for rich text fields: when a field provides
<value-richtext>without a plain<value>, the importer now extracts the XHTML text content and applies it to the matching AcroForm field instead of skipping the field
Version 3.184.0
Changed
- Improved XFDF form-data interchange: exports now use the standard XFDF namespace with
xml:space="preserve", emit nested<field>elements for hierarchical AcroForm names, skip non-terminal parent field values, write file exports as UTF-8, and import whitespace-flexible XFDF with nested fields, single-quoted attributes, CDATA, XML entities, and numeric character references
Version 3.183.0
Added
- Added
SanitizeDocument(Flags)which strips sensitive content in one call: removes all global JavaScript, removes the catalog OpenAction, strips /A actions from every annotation, blanks Author/Subject/Keywords/Creator/Producer metadata (both /Info and XMP), and optionally deletes all annotations. Flag bitsSANITIZE_JAVASCRIPT/SANITIZE_ACTIONS/SANITIZE_METADATA/SANITIZE_ANNOTATIONS/SANITIZE_OPEN_ACTIONcombine;SANITIZE_ALLapplies every strip. Closes the classic data-leak hole where redaction removes visible content but leaves metadata or hidden scripts recoverable - Added
TPDFAnnots.RemoveAnnotAction(Index)to strip the /A action dictionary from an individual annotation (used by SanitizeDocument, also useful standalone)
Version 3.182.0
Added
- Image elements returned by
EnumPageElementsnow carry their real placement rectangle (Left/Top/Right/Bottom) instead of zeros. Backed by a newTPDFContentProgram.EnumImagePlacementsmethod that walks the content stream tracking the CTM (cm/q/Q) and maps eachDooperator's 1x1 unit square into page coordinates - Added four showcase demos: DocumentProperties (DocInfo/page-box/rotation/transition/viewer-preferences/XMP round-trip), FormProperties (per-field property grid: type/value/readonly/MaxLength/MultiLine/description), SignatureValidator (enumerate signature fields + verify + signer certificate), Reader (VCL TPDFlibViewer with open/navigate/zoom/copy-text)
Version 3.181.0
Added
- Added
SetXMPPropertyexposing the existing schema-aware XMP engine (PDFlibXMP) through the public facade: set any Dublin Core (dc:), XMP Basic (xmp:), Adobe PDF (pdf:), PDF/A ID (pdfaid:), PDF/UA ID (pdfuaid:), or XMP Media Management (xmpMM:) property by namespace + key without hand-writing RDF XML - Added
ImportFormDataFromFDF/ImportFormDataFromFDFStringwhich parse an FDF /Fields array (each<< /T (name) /V (value) >>) and apply each value to the matching AcroForm field by title, inverting the EscapePDFText octal/paren escaping. Closes the asymmetric export-only gap - Added
ExportFormDataToXFDF/ExportFormDataToXFDFString/ImportFormDataFromXFDF/ImportFormDataFromXFDFStringfor XFDF (XML Forms Data Format) bidirectional interchange - the modern XML counterpart of FDF - Made the six namespace-scoped XMP setters (
SetDublinCore,SetXMPBasic,SetAdobePDF,SetPDFA,SetPDFUA,SetXMPMM) public onTPDFlibXMPso advanced callers can drive the engine directly
Version 3.180.0
Added
- Added
SearchAndReplaceTextInContentwhich performs TRUE content-stream text replacement (rewriting the Tj/TJ/'/" show-text operators in place viaTPDFContentProgram.ReplaceTextRun), unlike the existing mask-basedSearchAndReplaceTextthat only overlays a rectangle on top of the original glyphs. The original text is gone from the stream and cannot be recovered. Locates hits viaSearchText, maps each hit rect to its covering instruction viaFindInstructionsInRect, rewrites, and writes the layer back
Version 3.179.0
Added
- Added a structured internal logger (
TPDFlibLogger) in a newLib/PDFlibLogger.pasunit with four levels (Debug/Info/Warn/Error), a host callback (OnLog), an optional thread-safe file sink, and an error-code-to-message map (PDFlibErrorMessage) that finally gives the existing numeric codes (1xx/3xx/4xx/5xx) human text. Exposed onTPDFlibvia theLoggerproperty - Added
RenderPagesToFilesParallelwhich renders a page range to one file per page using aTTaskpool with oneTPDFlibinstance per worker (TPDFlib is not thread-safe) and per-threadCoInitializefor GDI+ apartment safety. Scales near-linearly with CPU cores for CPU-bound raster output
Version 3.178.0
Added
- Added
EnumCertificatesto enumerate every certificate in a Windows system store ("MY", "Root", ...) returning subject, issuer, serial number, validity window, HasPrivateKey, and Qualified (eIDAS QCStatements extension, OID 0.4.0.1862.1.7, detected via a new built-in DER decoder in PDFlibASN1) - replaces the previous single-cert-by-CNSetSignProcessCertFromStorelimitation - Added
SetSignProcessCertFromStoreByHandleto select a signing certificate by raw PCCERT_CONTEXT handle obtained from enumeration, letting callers pick by any criterion (qualified filter, validity, fingerprint) rather than only by Subject CN - Added
RedactRegionwhich truly removes text, vector paths, and image XObjects whose painted area intersects a rectangle (editing the content stream so removed content cannot be recovered, unlikeMaskRectwhich only covers it), with optional black fill and /Redact annotation. Backed by a CTM-tracking content-stream analyser in PDFlibContentModel (FindInstructionsInRect) - Added minimal DER decoder functions (
DERDecodeLength,DERFindExtensionByOID) to PDFlibASN1 for in-process certificate extension inspection without CryptDecodeObjectEx
Version 3.177.0
Added
- Added page stitching APIs that compose existing pages into new layouts via vector Form XObject capture (preserving full vector fidelity, unlike content-stream concatenation):
StitchPageOverlayoverlays one page onto another at a position with optional opacity,StitchPagesSideBySideplaces two pages left/right on a new wider page, andStitchPagesVerticallystacks a page range into a new tall poster-style page - Added a composable watermark template layer in a new
Lib/PDFlibWatermark.pasunit:TPDFlibWatermarkBasewith nine-point positioning (wpTopLeft..wpBottomRightpluswpCustom),TPDFlibTextWatermark,TPDFlibImageWatermark, andTPDFlibCompositeWatermarkwhich applies a list of sub-watermarks recursively across a shared page range - Added
TPDFlib.ApplyWatermarkas a convenience entry point that delegates to a watermark template's own page range and settings
Version 3.176.0
Added
- Added named render-output format constants (
PDF_RENDER_BMP,PDF_RENDER_EMF,PDF_RENDER_EMFPLUS,PDF_RENDER_EMF_DUAL, etc.) that map 1:1 to the integerOptionsvalues accepted byRenderPageToFile,RenderPageToStream,RenderPagesToFiles, andRenderDocumentToFile - Added
TPDFlibMetafileFormatenum and the convenience methodsRenderPageToMetafileStreamandRenderPageToMetafileFile, which accept a named metafile variant (mfEMF, mfEMFPlus, mfEMFDual, mfWMF) instead of a bare integer - Added EMF+ Dual output mode (Options value 11 / mfEMFDual), which records both GDI and GDI+ commands in the same metafile for compatibility with older GDI-only consumers
- Added
TPDFlibClipboardFormatenum andRenderPageToClipboard, which places a rendered page on the Windows clipboard as an enhanced metafile (CF_ENHMETAFILE), a DIB bitmap (CF_DIB), the page Unicode text (CF_UNICODETEXT), or all three at once - Added a new
Lib/PDFlibClipboard.pasunit with low-level Win32 clipboard placement helpers used byRenderPageToClipboard - Added full per-monitor DPI awareness to
TPDFlibViewer: a new publicScreenDPIproperty, aCreateWndoverride that auto-detects the host monitor DPI viaGetDpiForWindow(with aGetDeviceCapsfallback), and aWM_DPICHANGEDhandler that rebuilds the layout and clears the bitmap cache when the window moves between monitors - Added
TPDFRenderer.SetEMFPlusMetafileTypeto select between EMF+ Only and EMF+ Dual recording at the renderer level
Fixed
- Fixed the
RenderPageToFilereference page where the Options value list was misplaced in the Page row and the Options cell was empty
Version 3.175.3
Added
- Added a Lib/PDFlibTableExport.pas unit that renders any TDataSet (FireDAC, ClientDataSet, query result) into a paginated PDF table with styled header, zebra striping, right-aligned numeric columns, and automatic page continuation, plus a Demo/Delphi/DataSetExport console demo that loads the RAD Studio customer.FDS sample via FireDAC and exports it
Version 3.175.2
Added
- Added end-to-end Demo/ReportBridges projects that build a minimal report in FastReport, QuickReport, and ReportBuilder and export it to PDF through the matching Addons bridge, with a dedicated build-ReportBridges.cmd that supplies the engine source paths and gating symbols so the standard demo build still compiles the projects as stubs
Version 3.175.1
Added
- Added a Delphi JBIG2 options matrix demo that sweeps SymbolExtract, SkipBlackDots, BlackDotSize, and LossyLevel combinations against CCITT G4 and Flate baselines, with per-row PDF, CSV, and summary outputs
- Added a Delphi Pattern showcase demo covering axial and radial RGB shaders, a Coons-patch mesh shader, and a custom tiling pattern applied as fill, stroke, and text colour
- Added a Delphi CCITT fax matrix demo comparing Group 3 1-D, Group 3 2-D, and Group 4 compression with BlackIs1 and Interpolate option bits, reporting each output size and the resulting /Filter name
- Added FastReport, QuickReport, and ReportBuilder export bridges under Addons that render a prepared report into a PDFlibPas PDF via the engine's native object, metafile, and DrawCommand surfaces respectively
Version 3.175.0
Changed
- Expanded the WorkflowGallery demo with an annotation variant matrix that records text highlight fills, markup styles, note icons, free text, caret, and stamp annotations in companion CSV and HTML reports
Version 3.174.0
Changed
- Expanded the C++Builder AdvancedWorkflowMatrix demo to map action navigation, PDF/A and AcroForm workflows, font diagnostics, streaming delivery, and the latest scan-compression helpers into the generated matrix reports
Version 3.173.0
Added
- Added the DeliveryWorkflowMatrix Delphi demo for streamed Web and CGI PDF output, page-thumbnail validation, and watermark delivery workflows using one generated PDF byte buffer
Version 3.172.0
Added
- Added outline tree convenience APIs for ordered sibling insertion, child creation, subtree deletion, and preorder outline enumeration with parent, sibling, level, destination page, open-state, and title details
Version 3.171.0
Added
- Added the FontDiagnosticsMatrix Delphi console demo for CJK and Unicode font paths, TrueType subset updates, installed-font probes, document font enumeration, and font diagnostics reports
Version 3.170.0
Added
- Added the CanvasMigrationMatrix Delphi console demo for Canvas DC migration, raw content and path entry points, Delphi color helpers, pattern-filled text, watermarking, page thumbnail workflows, and rendered validation previews
Version 3.169.0
Added
- Added dedicated LayerCompositionMatrix, TransparencyMaskMatrix, and ComplianceFormWorkflowMatrix Delphi console demos for optional-content print/export policy, Pattern/Form XObject composition, transparency mask comparison, PDF/A-1b success and failure examples, AcroForm action workflows, appearance rebuilds, and visible signature templates
Version 3.168.0
Added
- Added dedicated ImageCompressionMatrix and SecurityPermissionMatrix Delphi console demos with generated PDF, CSV, and HTML reports for image compression strategy selection, scan compression, JPEG render quality, and encrypted permission profile auditing
Version 3.167.0
Added
- Added named helper APIs for JBIG2 bitmap encoding, EMF import options, AcroForm event actions, and chained actions so callers can use explicit option switches instead of composing integer bitmasks manually
Version 3.166.0
Added
- Added a runnable C++Builder AdvancedWorkflowMatrix console demo with PDF, CSV, and HTML outputs that map advanced canvas migration, EMF import, image compression, AcroForm, signature, security, PDF/A, optional-content, pattern, and Form XObject workflows to C++Builder project entry points
Version 3.165.0
Added
- Added a Delphi action navigation matrix demo that demonstrates open-document actions, document-level JavaScript, embedded-file links, remote GoTo links, AcroForm event actions, Submit/Reset/Hide link helpers, and chained Next actions with PDF, CSV, and HTML outputs
Fixed
- Fixed remote file link helpers so AddLinkToFile, AddLinkToFileEx, AddLinkToFileDest, and local file launch links create one annotation and return instead of looping indefinitely
Version 3.164.0
Added
- Přidáno demo Delphi s maticí kontrol PDF/A, které zkoumá včasné odmítnutí nebo rozhodnutí o povolené cestě při nastavení režimu PDF/A, průhlednost, režimy prolnutí, šifrování, JavaScript, multimédia, vložené soubory a pracovní postupy přidružených souborů PDF/A-3, s generovanými sestavami PDF, CSV a HTML
Version 3.163.0
Added
- Přidána explicitní matice propojení ReportAdapter pro cesty exportu FastReport, QuickReport, ReportBuilder, DBGrid a vlastního plátna, včetně generovaného mapovacího výstupu CSV a HTML a stránky PDF, která ukazuje znovupoužitelnou strategii adaptéru
Version 3.162.0
Added
- Přidána pokročilá matice pracovních postupů ukázek, která generuje konkrétní výstupy pro migraci plátna, možnosti importu EMF, porovnání komprese obrázků, pracovní postupy akcí AcroForm, viditelné prázdné podpisy, bezpečnostní oprávnění, kontroly PDF/A-1b, volitelný obsah, dlaždicové vzory, Form XObjecty, export tabulek ve stylu DBGrid a hlášení špičkové paměti u velkých souborů
Version 3.161.0
Added
- Přidány pomocné funkce Delphi pro kompaktní sestavení akcí při otevření dokumentu, akce událostí viditelnosti polí formuláře, nastavení barev TColor a šedé a přímé vkládání surového obsahu, cesty, textu a matice do proudu obsahu
Version 3.160.0
Added
- Přidány pomocné funkce Delphi pro kompresi skenovaných obrázků bitmapa do JBIG2, jednorázové nastavení masky obrázku a průhlednosti color-key, řetězení akcí GoTo a čitelná jména událostí AcroForm pro JavaScript nebo přiřazení existující akce
- Rozšířeny
ImportEMFFromFileExaImportEMFFromStreamExtak, že jejich příznakyOptionsmohou vynutit import bitmapy, povolit rekompresi JPEG barevných obrázků EMF a vyžádat řídicí prvky zpracování GDI+
Version 3.159.1
Changed
- Vylepšeno
SaveToStreama ukládání do vázaného výstupního proudu tak, aby se velké objekty proudu PDF zapisovaly v omezených blocích místo kopírování každého objektu proudu do jednoho mezilehlého výstupního řetězce
Version 3.159.0
Added
- Přidány pomocné funkce pro umístění obrázku, které nakreslí nebo přizpůsobí zadaný obrázek a ihned poté uvolní jeho handle, s vstupními body Delphi, DLL a ActiveX pro nižší špičkovou paměť v pracovních postupech jednorázového generování obrázků
- Přidán
RenderPageToMonochromeFileExpro vykreslování 1bitového BMP s převodem pomocí prahu a odstraněním izolovaných černých pixelů před pracovními postupy komprese skenovaných obrázků
Version 3.158.1
Added
- Přidány ukázky pracovních postupů Delphi pro znovupoužitelný export ve stylu reportů, import bohatého textu RichEdit do EMF a kombinované scénáře výstupu miniatur stránek, anotací, form XObjectů, tabulek, komprese, JavaScriptu a vázaného proudu
Version 3.158.0
Added
- Přidána rozhraní API pro řízení šifrování metadat s vstupními body Delphi, DLL a ActiveX: SetEncryptMetadata může zapisovat Standard-security PDF s nešifrovanými datovými proudy metadat XMP, zatímco GetEncryptMetadata hlásí čekající nebo načtený stav /EncryptMetadata
Version 3.157.0
Added
- Přidána rozhraní API pro přímé kreslení dlaždicových vzorů s vstupními body Delphi, DLL a ActiveX: BeginTilingPattern vytvoří dočasnou kreslicí plochu buňky vzoru, EndTilingPattern ji zaregistruje jako znovupoužitelný vzor a CancelTilingPattern zahodí rozpracování bez ponechání pojmenovaného vzoru
Version 3.156.0
Added
- Přidány pomocné funkce pro výstupní proud s vázaným výstupem:
BeginOutputToStream,EndOutputStream,CancelOutputStreamaOutputStreamActiveumožňují kódu pro streaming, web a export reportů navázat cílovýTStream, dokončit jej přes stávající dávkovaný zapisovač nebo zrušit čekající cíl bez převzetí vlastnictví proudu
Version 3.155.0
Added
- Přidány
Abort,AbortedaResetAbortpro volající Delphi, DLL a ActiveX, aby aplikace mohly označit instanci jako zrušenou a zabránit spuštění operací ukládání nebo přidávání výstupu, dokud se příznak nevymaže
Version 3.154.0
Added
- Přidány pomocné funkce pro miniatury stránek pro možnosti importu obrázků a paměťové zdroje, vyhledání skupin volitelného obsahu a nastavování stavu podle názvu skupiny a
SetOpenActionNamedDestinationpro skoky při otevření dokumentu přes pojmenované cíle
Fixed
GetDestNamenyní rozpoznává explicitní handly cílových polí, včetně polí vrácených z pojmenované akce otevření dokumentu
Version 3.153.0
Added
- Přidána pohodlná rozhraní API pro řetězené akce formuláře, spouštěče polí Hide a ImportData, počáteční stavy skupin volitelného obsahu, volitelný import EMF a importy obrázků s průhledností color-key
Version 3.152.0
Added
- Přidáno automatické vytváření odkazů URL pro kreslení textu, pomocné funkce importu obrázků CCITT Group 3/4, přímé pomocné funkce obrázků JBIG2, obaly rozšířeného importu EMF, pomocné funkce pro připojení masky obrázku, vytváření viditelného podpisového pole a pomocné funkce událostí a akcí polí formuláře pro pracovní postupy JavaScript, SubmitForm a ResetForm
Version 3.151.0
Added
- Přidány
DrawPie,DrawChord,DrawEllipticPieaDrawEllipticChordpro explicitní uzavřené kruhové a eliptické kreslení oblouků s režimy obrysu, výplně nebo výplně s obrysem
Version 3.150.0
Added
- Přidány
NewGraphicsStateaSetGraphicsState, aby si volající mohli vytvořit znovupoužitelné zdroje ExtGState pro kombinované nastavení průhlednosti výplně, průhlednosti tahu, šířky čáry, zakončení čáry, spojení čáry a miter limitu
Version 3.149.1
Fixed
- Opraveny duplicitní ActiveX dispatch ID pro metody Form XObject a miter limit, aby pozdně vázaní COM volající mohli každou metodu rozpoznat jednoznačně
Version 3.149.0
Added
- Přidán
SetMiterLimitpro řízení poměrů miter limitu tahu u cest, které používají miter spoje - Zpřístupněny
BeginFormXObject,EndFormXObjectaCancelFormXObjectpřes DLL a ActiveX API
Version 3.148.0
Added
- Přidána znovupoužitelná API sestavení Form XObjectu:
BeginFormXObject,EndFormXObjectaCancelFormXObjectumožňují volajícím kreslit znovupoužitelnou šablonu běžnými kreslicími voláními stránky a opakovaně ji umisťovat přes API pro kreslení zachycené stránky
Version 3.147.0
Added
- Přidány
SetTextTilingPatternaSetLineTilingPattern, aby se dlaždicové vzory zachycené stránky mohly znovu použít pro text, podtržení a tahové grafiky bez duplicitních kreslicích příkazů
Fixed
- Barvy tažených shaderů a dlaždicových vzorů nyní zapisují operátor barvy tahu vzoru místo aktualizace stavu barvy netažení
Version 3.146.0
Added
- Přidány
BeginOptionalContentaEndOptionalContent, aby volající mohli označit pouze následující kreslicí příkazy skupinou volitelného obsahu bez přepisování stávajícího proudu obsahu
Fixed
- Operátory značkovaného obsahu pro uzavření rozsahu se nyní vyprázdní ihned při uzavření volitelného obsahu, Tagged PDF nebo artefaktových rozsahů na konci proudu obsahu
Version 3.145.0
Added
- Přidán
SetTransparencyEx, aby volající mohli nastavit samostatné hodnoty průhlednosti výplně a tahu pro následně kreslený text a grafiku a zároveň zachovat stávající chování automatického přechodu na PDF 1.4
Version 3.144.0
Added
- Přidán
AddLinkToNamedDestination, aby hotspot na stránce mohl přejít na pojmenovaný cíl ve stejném dokumentu bez rozlišování cílové stránky při vytváření odkazu
Fixed
- Čteče akcí anotací nyní vracejí pro stránky bez anotací žádnou akci místo dereferencování prázdné mezipaměti anotací
Version 3.143.0
Added
- Přidána rozhraní API pro správu akcí polí formuláře, aby volající mohli navázat existující akci na spouštěč pole, prohlédnout si typovanou akci spouštěče a odstranit hlavní nebo další akce polí
Fixed
FormFieldJavaScriptActionnyní odmítá dokumenty PDF/A a neplatné názvy spouštěčů místo zapisování nevyhovujících slovníků akcí polí
Version 3.142.0
Added
- Přidána API pro řetězení akcí, aby mohli volající připojovat další akce URI, pojmenované akce a akce JavaScript k existující anotaci, osnově nebo akci formulářového pole a kontrolovat řetězené akce pomocí
GetActionNextCountaGetActionNextInfo
Version 3.141.0
Přidáno
- Added
AddLinkToSubmitFormandAddLinkToResetFormso page hotspots can submit or reset AcroForm fields through standard PDF actions without JavaScript
Version 3.140.0
Přidáno
- Added
AppendToStreamso incremental update workflows can write directly to a caller-provided stream instead of first materialising the update as anAnsiString
Změněno
SaveToStreamnow serializes directly into the target stream, andAppendToString(1)now returns only the incremental update section without copying the original source bytes into a temporary buffer
Version 3.139.0
Přidáno
- Added
GetAnnotReplyToandGetAnnotReplyTypeso threaded annotation replies can be inspected through named read-side accessors instead of generic annotation property tags
Version 3.138.0
Přidáno
- Added the Delphi
DocumentInspectionWorkbenchsample to batch-inspect PDFs with combined font diagnostics, image sampling, color-space discovery, load timing, and JSON, CSV, and HTML reports
Version 3.137.0
Přidáno
- Added the Delphi
ImageDecodeBenchmarksample to measure page image discovery, decoded image bytes, and page color-space discovery with CSV and HTML timing reports
Version 3.136.0
Přidáno
- Added
GetDocumentFontDiagnosticsandTPDFlibFontDiagnosticsto summarize document font embedding, subsetting, Standard 14, CID, Type3, and unknown-font counts in one call
Version 3.135.0
Přidáno
TPDFlibSignatureVerifier.VerifySignerCertificateChainnow builds the embedded signer certificate chain with Windows CryptoAPI and returnsvsValidonly when the chain satisfies the Windows base trust policy, while self-signed or otherwise untrusted signer certificates returnvsInvalidwithout changingVerifySignature's content-integrity result
Version 3.134.0
Opraveno
TPDFlibSignatureVerifier.VerifySignaturenow validates legacyadbe.pkcs7.sha1signatures, returningvsValidwhen the signed digest matches the covered/ByteRangebytes andvsInvalidafter covered content changes
Version 3.133.0
Přidáno
- Added
RenderPagesToFilesandDARenderPagesToFilesto render arbitrary page ranges to numbered output files while reusing renderer setup across the selected pages
Version 3.132.0
Přidáno
- Added
AddPageHeaderandAddPageFooterconvenience stampers that place text at a fixed top or bottom margin on every page in a range, with left/centre/right alignment and token expansion (&Pcurrent page,&Ntotal pages,&Ddate,&Tdocument title,&&literal ampersand) StampTextandStampImagewithsoUnderlaynow truly place content beneath existing page content by prepending a fresh content layer (previously it drew on top likesoOverlay); backed by a newPrependContentLayerpage-tree method
Version 3.131.0
Přidáno
- Added
ScalePage(ScaleX, ScaleY, Anchor)which scales the selected page's content by wrapping every content layer in aq sx 0 0 sy tx ty cm ... Qgraphics-state block and resizing the MediaBox and CropBox; the anchor keeps the lower-left origin (0), centres the content (1) or keeps the top-left (2) - Extended
EnumPageElementswith a newekPathelement kind: each page now also reports its vector paths with a bounding box, point count, closure flag and paint operator, lifted from the content streams via the structured content model
Version 3.130.0
Přidáno
- Added three file-size optimisation APIs that shrink loaded documents on re-save:
SubsetEmbeddedFontsrewrites every embedded TrueType font program (FontFile2) down to the Unicode characters the document actually renders via the FontSub.dllCreateFontPackageservice;DownsampleImages(MaxDPI, Quality, Filter)decodes each image XObject above the target DPI, resamples it (box or bilinear) and re-encodes as JPEG or PNG;NormalizeLZWStreamsrewrites every stream still filtered with LZWDecode to FlateDecode through the existing LZW decoder and Flate encoder, preserving Predictor parameters
Version 3.129.0
Přidáno
- Added mesh shading creation APIs for the four shading types that previously only had read/parse support:
NewRGBFreeFormTriangleMesh(ShadingType 4, free-form Gouraud triangles),NewRGBLatticeTriangleMesh(ShadingType 5, lattice-form Gouraud),NewRGBCoonsPatchMesh(ShadingType 6, Coons patch mesh) andNewRGBTensorPatchMesh(ShadingType 7, tensor-product patch mesh) — each builds a named mesh shading pattern from a flat vertex or patch list with selectable coordinate/colour bit depth and a bounding box, selectable withSetFillShader/SetLineShader/SetTextShaderlike the existing axial and radial shaders
Version 3.128.0
Přidáno
- Přidán pruh s miniaturami pro prohlížeč:
TPDFlibThumbnailBarzobrazuje miniaturu každé stránky, líně vykreslovanou při rolování řádků do zobrazení, s číslem stránky vespod; kliknutím na miniaturu přeskočí připojený prohlížeč na danou stránku — doplňuje rodinu ovládacích prvků prohlížeče (prohlížeč, panel záložek, vyhledávací panel, miniatury)
Version 3.127.0
Přidáno
- Přidán panel vyhledávání pro prohlížeč:
TPDFlibSearchPanel.RunSearchprohledá celý připojený dokument a vypíše jeden řádek pro každý nález s číslem stránky a odpovídajícím textem; kliknutím na nález prohlížeč přeskočí na danou stránku
Version 3.126.0
Přidáno
- Přidán panel záložek pro prohlížeč:
TPDFlibOutlineViewervypisuje strom obrysu dokumentu s odsazením a kliknutím přeskočí připojený prohlížeč (přesAttachViewer) na cílovou stránku záložky; je postaven na znovupoužitelné základní třídě panelu, kterou sdílejí i pozdější boční panely
Version 3.125.0
Přidáno
- Přidán výběr textu do ovládacího prvku prohlížeče: tažením levým tlačítkem myši vyberte, stisknutím Ctrl+C nebo voláním
CopySelectedTextzkopírujte výběr do schránky; zachycený text je k dispozici prostřednictvím vlastnostiSelectedText, seřazený shora dolů s konci řádků mezi pásy - Přidáno
GetTextInRegion, které přímo vrací text obdélníkové oblasti stránky — stejné vyhledávání na základě bloků, jaké používá výběr myší, k dispozici pro vlastní rozhraní pro výběr
Version 3.124.0
Přidáno
- Ovládací prvek prohlížeče nyní předvykresluje sousední stránky na vlákně na pozadí, takže posun vpřed nebo vzad okamžitě zobrazí další stránku; pracovník používá svou vlastní instanci dokumentu a předává hotová vykreslení do mezipaměti bez blokování uživatelského rozhraní
- Přidána interaktivita odkazů do prohlížeče: kliknutí na anotaci odkazu spustí
OnLinkClicks číslem stránky a stejným typizovaným shrnutím akce, jaké produkujeGetAnnotActionInfo(webová adresa, cíl dokumentu, pojmenovaná akce a tak dále);LinkActionAtPagePointzpřístupňuje základní hit test pro vlastní manipulaci
Version 3.123.0
Přidáno
- Ovládací prvek prohlížeče získal plynulé rolování:
SetDisplayModepřepínáTPDFlibViewermezi zobrazením jedné stránky a plynulým vertikálním rolováním celým dokumentem, přičemž se vykreslují pouze stránky viditelné ve výřezu a aktuální stránka sleduje pozici rolování (spouštíOnPageChange, jak se stránky dostávají do zobrazení) - Vykreslené stránky jsou nyní uloženy v mezipaměti bitmap podle nejméně nedávného použití (LRU), takže rolování tam a zpět nevyžaduje opakované vykreslování; rozpočet paměti je standardně 128 MB a upravuje se pomocí
SetCacheLimit, přičemž nejstarší stránky jsou vypuzeny, když se rozpočet zmenší nebo zaplní - Přidáno rolování kolečkem myši a navigace pomocí klávesnice pro prohlížeč: PageUp/PageDown (krokuje po stránkách v režimu jedné stránky, po výřezech v plynulém režimu), šipky, Home a End
Version 3.122.0
Přidáno
- Přidán interaktivní ovládací prvek prohlížeče PDF:
TPDFlibViewerje VCL rolovací ovládací prvek, který otevírá dokument ze souboru nebo se připojí ke stávající instanciTPDFlib, zobrazuje stránky prostřednictvím zvoleného vykreslovacího jádra (GDI+, Cairo nebo PDFium) a nabízí navigaci po stránkách (GoToPage/NextPage/PrevPages událostíOnPageChange) a ovládání přiblížení — pevné procento, přizpůsobit šířce nebo přizpůsobit stránce, přepočítáváno automaticky při změně velikosti ovládacího prvku; stránky širší než výřez se rolují, užší stránky se vycentrují - Přidán balíček pro dobu návrhu (
Package\PDFlibViewerPkg.dpk), který registruje ovládací prvek na stránce palety losLab PDF pro použití přetažením v IDE
Version 3.121.0
Přidáno
- Automatické tvarování složitých písem v
DrawText: text obsahující arabské, hebrejské, indické nebo jiné znaky složitých písem je nyní automaticky detekován a tvarován — kontextové tvary písmen, povinné ligatury a řazení zprava doleva se zobrazí správně bez nutnosti změn v kódu; standardních 14 jmen se mapuje na jejich metricky kompatibilní nainstalovaná písma (Helvetica na Arial, Times na Times New Roman, Courier na Courier New) aGetTextWidthměří prostřednictvím stejného tvarovacího průchodu, takže zarovnání zůstává konzistentní; latinka, cyrilice, řečtina a texty CJK si zachovávají svou stávající vykreslovací cestu bajt po bajtu - Přidáno
SetTextShapingpro přepínání automatického směrování (standardně povoleno; předejte 0 pro obnovení přesného chování před tvarováním)
Version 3.120.0
Změněno
- Doprovodná písma tvarovaného textu jsou nyní při ukládání podřizována (subsetted) pouze na glyfy, které dokument zobrazuje, čímž se dramaticky zmenšuje velikost výstupních souborů (celý program písma o velikosti více než jeden megabajt se zredukuje na použité glyfy); zredukované písmo si zachovává své číslování glyfů, nese název
BaseFonts tagem podmnožiny a skutečné šířky/Wpro každý glyf a získává mapu ToUnicode, která převádí každý tvarovaný glyf zpět na jeho zdrojové znaky — takže kopírování nebo extrakce výstupuDrawShapedTextvrátí původní řetězec, a to včetně obou písmen za ligaturou lam-alef
Version 3.119.0
Přidáno
- Přidáno vykreslování textu pro složitá písma:
DrawShapedTexttvaruje arabské, hebrejské a další řetězce složitých písem před jejich vykreslením — kontextové tvary písmen, povinné ligatury, jako je lam-alef, a řazení zprava doleva se všechny správně zobrazí — a zapisuje tvarované glyfy prostřednictvím doprovodného písma Type0 (Identity-H), které vkládá celý program písma, takže tvary bez vlastního kódu znaku se vykreslují přesně; pro každý řez písma se vytvoří jedno doprovodné písmo a znovu se používá napříč voláními - Přidáno
GetShapedTextWidth, které měří text prostřednictvím stejného tvarovacího průchodu, takže spojený text se měří ve své skutečné vykreslené šířce — použijte jej k zarovnání doprava nebo k vycentrování tvarovaných odstavců
Version 3.118.0
Přidáno
- Přidán základ pro tvarování textu ve složitých písmech: nová vazba Uniscribe (usp10.dll) převádí arabské, hebrejské a další řetězce složitých písem na správně uspořádané a tvarované sekvence glyfů — kontextové arabské tvary, povinné ligatury jako lam-alef a řazení zprava doleva — hlášení indexu glyfu písma každého glyfu, posunu a klastru zdrojových znaků; toto je engine pro tvarování, na kterém novější verze staví cestu vykreslování, a načítá se líně, takže platformy bez Uniscribe si jednoduše zachovají stávající vykreslování znak po znaku
Version 3.117.0
Přidáno
- Přidána introspekce profilu ICC:
GetOutputIntentICCInfoanalyzuje profil ICC připojený k vlastnosti OutputIntent dokumentu a hlásí jeho verzi, třídu zařízení, barevný prostor dat, prostor připojení profilu, záměr vykreslování a počet komponent — užitečné pro kontrolu podmínek tisku souborů PDF/A a PDF/X; zpracování barevného prostoru ICCBased v rendereru nyní také odvozuje počet komponent ze samotné hlavičky profilu, pokud barevný prostor stínování neobsahuje ani/Alternate, ani/N
Version 3.116.0
Přidáno
- Přidán režim extrakce textu zohledňující tabulky: parametr 10 u
GetPageTextshlukuje levé okraje textových bloků stránky do globálních pozic sloupců a vydává řádky oddělené tabulátory, takže rozvržení tabulek se extrahují jako soubory TSV připravené k importu, přičemž svisle zarovnané buňky zůstávají zarovnané napříč řádky
Version 3.115.0
Přidáno
- Přidáno vyřazování stránek:
ImposePagesNUprozloží každou stránku dokumentu na nové archy v mřížce n-up (2-up, 4-up, 9-up nebo libovolné uspořádání sloupců x řádků), přičemž každá stránka je přizpůsobena poměru stran a vystředěna ve své buňce jako živý vektorový obsah, nebo — pomocí možnosti brožury — vytváří archy sešitové vazby, jejichž párování stránek se při oboustranném tisku a stohování složí do brožury
Version 3.114.0
Přidáno
- Rozšířeny typové čtečky akcí
GetAnnotActionInfoaGetOutlineActionInfoo čtyři další druhy akcí — Hide (s počtem skrytých cílů a příznakem skrytí/zobrazení), SubmitForm (URL adresa odeslání a počet polí), ResetForm (počet polí) a ImportData (zdrojový soubor) — a o zobrazení datového zatížení akcí Named (např.NextPage); obě čtečky nyní sdílejí jeden syntaktický analyzátor, takže odkazy na anotace a záložky hlásí stejné informace
Version 3.113.0
Přidáno
- Přidáni pomocníci pro formátování polí formuláře:
SetFormFieldNumberFormat(desetinná místa, styl oddělovače, styl záporných hodnot a umístění měny),SetFormFieldPercentFormataSetFormFieldDateFormat(řetězce masky data aplikace Acrobat, jako např.mm/dd/yyyy), z nichž každý zapisuje standardní formátovací páry JavaScriptu aplikace Acrobat do dalších akcí pole — filtr stisku klávesy plus formátovač zobrazení — takže kompatibilní prohlížeče ověřují vstup a vykreslují formátované hodnoty bez ručně psaného JavaScriptu
Version 3.112.0
Přidáno
- Přidáno vytváření zvukové anotace:
AddSoundAnnotationFromFilepřečte nekomprimovaný soubor PCM WAV (8 nebo 16 bitů, mono nebo stereo) a vloží jeho ukázky pod anotaci s ikonou reproduktoru jako proud/Soundse znaménkovým kódováním, jak to očekává zvukový mechanismus PDF, čímž se s existujícími čtečkamiGetAnnotSoundToFile/GetAnnotSoundToStringdokončí zpětná kompatibilita
Version 3.111.0
Přidáno
- Přidány zřetězené odpovědi na anotace (ISO 32000-1 §12.5.6.3):
AddAnnotationReplypřipojí odpověď k libovolné existující anotaci jako skrytou textovou anotaci, jejíž/IRTodkazuje na cíl pomocí relace odpovědi/RT, takže ji Acrobat a další prohlížeče zobrazí jako vlákno pod cílem na panelu komentářů; v kombinaci sAddAnnotationStatea výměnou komentářů FDF získáte kompletní cykly společných recenzí
Version 3.110.0
Přidáno
- Přidáno vykreslování stínování na bázi sítě a funkcí, čímž je dokončeno pokrytí všech sedmi typů stínování PDF: volně tvarované Gouraudovy trojúhelníkové sítě (typ 4), mřížkovité Gouraudovy sítě (typ 5), sítě Coonsových záplat (typ 6) a sítě záplat na bázi tenzorových produktů (typ 7) jsou dekódovány z jejich bitově sbalených datových proudů — včetně sdílených hran příznaků záplat, mapování hodnot
/Decodea volitelných barevných přechodů/Function— a vykresleny pomocí nativních přechodů sítě enginu Cairo; stínování na bázi funkcí (typ 1) jsou aproximována vzorkováním stínovací funkce v jejím definičním oboru do jemné sítě záplat; podporované barevné prostory zahrnují alternativy DeviceRGB, DeviceGray, DeviceCMYK a ICCBased (engine GDI+ nemá primitivum přechodové sítě a zanechává oblasti stínované sítí nevykreslené)
Version 3.109.0
Přidáno
- Dokončen rámec pro úpravu obsahu (fáze 4) o úpravy na úrovni textu:
TPDFContentProgram.GetTextRunsprovede výčet instrukcí stránky zobrazujících text se zdrojem písma a velikostí aktivní u každé z nich (sledování stavu písma prostřednictvím vnoření ukládání/obnovení), aReplaceTextRunprohodí zobrazený text na místě — skutečná náhrada toku obsahu, která zachovává původní polohu, písmo a barvu, na rozdíl od přístupů založených na překrytí, které maskují starý text a překreslují jej přes něj
Version 3.108.0
Přidáno
- Přidán objektový model pro geometrii stránky do rámce pro úpravu obsahu (fáze 3):
TPDFContentProgram.LiftPathpovýší objekt cesty (konstrukční operátory přesunout/čára/křivka/obdélník plus operátory oříznutí a malování, které jej ukončují) do upravitelnéhoTPDFPathz podcest a segmentů;TPDFPath.Transformaplikuje afinní matici na každý bod (přesunutí, změna velikosti, otočení nebo zkosení existující kresby);LowerPathzapisuje upravenou geometrii zpět na původní instrukce, připraveno proWritePageContentLayer
Version 3.107.0
Přidáno
- Rozšířen rámec pro úpravu obsahu (fáze 2) o vymoženosti na úrovni instrukcí pro
TPDFContentProgram:InsertFromSourceanalyzuje úryvek obsahu a zapojí jeho instrukce na libovolnou pozici;SetOperandpřepíše jeden operand ze syntaxe zdroje (přečísluje souřadnici, přebarví výplň);OperandTextnačte operand zpět;InstructionGroup,FindNextOpaFindNextGroupprocházejí seznam instrukcí podle operátoru nebo podle kategorie operátorů ISO 32000-1
Version 3.106.0
Přidáno
- Přidána první fáze rámce pro strukturované úpravy obsahu:
ParsePageContentLayerdekóduje vrstvu obsahu stránky do upravitelného programuTPDFContentProgram— seznamu instrukcí, z nichž každý představuje operátor obsahu PDF (všech 73 operátorů normy ISO 32000-1, tabulky 51) s dekódovanými objekty operandů — aWritePageContentLayerserializuje program zpět na stránku, takže volající programy mohou parsovat, kontrolovat, odstraňovat nebo měnit pořadí instrukcí pro kreslení a přepisovat stránku;GetPageContentLayerCountudává počet vrstev obsahu, které se upravují nezávisle na sobě; emitor zachovává chování (neupravený výsledek je pro zpětnou analýzu identický do posledního pixelu), neznámé operátory zůstanou beze změny a vložené obrazy se přenesou doslovně
Version 3.105.0
Přidáno
- Přidán režim extrakce textu v pořadí čtení: u parametru 9 pro
GetPageTextse vrací text na stránce ve vizuálním pořadí pro čtení pomocí rekurzivní analýzy bílých znaků (přerušení po ose X a Y), takže u vícesloupcového rozvržení se provádí extrakce po sloupcích — nejprve celé záhlaví, poté celý levý sloupec, pak pravý sloupec — a nedochází k provázání sloupců z řádku na řádek, jako to dělá geometrické uspořádání typu zhora-doleva
Version 3.104.0
Přidáno
- Ověřování podpisu bylo doplněno o introspekci osvědčení signatáře:
GetSignerCertificatedekóduje užitečné zatížení PKCS#7 u prvního pole podpisu a vrátí typizovaný souhrn o vloženém osvědčení signatáře — názvy zobrazení subjektu a vydavatele, sériové číslo ve standardním šestnáctkovém tvaru, období platnosti v UTC (NotBefore/NotAfter) a příznak užitečnosti uvádějící, zda se osvědčení aktuálně nachází v tomto okně; signatář je párován se zabudovanými osvědčeními vydavatele a sériovým číslem
Version 3.103.0
Přidáno
- Přidáno
NewRGBRadialShader, radiální protějšek kNewRGBAxialShader: registruje pojmenovaný radiální přechod o dvou kruzích (ShadingType 3, ISO 32000-1 §8.7.4.5.3) splývající mezi dvěma RGB barvami s případným rozšiřujícím probarvováním i mimo tyto kruhy; zvolte tuto možnost pod existujícímSetFillShader,SetLineShaderneboSetTextShaderpro malování výplní, tahů nebo textu ve tvaru kruhové „záře“
Version 3.102.0
Přidáno
- Přidáno radiální (ShadingType 3) vykreslování přechodů (ISO 32000-1 §8.7.4.5.4): renderer stránky nyní kromě již dříve podporovaných axiálních přechodů (ShadingType 2) maluje dvousměrné radiální stínování, a to s ohledem na operátory typu
sha vzorce stínování k výplni barev; podpora poskytována rastrovými enginy GDI+ a Cairo s nastavením multizastávkové barvy s rozsahem podporovaných prostředí typu DeviceRGB/DeviceCMYK/DeviceN/Separation/ICCBased a zacházení přes/Extend
Version 3.101.0
Přidáno
- Přidány efekty oblačných rámečků (ISO 32000-1 §12.5.4):
SetAnnotCloudyEffectobrací orámování k objektům Square, Circle, Polygon nebo k anotacím typu FreeText jako uspořádání k formátu „revision cloud“ plného napojených půlkruhů zápisem do adresáře efektu k okraji/BE, při nastavení sytosti 1 nebo 2 (ekvivalent pro nastavení stylů „Cloudy“ v aplikaci Acrobat) anebo lze odstranit přes hodnotu 0;GetAnnotCloudyEffectčte provedené nastavení opět (0 = žádné obláčky, v opačném případě 1..2 na škále intenzity)
Version 3.100.0
Přidáno
- Přidány stavy kontroly anotací (ISO 32000-1 §12.5.6.3):
AddAnnotationStatezaznamenává stav změny k prověřované existující anotaci tím, že se připojuje skrytá textová poznámka, jejíž nastavení na straně/IRTukazuje ke sledovanému cíli a u které zápisy/State+/StateModeluchovávají tyto provedené stavy, to vše se zachováním podpory pro model s vlastnostíReview(None/Accepted/Rejected/Cancelled/Completed) a pro model s nastavením naMarked(Unmarked/Marked), které má uplatnění při postupu „comment-review“ v aplikaci Acrobat; vlastnostiGetAnnotStateaGetAnnotStateModelna základě příkazových řetězců přečtou daný údaj zpětně i pro jakoukoli jinou anotaci (když je údaj nevyplněn, zapíše se coby empty)
Opraveno
- Opravena chyba v době načítání, kvůli které se spouštěly aplikace postavené z nejnovějších verzí softwarových aplikací (vyhledávání certifikačních jmen k aplikaci Windows narazilo na vstupní bod, jenž už dál nevedl k nastavení pro DLL knihovny) a rovněž byly opraveny vývojové regrese týkající se importu dat do prostředí komentářů FDF formátu, u otočení a rozsahu přes stránku a ke kořenovým směrům certifikačních příznaků
Version 3.99.0
Přidáno
- Přidány API pro čtení otisku dokumentu a přechodů:
GetDocumentFileIDvrací trvalý identifikátor dokumentu z pole/IDv traileru (první prvek zakódovaný v hexadecimálním formátu), což je užitečné jako stabilní klíč mezipaměti nebo otisk dokumentu;GetPageTransitionje čtecí protějšek funkceSetPageTransition, který vrací styl přechodu jako typovou hodnotuTPDFlibPageTransitionplus dobu zobrazení a dobu přechodu pomocí zpětného mapování uložených položek/Trans/S,/Dma/M
Version 3.98.0
Přidáno
- Přidáno otáčení rozsahu stránek a introspekce miniatur:
RotatePageRangeaplikuje rotaci 0/90/180/270 na každou stránku v rozsahu (obaluje stávající jednostránkovou funkciRotatePage, takže volající již nepotřebují smyčku pro každou stránku);HasPageThumbnailhlásí, zda stránka obsahuje položku/Thumb;GetPageThumbnailInfočte šířku, výšku a počet bitů na komponentu miniatury (image XObject)
Version 3.97.0
Přidáno
- Přidány funkce pro čtení rozšířených vlastností anotací:
GetAnnotColorčte pole barev/C(0..1 RGB, s příznakem HasColor odlišujícím „žádnou explicitní barvu“ od „explicitní černé“);GetAnnotBorderWidthčte/BS /Ws případným přechodem na starší pole/Border;GetAnnotOpacityčte alfakanál tahu z/CA(výchozí 1.0);GetAnnotCreationDatečte časové razítko z/CreationDate;GetAnnotFlagsčte bajt příznaků viditelnosti/tisku z/F
Version 3.96.0
Přidáno
- Přidány API pro bezpečnostní introspekci na straně čtení:
IsEncryptedhlásí, zda načtený dokument obsahuje slovník/Encrypt;GetEncryptionLevelvrací typovou sílu (0=žádná, 1=RC4-40, 2=RC4-128, 3=AES-128, 4=AES-256, 5=AES-256 Acrobat X) odpovídající možnostem šifrování na straně zápisu;GetUserPermissionsvrací surové slovo oprávnění z/Ppro přímé testování bitů;IsOwnerPasswordhlásí, zda byl dokument otevřen pomocí oprávnění vlastníka
Version 3.95.0
Přidáno
- Přidán pokročilý tisk a nahrazování textu:
PrintDocumentAdvancedřídí celý tiskový DEVMODE (oboustranný tisk, orientace, barva, kvalita tisku, velikost papíru, zásobník papíru) nad rámec kopií/řazení prostřednictvím typového záznamuTPDFlibPrintSettings, přičemž aplikuje každé nestandardní pole prostřednictvím stávajícího mechanismu vlastního tiskového profilu;SearchAndReplaceTextprovádí vyhledávání napříč rozsahem stránek a u každé shody zamaskuje původní textový blok neprůhledným bílým obdélníkem a překreslí nahrazený text v počátku bloku pomocí písma vybraného volajícím, čímž napodobuje chování překrytí a nahrazení nástroje PDFtoolkit SearchAndReplace
Version 3.94.0
Přidáno
- Přidána výměna anotací přes FDF („Export/Import Comments“ v Acrobatu):
ExportAnnotationsToFDFStringaExportAnnotationsToFDFprocházejí pole/Annotsna každé stránce a serializují každou anotaci jako položku/Type /Annotuvnitř pole/AnnotsFDF formátu, přičemž přenášejí/Subtype,/Contents,/Rect, štítek autora/T,/Subja index/Page(počítaný od nuly);ImportAnnotationsFromFDFStringaImportAnnotationsFromFDFtakové FDF analyzují pomocí malého stavového automatu a znovu vytvoří každý záznam jako novou anotaci na odpovídající stránce, přičemž zachovávají úplný slovník anotace namísto jeho zredukování na obyčejnou poznámku
Version 3.93.0
Přidáno
- Přidány API pro certifikaci podpisů a vlastnosti polí formuláře:
SetSignProcessDocMDPmění další podpis vyprodukovaný podpisovým procesem na certifikační (autorský) podpis připojením transformace DocMDP/Referencena úrovni 1/2/3 (bez změn / vyplňování formulářů / anotace) a nastavením bitu AppendOnly v AcroForm/SigFlags;GetSigFlags/SetSigFlagspřímo čtou a zapisují surový bajt z AcroForm/SigFlags;GetFormFieldIsComb,GetFormFieldIsMultiLine,GetFormFieldJustificationaGetFormFieldAllowedValueszpřístupňují stylové bity/Ffpro jednotlivá pole, zarovnání textu/Qa pole možností/Optjako typové hodnoty
Version 3.92.0
Přidáno
- Přidány API pro pohodlný export příloh a správu polí formulářů:
SaveAllAttachmentsprochází sjednocený seznam příloh (anotace/EmbeddedFilesna úrovni dokumentu plus anotace/FileAttachmentpro jednotlivé stránky) a zapisuje každý datový proud do adresáře pod jeho názvem ze specifikace souboru, přičemž případné kolize řeší přidáním číselné přípony;RemoveFormFieldByNamepřevede plně kvalifikovaný název pole na jeho index a smaže jej;RenameFormFieldpřejmenuje pole podle názvu bez nutnosti samostatného zjišťování indexu
Version 3.91.0
Přidáno
- Přidány API pro výčet na úrovni celého dokumentu:
EnumDocumentFontsprochází každý slovník písem (Font dictionary, v případě potřeby nejdříve voláFindFonts) a vrací jeden objektTPDFlibDocumentFontpro každé písmo s jeho číslem objektu, názvem/BaseFont, typem, kódováním a stavem vložení/podmnožiny, čímž odstraňuje potřebu volatSelectFontpro každý záznam a dotazovat se přes skalární gettery;EnumAttachmentssjednocuje jmenný strom/EmbeddedFilesna úrovni dokumentu s anotacemi/FileAttachmentna jednotlivých stránkách do jediného seznamuTPDFlibAttachment, přičemž zaznamenává zdroj každého záznamu, index zdroje (počítaný od 1), název souboru, MIME podtyp, popis a velikost v bajtech
Version 3.90.0
Přidáno
- Přidány API pro introspekci anotací, záložek a verze dokumentu pouze pro čtení:
GetPDFVersionvrací efektivní řetězec verze PDF (např.1.7);GetAnnotType,GetAnnotTitle,GetAnnotSubject,GetAnnotContentsEx,GetAnnotModifiedDate,GetAnnotNameaGetAnnotRectExzpřístupňují pole jednotlivých anotací jako pojmenované obálky (takže volající již nepotřebují kouzelná čísla Tagů) nad existující mezipamětíAnalyseAnnot;GetOutlineLevelvrací hloubku záložky vzhledem ke kořeni obrysu aGetOutlineIsOpenhlásí, zda je rozšířena v prohlížeči (záporný/Countznamená sbalená), což odráží stav rozvržení, který by panel záložek vykreslil
Version 3.89.0
Přidáno
- Přidána jednotka kodéru obrázků JBIG2
PDFlibJBIG2Enc(TPLJBIG2Encoder.EncodeToByteArray), přenesená ze souvisejícího produktu HotPDF, se dvěma backendy: na Win64 je C++ aritmetický kodérjbig2enc(ITU-T T.88) staticky linkován přesPDFlibJBIG2EncC+HPDFCLibs(228 objektů leptonica/jbig2enc ve složcethirdparty/Win64x/) a registrován jako výchozí backend, což odpovídá produkční cestě HotPDF; na ostatních cílových platformách, nebo když jeUseExternalEncoderFalse, čistě Pascalová MMR záložní varianta zkomprimuje dvouúrovňové skenovací řádky kodérem CCITT G4 a zabalí je do hlaviček segmentů JBIG2 (page-info typ 48 + immediate generic-region typ 38) - Přidána jednotka LZW kodéru
PDFlibLZWEnc(TPLLZWEncoder.Compress), kodérový protějšek ke stávajícímu dekodéruPDFlibLZW: produkuje stream/LZWDecodepodle specifikace PDF s 9..12bitovými kódy s proměnnou šířkou, ClearCode/EOI a výchozí sémantikou PDF EarlyChange, a volitelně TIFF Predictor 2 (horizontální diferencování), takže obousměrný průchod dekodérem reprodukuje původní bajty
Version 3.88.0
Přidáno
- Přidána jednotka pro kódování dvouúrovňových obrázků CCITT Group 3 / Group 4 (T.6)
PDFlibCCITTEnc(TPLCCITTEncoder), kodérový protějšek k existujícímu dekodéruPDFlibCCITT: zakóduje bitmapupf1bitdo bajtového streamu CCITT G3 1D / G3 2D / G4 (T.6) pomocíCompressImage/Execute, přeneseno ze souvisejícího produktu HotPDF (oba sdílejí licenci losLab); tímto je poskytnut chybějící kodér, aby mohla být monochromatická obrazová data generována pro výstupCCITTFaxDecode, s tím, že plná integrace do obrazové pipeline a výstupu G4 zRenderPageToMonochromeFilebude následovat
Version 3.87.0
Přidáno
- Implementováno ověřování kryptografických podpisů pro oddělené podpisy PKCS#7:
TPDFlibSignatureVerifier.VerifySignature(dříve zástupná funkce vracejícívsUnknown) nyní přepočítává digest dokumentu přes dva segmenty/ByteRangea ověřuje jej proti podepsanému atributumessageDigesta veřejnému klíči podepisujícího prostřednictvím Windows CryptoAPI (CryptVerifyDetachedMessageSignature), přičemž vracívsValid/vsInvalidpro subfiltryadbe.pkcs7.detachedaETSI.CAdES.detached; toto je první vrstva ověřování a pokrývá pouze integritu digestu+podpisu (řetězec certifikátů, revokace CRL/OCSP a ověření časového razítka podle RFC 3161 zůstávají mimo rozsah a budou přidány v pozdějších vrstvách)
Version 3.86.0
Přidáno
- Přidán callback pro jednotlivé záložky během slučování: událost
OnMergeOutlinese spouští pro každou kořenovou zdrojovou záložku, zatímcoMergeFileList/MergeFileListFast/MergeFileListStrictpropojují sloučený strom záložek, což umožňuje volajícímu přejmenovat (Title) nebo zahodit (Skip=True) příchozí záložku předtím, než skončí v cílovém dokumentu; callback dostává index zdrojového dokumentu (počítáno od nuly), aby volající mohli uplatňovat pravidla pro jednotlivé dokumenty
Version 3.85.0
Přidáno
- Přidáno podepisování ze systémového úložiště certifikátů Windows:
SetSignProcessCertFromStorevyhledá podepisovací certifikát z pojmenovaného úložiště ("MY"/"Root"/...) podle jednoduchého zobrazovaného názvu subjektu (obvykle CN, porovnáváno bez rozlišení velikosti písmen; prázdný název vybere první certifikát s privátním klíčem) a znovu použije stávající pipeline pro podpis PKCS#7, takže dokument může být podepsán bez dodání souboru.pfx/.p12; použijte spolu sSetSignProcessKeysetk výběru meziCURRENT_USER(1) aLOCAL_MACHINE(2)
Version 3.84.0
Přidáno
- Přidáno vkládání programů písem pro již načtené dokumenty:
EmbedMissingFontsprochází každý slovník písma (Font dictionary), čte odpovídající nainstalovaný systémový program písma podle názvu BaseFont a zapisuje zpětFontFile2neboFontFile3, přičemž vrací počet písem, která získala program;EmbedFontProgramvkládá jedno písmo podle názvu s použitím nainstalovaného systémového písma;EmbedFontProgramFromFilevkládá jedno písmo pomocí volajícím dodaného souboru.ttfnebo.otfpro písma, která nejsou nainstalována v systému - Přidáno
SetEmbedAllFonts, ochranný mechanismus na straně zápisu, který povyšujeAddTrueTypeFontEmbed=0naEmbed=1, takže nově vytvořené dokumenty nemohou náhodně odkazovat na nevložená systémová písma ani mimo režim PDF/A
Version 3.83.0
Přidáno
- Přidány pomocné API pro vykreslování:
RenderPageToMonochromeFilevykresluje stránku do 1bitové monochromatické bitmapy (pro fax/archivaci/OCR scénáře) s degradací z 24bitů přes GDI polotónový dithering, bez úprav jádra vykreslování;RenderPageRegionToFilevykresluje do bitmapy pouze určený podřízený obdélník stránky (“Left,Top,Width,Height”), čímž zapojuje dříve odpojenou Clip pipeline funkceRenderPageToDCClip
Version 3.82.0
Přidáno
- Přidán export dat formuláře FDF:
ExportFormDataToFDFzapisuje všechny názvy polí formuláře a hodnoty z aktuálního dokumentu do samostatného souboru FDF (pole/Fieldsobalené v%FDF-1.2),ExportFormDataToFDFStringvrací řetězec se stejnou strukturou pro snazší oddělené uložení nebo následné sloučení dat formuláře z PDF; ne-ASCII bajty jsou escapovány trojmístně osmičkově podle ISO 32000-1
Version 3.81.0
Přidáno
- Přidány pomocné API pro stránky a strukturu:
SetPageTransitionzapisuje efekt přechodu prezentace (17 standardních přechodů v/Trans, včetně Split/Blinds/Wipe/Dissolve/Glitter atd.) a dobu zobrazení stránky pro specifikovanou stránku;GetPageFontCount,GetPageFontIDvypisují písma odkazovaná specifikovanou stránkou;SetMeasurementUnitpřijímá typový výčet měrných jednotek (přidává twips a points k původním pixelům/milimetrům/palcům) a je doprovázen pomocníky pro převod jednotekConvertToPoints,ConvertFromPoints;SaveToFileOptionsagreguje volby ukládání, jako jsou komprese, linearizace a zachování data modifikace, do jediného záznamu
Version 3.80.0
Přidáno
- Přidány pomocné API pro bezpečnost a podpisy:
EncryptFileExpřijímá typové pojmenované sady oprávnění (TPDFlibUserPermissions, rozlišující 8 pojmenovaných bitů oprávnění jako je nízké a vysoké rozlišení tisku) místo surových celých čísel bitů oprávnění;TPDFlibSignatureVerifier.GetSignatureMetadatačte název pole, Filter, SubFilter, čas podpisu, důvod, místo, kontaktní informace, podepisujícího a kontroluje strukturu ByteRange přímo ze slovníku podpisu bez potřeby dekódování PKCS#7;PrintDocumentExspecifikuje počet kopií k tisku a způsob řazení v jednom volání
Version 3.79.0
Přidáno
- Přidány pomocné API pro úpravy:
MaskRectkreslí neprůhledný vyplněný obdélník na specifikované stránce k zakrytí oblasti (maskování/redigování);SetPageThumbnailFromFilepřipojí/Thumbstránky přímo ze souboru obrázku bez znečištění stavu vykreslování content streamu;FlattenFormFieldsOnPageRangezploští všechna pole formuláře (vzhled se zapeče do statického obsahu a odstraní se aktivní pole) podle rozsahu stránek;InsertAnnotationvloží předem vytvořený slovník anotace na určené místo;NewMarkupAnnotationv jednom kroku vytvoří anotace zvýraznění/přeškrtnutí/podtržení/vlnovky a zapíše body quad, barvu a průhlednost;StampText,StampImagepřidávají vodoznaky na základě rozsahu stránek s podporou průhlednosti, úhlu rotace a pořadí překrývání
Version 3.78.0
Přidáno
- Přidány API pro vyhledávání textu a výčet elementů na stránce:
SearchTextvyhledá zadaný dotaz ve specifikovaném rozsahu stránek a vrátí číslo stránky a ohraničující obdélník každé shody s podporou voleb rozlišování malých/velkých písmen a celých slov;EnumPageElementsvyjmenuje všechny textové bloky a vložené obrázky na určené stránce, jednotně vrací typ elementu, obdélník, text, název písma a ID obrázku;GetTextInAreaExje verze funkceGetTextInAreas obdélníky, která vrací každý textový blok a jeho ohraničující obdélník v dané oblasti
Version 3.77.0
Přidáno
- Přidány read-only inspekční API, které doplňují předchozí asymetrii “lze zapsat, nelze přečíst”:
FindOutlineByTitlehledá záložky podle nadpisu (podporuje 3 hloubky: jen sourozenci/jen děti/celý podstrom),GetOutlineActionInfoaGetAnnotActionInfovrací typ akce záložky nebo anotace (GoTo/GoToR/URI/Launch/Named/JavaScript) a její URI, JavaScript nebo název souboru ve formě typové struktury,GetOutlineDestinationInfovrací cílovou stránku a typ Fit (XYZ/Fit/FitH/FitV/FitR/FitB/FitBH/FitBV) spolu se souřadnicemi,EnumSignatures,GetSignatureFieldCount,GetSignatureFieldInfovyjmenovávají pole podpisů a hlásí, zda jsou podepsána
Version 3.76.3
Změněno
- Profil Factur-X EXTENDED v demu E-Invoice nyní používá standardní hodnotu conformance a standardní guideline ID a faktura ZUGFeRD 1.0 přidává součtové elementy
ChargeTotalAmountaAllowanceTotalAmount; všech 6 profilů nyní produkuje výstup PDF/A-3b a PDF/A-3u, který projde jak validátorem veraPDF (shoda s PDF/A), tak nástrojem Mustang (obchodní pravidla pro elektronické faktury)
Version 3.76.2
Opraveno
- Metadata XMP hybridních faktur Factur-X/ZUGFeRD nyní deklarují schéma rozšíření PDF/A (
pdfaExtension:schemas) popisující vlastnosti fakturyfx:; dříve chybějící deklarace způsobovala, že vygenerované PDF/A-3 bylo validátory jako veraPDF hodnoceno jako nevyhovující
Změněno
- XML faktury v demu E-Invoice nyní obsahuje elektronické adresy prodávajícího a kupujícího a telefonní číslo prodávajícího, takže více profilů projde validací obchodních pravidel ZUGFeRD/Factur-X
- Katalog profilů, konstrukce XML a tok generování PDF/A-3 v demu E-Invoice byly vyčleněny do sdílené unit-y, kterou reused jak GUI, tak nový testovací nástroj externího validátoru
Version 3.76.1
Opraveno
- Opraveno padání dema E-Invoice při kliknutí na Generovat: vestavěné standardní fonty nejsou v režimu PDF/A k dispozici, proto demo nyní pro vykreslení stránky faktury vkládá TrueType font
Změněno
- Demo E-Invoice odstraňuje volbu PDF/A-3a (u elektronických faktur vzácná) a profil XRechnung používá nyní výchozí režim PDF/A-3u
Version 3.76.0
Změněno
- GUI dema E-Invoice je nyní řízeno daty: číslo faktury, datum vystavení, kupující a prodávající, čistá částka, sazba daně a měna jsou editovatelné a XML faktury přesně odpovídá viditelným částkám na stránce místo pevného zástupného obsahu
- Demo generuje strukturálně správné XML faktury podle profilu: Factur-X, XRechnung a ZUGFeRD 2.0 používají strukturu
CrossIndustryInvoice, zatímco ZUGFeRD 1.0 COMFORT používá vlastní strukturuCrossIndustryDocuments řádkovými položkami, daňovými součty a platebními podmínkami - Částky se do XML zapisují pevným anglickým formátem s desetinnou tečkou, aby lokalizované oddělovače tisíců nebo čárky nenarušily schéma, a uživatelský vstup je před zápisem escapován
- Demo přidává živý náhled XML, samo-kontroly obsahu na úrovni profilu, parsování stejně pojmenovaného externího validačního reportu
.validation.jsona při generování explicitně načítá sRGB ICC výstupní intent z repozitáře
Version 3.75.6
Přidáno
SetPDFAModepřidává režim7, který umožňuje metadata PDF/A-3u a nadále povoluje přidružené soubory PDF/A-3; ukázka GUI E-Invoice také nabízí volbu PDF/A-3u a profil ZUGFeRD 2.0 BASIC ve výchozím stavu používá PDF/A-3u
Version 3.75.5
Přidáno
- Přidává ukázku Delphi E-Invoice GUI, která umí zvolit profily Factur-X, ZUGFeRD a XRechnung, generovat hybridní faktury PDF/A-3, vložit odpovídající název XML souboru a guideline ID, spustit validaci kontejneru v rozhraní a zobrazit XMP informace faktury, validační problémy a extrahované XML
Version 3.75.4
Přidáno
- Přidává podporu přidružených souborů PDF/A-3 a XML elektronických faktur:
AddPDFA3AssociatedFileFromStringdokáže vytvářet přidružené soubory Catalog/AFpřímo z bajtů v paměti,AddFacturXAssociatedFileFromStringdokáže zapisovat XML Factur-X, ZUGFeRD a XRechnung, synchronizovat metadata XMP a validovat kombinaci názvu souboru, profilu, jmenného prostoru XMP a XML guideline ID, zatímco čtecí strana přidává APIs pro detekci, validaci, seznam problémů a extrakci XML
Version 3.75.3
Opraveno
- Funkce PDF merge: lokální proměnné
GlobalRootObjNum,GlobalRootGenNum,StructRootGlobalObjNumaStructRootGlobalGenNumse přiřazovaly jen uvnitř podmíněných bloků, což na kompilátorech Delphi Win64 26 a 29 (RAD Studio 12 a 16) vyvolávalo varování W1036 “variable might not be initialized”; na začátku funkce byla doplněna nulová inicializace
Version 3.75.2
Opraveno
- Kompatibilita mezi verzemi sestavení: smyčka
forv parseru hexadecimálních řetězců (PDFlibStruct) používala řídicí proměnnouInt64, kterou Delphi XE3/XE5 (kompilátory 26/27) odmítají jako neordinální; přepsáno na smyčkuWhile, aby byla obnovena kompatibilita s RAD Studio 12 a 14 - Kontrola Reference XObject (
PDFlibPDFUA): ukazatel na slovníkDnebyl inicializován ve větvi pro ne-stream / ne-slovník, což na všech cílech vyvolávalo nápovědu kompilátoru; větev byla přepracována tak, aby seDvždy přiřadilo před kontrolouAssigned - Obálka
CreateFontPackage(PDFlibFont): potlačeno chybné varování W1035 “return value might be undefined” v Delphi ≤ XE8 a zároveň se vyhnula doplňující nápovědě H2077 o mrtvém přiřazení v novějších kompilátorech pomocí ochrany{$IF CompilerVersion} - Zapisovač BMP DPI a cesta přírůstkového ukládání PDF: zastaralá volání
TStream.Seek(Longint, Word)byla nahrazena přiřazenímPosition :=(PDFlibPDFium,PDFlibDocument)
Version 3.75.1
Opraveno
- Parser vícestránkového TIFF: ochrana proti ukončení smyčky u příliš velkého počtu stránek byla neúčinná, protože
FPageCountbyl deklarován jakoWord(maximum 65 535), takže porovnání> 65535bylo vždy nepravdivé; změněno naInteger, aby se ochrana nyní spouštěla správně u poškozených souborů - Parser znakové sady CFF/Type 2 (Format 1 a Format 2): odstraněna mrtvá přiřazení
Done := True, která bezprostředně předcházelaBreaka nebyla tedy nikdy přečtena, čímž zmizely nápovědy kompilátoru
Version 3.75.0
Zabezpečení
- Zpevněno zpracování nedůvěryhodných vložených písem (TrueType, Type 1, CFF and CMap) proti zápisům mimo hranice, neomezené rekurzi charstringů a nadměrným alokacím paměti z poškozených dat písma
- Zpevněno dekódování obrazů (PNG, GIF, TIFF, JBIG2 and CCITT Group 3 and 4) proti čtením a zápisům mimo hranice, celočíselnému přetečení při výpočtech šířky a výšky a dereferencím prázdné palety z útočných obrázků
- Zpevněny stream filtry (LZW, ASCII85 and Flate predictors) proti čtení za koncem bufferu, dělení nulou a neukončitelným smyčkám nad záměrně upravenými stream daty
- Zpevněno zpracování křížových odkazů, obnovení dokumentu a jmenných stromů proti přístupu mimo hranice a nekonečným smyčkám způsobeným poškozenými nebo kruhovými daty křížových odkazů
- Dešifrování AES-CBC nyní ověřuje zarovnání bloků ciphertextu a nulově inicializuje svůj výstupní buffer, čímž zabraňuje úniku neinicializované paměti haldy do dešifrovaných řetězců a streamů
Opraveno
- Otisky oddělených podpisů SHA-256, SHA-384 a SHA-512 jsou nyní vytvářeny se správným kryptografickým poskytovatelem; dříve vracely prázdný otisk a vedly k neplatným podpisům
- Dekódování ASCII85 a RC4 už nevrací neinicializovaná data ani nevyvolává výjimku při zkráceném vstupu nebo prázdném klíči
- Barva pozadí GIF se nyní čte se správným modrým kanálem místo duplicitního zeleného kanálu
Version 3.74.1
Opraveno
- Opraven chybový stav E2010 incompatible-types v podpoře validačních dat podpisu PAdES (VRI), který bránil kompilaci knihovny
- Odstraněno poslední varování kompilátoru a nápovědy o nepoužitých proměnných; všechny trial i release buildy knihovny pro Win32 i Win64 se nyní překládají bez upozornění
Version 3.74.0
Přidáno
- Přímé souborové cesty
EncryptFileaDecryptFilenyní čtou PDF, jejichž data křížových odkazů leží v cross-reference streamech, včetně inkrementálně aktualizovaných řetězců a souborů hybrid-reference se vedlejší sekcí/XRefStm, místo aby přecházely na pomalejší plný reader: ochrana AES-256 u 1.25 GB referenčního dokumentu klesla zhruba z 4.4 na 2.5 sekundy a dešifrování ze zhruba 1.7 na 1.3 sekundy - Přepisy nesoucí objekty uložené v komprimovaných object streamech nyní vypisují trailer cross-reference streamu, takže tyto objekty zůstávají adresovatelné v šifrovaném i dešifrovaném výstupu
Opraveno
- Revize bez dokumentového
/IDv inkrementálně aktualizovaném souboru už při přímém přepisu nemaže identifikátor zděděný z dřívější revize
Version 3.73.2
Změněno
DASaveAsFilenyní agreguje své výstupní zápisy a hledá uzavírací klíčové slovo každého objektu bez alokací řetězců v jednotlivých krocích, čímž zkracuje přepis 2 GB referenčního dokumentu s více než milionem objektů zhruba z 57 na 11 sekund
Version 3.73.1
Změněno
- Přímé souborové cesty
EncryptFileaDecryptFilenyní čtou zdroj přes posuvné okno a agregují výstupní zápisy, takže ochrana AES-256 u velmi velkých PDF s miliony objektů běží několikanásobně rychleji: na 2 GB referenčním dokumentu kleslo šifrování zhruba z 123 na 32 sekund a dešifrování zhruba z 127 na 23 sekund - Těla objektů, která se vejdou do čtecího okna, se při přímém přepisu AES-256 už nenačítají z disku dvakrát
Opraveno
- Přímé přepisy AES-256 u PDF typu hybrid-reference (souborů nesoucích položku traileru
/XRefStm) nyní přecházejí na plný reader místo toho, aby riskovaly ztrátu komprimovaných objektů - Zpracování cross-reference v přímé souborové cestě už nenačítá najednou vše od sekce cross-reference až do konce souboru, což mohlo vyčerpat paměť u vícenásobně gigabajtových souborů, jejichž řetězec
/Prevmíří blízko začátku souboru, a poškozený řetězec/Prevnyní přechází na plný reader místo toho, aby vytvářel neúplný dokument
Version 3.73.0
Přidáno
- Demo SigningWorkbench nyní provádí úplné kryptografické ověření otisku oddělených CMS podpisů (
adbe.pkcs7.detachedaETSI.CAdES.detached) přes Windows CryptoAPI: podepsané rozsahy bajtů se znovu hashují a porovnávají s CMS podpisem, změněný dokument je hlášen novým chybovým kódem SG203 a každý podpis nese v reportech JSON, CSV a HTML tříhodnotové poledigestValid - Nové automatizační přepínače SigningWorkbench:
--quietvypíše jen souhrn dávky a cesty k reportům,--fail-fastzastaví dávku při prvním chybujícím souboru a JSON report nyní zaznamenává verzi knihovny
Version 3.72.0
Přidáno
- Demo ComplianceWorkbench získává profesionální dávkové pracovní postupy:
--policy-filenačítá auditní zásady z JSON souboru, aby týmy mohly verzovat a sdílet svá pravidla pro dokumenty,--baselineporovnává běh s dřívějším compliance-report.json a vypisuje nové chyby, opravené soubory a soubory, které dál selhávají, a--preflight-detailsvkládá řádky problémů preflightu do reportů JSON a HTML - Nové automatizační přepínače ComplianceWorkbench:
--quietvypíše jen souhrn dávky a cesty k reportům,--fail-fastzastaví dávku při prvním chybujícím souboru a JSON report nyní zaznamenává verzi knihovny
Version 3.71.2
Opraveno
AppendToFileznovu připojuje inkrementální aktualizace ke stejnému PDF souboru, který byl načten pomocíLoadFromFile; streamovací načítání nyní ponechává zdrojový soubor čitelný, aniž by blokovalo zápisový handle potřebný pro aktualizaci
Version 3.71.1
Přidáno
- Reporty ComplianceWorkbench a SigningWorkbench nyní zahrnují štítky závažnosti nálezů, pole s nejvyšší závažností pro každý soubor, souhrny četnosti závažností v dávce a odpovídající výstup JSON, CSV, HTML i konzole pro rychlejší třídění zásad
Version 3.71.0
Přidáno
- Kontrola demo SigningWorkbench nyní hlásí pořadí revizí a úroveň certifikace DocMDP každého podpisu, označuje slabé algoritmy podpisu certifikátu MD5/SHA-1 a starý SubFilter adbe.pkcs7.sha1 pomocí
--forbid-weak-digest(SG303/SG405), samopodepsané certifikáty pomocí--forbid-self-signed(SG406), dokumenty bez certifikačního podpisu pomocí--require-certified(SG304) a vždy ověřuje, zda čas podpisu leží v období platnosti certifikátu (SG407) - Režim podepisování SigningWorkbench nyní používá API procesu podpisu s novými přepínači
--subfilter(sha1, detached nebo cades pro základní podpisy PAdES) a--digest(auto až po sha512), a moderníadbe.pkcs7.detachedse SHA-256 je nová výchozí volba podepisování - Nový read-side accessor
TPDFlibSignDoc.GetSignatureDocMDPLevelByNamevrací úroveň certifikace DocMDP pole podpisu podle ISO 32000-1 §12.8.2.2
Version 3.70.0
Přidáno
- Demo ComplianceWorkbench nyní navíc vynucuje zásady oprávnění, metadat a velikosti:
--require-print-alloweda--require-copy-allowedkontrolují bity oprávnění dokumentu (PC205/PC206),--require-authora--require-creation-datekontrolují úplnost metadat (PC306/PC307) a--max-pagesa--max-file-sizeomezují rozsah dokumentu (PC308/PC309) - Profil archive nyní také vyžaduje autora a datum vytvoření a profil accessible vyžaduje oprávnění ke kopírování, na které spoléhá asistivní technologie
- Reporty ComplianceWorkbench nyní agregují souhrn četnosti chybových kódů napříč dávkou a metriky po souborech zahrnují autora, datum vytvoření, velikost souboru a stavy oprávnění k tisku a kopírování
Version 3.69.1
Opraveno
DecryptFileznovu odstraňuje šifrování z dokumentů chráněných AES-128 a RC4, včetně dokumentů, které nesou pouze vlastnické heslo; od v3.67.4 rychlá cesta pro velké soubory tyto dokumenty chybně hlásila jako dokumenty s nesprávným heslem (error 404) místo toho, aby je předala běžné dešifrovací cestě, zatímco dokumentů AES-256 se to netýkalo
Version 3.69.0
Přidáno
- Nové demo SigningWorkbench Delphi: konzolový nástroj pro práci s podpisy a certifikáty, který kontroluje pole podpisů jednoho PDF nebo celého adresáře (SubFilter, čas podpisu, pokrytí ByteRange a podpisový certifikát s kontrolou expirace), dávkově podepisuje PDF certifikátem PKCS #12 a prověřuje soubory PFX; každé porušení se mapuje na stabilní chybový kód zásady (SG101–SG501) a výsledky se zapisují jako reporty JSON, CSV a HTML s lokalizovanými průvodci demo pro všech 18 dokumentačních jazyků
- Nové read-side přístupové metody pro čtení podpisů v
TPDFlibSignDoc:GetSignatureFieldNamesvypisuje pole podpisů dokumentu,GetSignatureTextValueByNamevrací položky /M signing time, /Name, /Reason, /Location, /ContactInfo a /Type (s dešifrováním u šifrovaných dokumentů) aGetSignatureValueByNamevrací /Filter, /SubFilter, /Contents a položky ByteRange podle názvu pole
Opraveno
- Opraven import Windows CryptoAPI pro
CertCloseStore, který byl deklarován bez parametruflagsa mohl při uzavření úložiště certifikátů poškodit zásobník volajícího na Win32
Version 3.68.0
Přidáno
- Nové demo ComplianceWorkbench Delphi: konzolový nástroj pro dávkovou kontrolu zásad, který ověřuje jedno PDF nebo celý adresář podle konfigurovatelné zásady shody pokrývající preflight PDF/A a PDF/UA, pravidla šifrování, rozsah verzí PDF, Tagged PDF, linearizaci a název dokumentu, každé porušení hlásí jako stabilní chybový kód zásady (PC101–PC501) a zapisuje reporty JSON, CSV a HTML s automatizačně přívětivými návratovými kódy
- Nové demo nabízí profily zásad, které balí běžné sady požadavků—archive, accessible, secure a web—s explicitními přepínači příkazové řádky přepisujícími hodnoty profilu, a obsahuje lokalizované průvodce demo pro všech 18 dokumentačních jazyků
Version 3.67.4
Změněno
EncryptFileaDecryptFilenyní používají přímou cestu přepisu AES-256 pro velké PDF s klasickým xref, přenášejí šifrovaná data mezi soubory proudově místo načítání a znovu serializace každého objektu; 2 GB referenční soubor nyní dokončí šifrování i dešifrování AES-256 ze souboru do souboru přes Direct File API s výsledným kódem 1 aLastErrorCode0
Opraveno
- Opraveno zacházení s tokeny řetězců při přímém přepisu AES-256, aby se oddělovače slovníku neměnily za hexadecimální řetězce a šifrované prázdné řetězce se dešifrovaly správně
Version 3.67.3
Změněno
- Rozšířena dema Delphi a C++Builder pro DrawShapes, CreateWithImage, CreateTable, EditFormField a EmbeddedFonts tak, aby jejich generovaná PDF nyní ukazovala praktické workflow kreslení, umisťování obrázků, rozvržení tabulek, stylování polí formuláře a porovnání vkládání písem místo minimálního jednorázového výstupu
Opraveno
- Opraveno demo CreateTable tak, aby před vykreslením tabulky nastavovalo explicitní velikost stránky A4, čímž se vyhnulo předchozí neinicializované proměnné velikosti stránky v ukázce Delphi
Version 3.67.2
Opraveno
- Byla opravena regrese z líné detekce na straně načítače zavedené ve v3.67.0: detekce vlastností obsahu se mohla spustit při ukládání a přepsat výslovně požadovanou verzi ukládání (SetInformation 0) nebo zamčenou verzi (LockSaveVersion), takže přísné uložení do nižší verze už neodmítalo obsah vyšší verze a zamčená verze se mohla posunout výš; detekce nyní běží před jakýmkoli výslovným nastavením verze a nikdy neběží pro dokumenty, které byly vytvořeny a ne načteny, čímž se obnovuje chování řízení verzí před v3.67.0 a zároveň se zachovávají úspory z líného načítání
Version 3.67.1
Změněno
- Detekce vlastností nyní čte stream objekty pomocí mělkého parsování, které zkoumá jen slovník objektu a přeskočí tělo streamu, protože sken nikdy neprochází obsah streamu; u dokumentů s velkými obrazovými streamy se tak během detekce nečtou bajty těla, což zkracuje čas čtení objektů při detekčním průchodu zhruba o 40% (asi 13 s místo 20 s u 2 GB souboru s 1,6 milionu objektů), přičemž zjištěný seznam vlastností i efektivní verze PDF zůstávají stejné
Version 3.67.0
Změněno
- Detekce vlastností obsahu na straně načítače je nyní líná – místo skenování celého dokumentu při načítání se spouští při prvním použití, když se dotazuje na efektivní verzi PDF nebo zjištěný seznam vlastností, nebo při uložení dokumentu; čtení jen pro čtení, jako je počet stránek, extrakce textu či obrázků a vykreslování, které se na verzi nikdy neptají ani dokument znovu neukládají, přeskočí sken úplně, čímž se doba načítání velmi velkých dokumentů zkrátí zhruba o 80% (asi 10 s místo 56 s u 2 GB souboru s 1,6 milionu objektů), přičemž zjištěná sada vlastností i efektivní verze PDF zůstávají po spuštění detekce stejné
Version 3.66.1
Změněno
- Načítání velmi velkých vícestránkových dokumentů je nyní výrazně rychlejší: detekce vlastností obsahu na straně načítače přeskočí kontroly pravidel, které už nemohou změnit výsledek – tedy jak pravidla, která už odpovídala, tak pravidla, která se na daný objekt nemohou vztáhnout – což zhruba na polovinu zkracuje dobu načítání u obrovských souborů při zachování totožných zjištěných vlastností i efektivní verze PDF
Version 3.66.0
Změněno
- Načítání velmi velkých vícestránkových dokumentů nyní spotřebuje výrazně méně špičkové paměti. Detekce vlastností obsahu na straně načítače už nenatahuje celý model objektů najednou – prochází random-access reader po jednom objektu – čímž snižuje špičkovou pracovní sadu zhruba o 90 % u obrovských souborů při zachování totožných zjištěných vlastností i efektivní verze PDF
Version 3.65.0
Přidáno
- Dokumenty větší než 2 GB lze nyní otevírat. Předchozí paměťový buffer, který omezoval velikost dokumentu asi na 2 GB, byl odstraněn
- Načítání PDF ze souboru nyní čte data objektů podle potřeby ze zdroje místo toho, aby celý dokument bufferovalo v paměti, čímž výrazně snižuje špičkové využití paměti u velkých souborů
- Dokument načtený ze souboru ponechává tento soubor otevřený se sdíleným přístupem pro čtení, dokud není dokument zavřen nebo vymazán
- Zlepšena odolnost při načítání dokumentů, které obsahují úvodní bajty před hlavičkou %PDF-, a při zpracování poškozených dat cross-reference
Version 3.64.0
Změněno
- Operace Direct API nad velmi velkými nebo na objekty bohatými PDF – EncryptFile, DecryptFile a DASaveAsFile – jsou nyní výrazně rychlejší a už se nezasekávají. 2 GB dokument s asi 1,6 milionu objektů, který dříve nešlo dokončit, se nyní šifruje zhruba za minutu a doba zpracování škáluje s dokumentem téměř lineárně místo toho, aby se s růstem počtu objektů rozpadala
- Šifrování velkých dokumentů je výrazně rychlejší – operace, která dříve trvala mnoho minut, nyní končí za sekundy až zhruba za minutu – bez změny síly šifrování, kompatibility ciphertextu ani výstupu
Version 3.63.0
Opraveno
- Byla opravena pádová chyba procesu při načítání velkých PDF souborů, jejichž interní bajtové offsety překračují 32bitovou hranici (asi 2 GB); načítač nyní všude používá 64bitové offsety, takže soubory blížící se 2 GB se načítají spolehlivě a soubory na hranici 2 GB nebo za ní místo pádu korektně hlásí chybu načtení
Version 3.62.0
Změněno
- Šifrování a dešifrování AES-256-CBC nyní používá hardwarově akcelerovanou větev AES-NI i na 32bitovém Windows, nejen na 64bitovém, stále s automatickou čistě C záložní cestou na procesorech bez AES-NI. Ciphertext zůstává na všech platformách stejný
Version 3.61.0
Změněno
- Šifrování a dešifrování AES-256-CBC nyní používá hardwarově akcelerované AES-NI backend na 64bitovém Windows, s automatickým přepnutím na přenosnou softwarovou implementaci na procesorech, které AES-NI nemají. Ciphertext je na všech platformách totožný; mění se jen rychlost šifrování PDF heslem AES-256
Version 3.60.0
Přidáno
MergeFileListnyní slučuje stromy logické struktury (Tagged PDF) vstupních dokumentů do jediného dosažitelného stromu struktury místo toho, aby pouze zachovával strom prvního dokumentu a ostatní ponechával jako nedosažitelné objekty. Sloučeny jsou prvky struktury nejvyšší úrovně, parent tree (s přemapovanými klíči stránky/StructParentsa anotace/StructParent),/RoleMap,/ClassMapa/IDTreea sloučený katalog je označen jako Tagged (/MarkInfo /Marked true)
Změněno
- Při slučování dokumentů se konfliktními klíči
/RoleMap,/ClassMapnebo/IDTreese ponechá první výskyt. Rychlá cesta (MergeFileListFast) nadále zahazuje informace o struktuře
Version 3.59.0
Přidáno
MergeFileListnyní slučuje dokumenty v jednom průchodu (O(N) místo O(N²)), takže velká vícesouborová slučování jsou výrazně rychlejší; navíc přidává slučování záložek pro více dokumentů, které bylo přidáno do rychlé cesty- Ve výchozím nastavení
MergeFileListnyní přeskakuje nečitelná nebo šifrovaná vstupní soubory a pokračuje ve slučování zbytku místo toho, aby při prvním vadném souboru zrušil celou operaci. K obnovení předchozího chování zastavení při první chybě použijte novýMergeFileListStrict - Objekty logické struktury (Tagged PDF) ze vstupů nyní
MergeFileListzachovává (rychlá cesta je nadále zahazuje) MergeFileListStrictslučuje seznam souborů, ale zastaví se na prvním nečitelném nebo šifrovaném souboru, takže zachovává přísnou sémantiku zastavení při chybě z dřívějších vydání
Version 3.58.0
Přidáno
MergeFileListFastnyní slučuje osnovy dokumentů (záložky) napříč všemi vstupními soubory, takže rychlá cesta slučování zachovává záložky i vedle polí formuláře AcroForm- Sloučené záložky si zachovávají hierarchii i cíle stránek; počet záložek nejvyšší úrovně ve sloučeném výstupu se rovná součtu vstupů
Version 3.57.1
Přidáno
- Ukládání přes Direct File API (
DASaveAsFile,DASaveToStream,DASaveCopyToStream) jsou nyní u velmi velkých dokumentů výrazně rychlejší: nezměněné objekty se kopírují přímo ze zdrojových bajtů místo toho, aby se znovu parsovaly a serializovaly. Opětovné uložení dokumentu s 60 000 stránkami / 883 MB kleslo zhruba z 33 sekund na asi 23 sekund
Version 3.57.0
Přidáno
- Dále optimalizováno
TPDFlib.MergeFileListFastpro slučování více dokumentů: nezměněné ne-streamové objekty v připojovaných dokumentech se nyní používají přímo z původních zdrojových bajtů s posunem nepřímých odkazů na úrovni bajtů, čímž se přeskočí průchod parsování a znovu serializace a zvyšuje se propustnost u vícestránkových dokumentů. Výstup sloučení zůstává nezměněn a počty stránek jsou totožné - Objekty, které obsahují streamy nebo patří do stromu struktury, nadále používají existující cestu dekódování, takže rychlejší bajtová cesta se aplikuje jen tam, kde je prokazatelně bezpečná
Version 3.56.44
Přidáno
- Optimalizováno
TPDFlib.MergeFileListFastpředalokováním metadat sloučení a zápisem nezměněných objektů prvního dokumentu z jejich původních zdrojových dat, čímž se snižuje zbytečná práce s pamětí a dekódováním objektů i výstupem u rychlých vícesouborových sloučení - GUI Delphi
MergePDFnyní dávkuje zápis výsledků v rychlém režimu a vyhýbá se opakovaným úplným průchodům textem v memo, takže velké seznamy vstupů zůstávají po dokončení sloučení responsivnější
Version 3.56.43
Přidáno
- Optimalizována běžná cesta slučování
TPDFlib.MergeFileListstřídáním jeho mezilehlých dočasných souborů místo kopírování rostoucího sloučeného PDF před každým dalším vstupem, čímž se snižuje disk I/O pro vícesouborové workflow při zachování stávajícího kontraktu vraceného počtu
Version 3.56.42
Přidáno
- Přidáno regresní pokrytí AES pro případy vstupní buffer / alias výsledku používané při rollbacku ukládání šifrovaných streamů, včetně velkých 504 KB payloadů, které dříve odhalily chybu
- Běžný pracovní postup API
LoadFromFile,Encrypt,SaveToFile, opětovné načtení,DecryptaSaveToFilenyní znovu dokončí na velkých načtených PDF při zachování optimalizace dešifrování AES-CBC s redukovanou kopií - Opravena bufferová cesta dešifrování AES-256 zavedená ve v3.56.41, takže volající mohou přiřadit výsledek dešifrování zpět do stejného
AnsiString, který poskytl buffer ciphertextu, bez přístupu mimo povolenou oblast paměti
Version 3.56.41
Přidáno
- Přidán
TPDFlib.DACopyFilepro workflow Direct Access, která potřebují počet stránek a nezměněnou kopii souboru bez sestavování celého běžného grafu objektů - Demo Delphi
HugeFileBenchmarknyní obsahuje řádekdirect-copya filtry--opsa--skippro zaměřené běhy na velkých souborech
Změněno
- Optimalizováno dešifrování AES-256 přidáním bufferových cest AES-CBC decrypt a jejich používáním při dešifrování načtených řetězců a streamů, čímž se snižuje další kopírování ciphertextu u velkých šifrovaných streamů
Version 3.56.40
Změněno
- Dema Delphi a C++Builder
HelloWorldnyní vytvářejí bohatší úvodní PDF s informacemi o dokumentu, vybraným výstupem standardních písem, stylizovaným blokem názvu, jednoduchou vektorovou kresbou a návodem na další kroky, přičemž zachovávají stejný workflow sestavení a spuštění - Všechny poznámky k demo Delphi a C++Builder byly nahrazeny stránkami
Readme.htmlpřátelskými pro prohlížeč, včetně doplňkových poznámek k heslu, omezeným souborům a výsledkům podpisu, a indexy demo nyní směrují uživatele na HTML poznámky
Version 3.56.39
Změněno
- Uložení Direct File API nyní vytvářejí tabulky pro vyhledávání cross-reference lineárně, takže
DASaveAsFilea související cesty přímého ukládání jsou mnohem rychlejší u PDF s velmi vysokým počtem objektů nebo hustými stromy stránek - Optimalizovaný zapisovač zachovává stejnou sémantiku řetězce volných objektů a zároveň se vyhýbá opakovaným průchodům čísel objektů při úplné generaci xref, což zlepšuje velké workflow přímého ukládání bez změny veřejného API ani výstupního kontraktu
Version 3.56.38
Změněno
- Běžný workflow API
LoadFromFile,Encrypt,SaveToFile, opětovné načtení,DecryptaSaveToFilenyní zachovává šifrovaný stav před výslovnýmDecrypt, takže odpovídá chování Direct File API u velkých starších PDF
Opraveno
- Opraven výstup šifrování běžného API tak, aby
Encryptvytvořil nebo zachoval trailer/IDpřed zápisem bezpečnostních dat AES-256, čímž zůstávají šifrovaná PDF znovu rozpoznatelná přesEncryptionStatus
Version 3.56.37
Přidáno
- Přidán
TPDFlib.ComparePreflightReports, porovnávač řádek po řádku pro prosté textové preflight reporty, který ignoruje proměnlivé řádky časového razítkaGenerated:a vrací prázdný řetězec, když se stabilní obsah reportu shoduje - Demo Delphi
PreflightReportnyní podporuje--compare <file>v režimu jednoho souboru, zapisuje report.diff.txtv UTF-8 a vrací návratový kód 2, když se vygenerovaný textový report liší od baseline
Version 3.56.36
Přidáno
- Demo Delphi
PreflightReportnyní podporuje dávkové běhy nad adresářem s--input-dir,--output-dira--recursive, přičemž zapisuje jeden report na PDF jako<basename>.preflight.<ext>
Změněno
- Dávkový režim zapisuje soubor
preflight-summary.csvv UTF-8, který zaznamenává každý zdrojový PDF, stav pass/fail, počet problémů a cestu k vygenerovanému reportu, přičemž zachovává stávající kontrakt návratových kódů pro automatizaci
Version 3.56.35
Přidáno
ReportFormat = 3přidává CSV výstup doTPDFlib.CreatePreflightReportExaTPDFlib.SavePreflightReportEx, který vytváří řádky UTF-8 pro metadata reportu, každou vybranou kontrolu shody, jednotlivé kódy a zprávy problémů i závěrečný souhrn- Demo Delphi
PreflightReportnyní podporuje--format csva--csv, takže běhy preflightu z příkazové řádky mohou bez následného zpracování JSON nebo parsování textu napájet tabulky či jednoduché CI parsery
Version 3.56.34
Přidáno
- Přidána API
TPDFlib.CreatePreflightReportExaTPDFlib.SavePreflightReportExcitlivá na formát pro generování preflight reportů PDF/A a PDF/UA-1 jako prostého textu, JSON nebo samostatného HTML při zachování stávajících textových API reportů - Demo Delphi
PreflightReportnyní podporuje--format text|json|htmlplus zkratky--jsona--html, takže stejný workflow z příkazové řádky může vytvářet čitelné reporty pro lidi i strojově čitelná CI artefakta
Version 3.56.33
Přidáno
- Přidána
TPDFlib.CreatePreflightReportaTPDFlib.SavePreflightReport, aby aplikace mohly generovat znovupoužitelné textové reporty ze zabudovaných kontrol shody PDF/A a PDF/UA-1 bez ručního vypisování handle seznamů řetězců
Změněno
- Demo Delphi
PreflightReportnyní volá API reportů na úrovni knihovny přímo, takže ukázka zůstává zaměřena na workflow z příkazové řádky, vybrané kontroly, režim první chyby a automatizaci přívětivé návratové kódy
Version 3.56.32
Přidáno
- Přidáno nové konzolové demo Delphi
PreflightReport, které spouští kontroly PDF/A a PDF/UA-1 pomocíCheckFileCompliance, vypisuje seznamy problémů pomocíGetStringListCountaGetStringListItema zapisuje textový preflight report
Změněno
- Demo podporuje volby
--input,--output,--pdfa,--pdfua,--botha--first-issue, plus návratové kódy pro automatizaci přívětivé výsledky pass, issue-found a runtime-error
Version 3.56.31
Změněno
GetCustomKeys(2)nyní konzistentně skrývá systémové položky Catalogu spravované knihovnou, včetně/OutputIntents,/Extensions,/Requirements,/Collectiona/NeedsRendering
Opraveno
- Výstupní záměry PDF/A vytvořené pomocí
SetPDFAModese už neobjevují jako vlastní klíče Catalogu, takže výčet metadat aplikace zůstává oddělený od struktur shody PDF
Version 3.56.25
Změněno
- Funkce GetPDFUADiagnostics na straně zapisovače získává odpovídající problém
MULTIPLE-H-CHILDREN:N, tedy paritu s čtečským10044z v3.56.24. ISO 14289-1 §7.4.4 zakazuje více než jedno přímé H dítě na uzel stromu tagů — kontrola na straně zapisovače se spustí vždy, když stromFStructElemsv paměti obsahuje takové porušení - Nový vnořený pomocník
CountMultipleHChildrenprochází strom do hloubky a na každé úrovni počítá děti H. Kontrola běží vedle existujících průchodů LIST-STRUCT / LIST-NO-NUMBERING a sdílí stejný vzor průchoduFStructElems
Version 3.56.24
Změněno
- Audit PDF/UA-1 získává kontrolu jedinečnosti H tagu podle ISO 14289-1 §7.4.4.
10044hlásí každý uzel struktury, který má více než jedno přímé H dítě — specifikace to zakazuje u silně strukturovaných dokumentů a stejný požadavek platí pro jakýkoli uzel stromu tagů bez ohledu na celkový režim struktury. Druhé SHALL z §7.4.4 (dokument má být buď silně, nebo slabě strukturovaný, ne obojí) vyžaduje heuristiky napříč celým dokumentem a je záměrně ponecháno mimo tento audit - Nový průchod stromem struktury v pre-order (UAVisitStructNodeForHUniqueness / ScanStructTreeForHUniqueness) počítá přímé děti H na uzel a rekurzivně sestupuje do hloubky. Znovu používá stejný dekodér K-shape jako stávající průchody nadpis / seznam / poznámka
Version 3.56.23
Přidáno
- Nový
Lib/PDFlibPDFUAFontInspect.pasimplementuje tolerantní průchod adresářem tabulek SFNT a parser adresáře podtabulek cmap. Tabulka Adobe Glyph List s 4281 názvem přidaná jako scaffold v předchozím infrastrukturním commitu je nyní zapojena přes kontrolu Differences. Programy, které se neparsují jako SFNT (Type 1 PFB / PFA, kolekce OpenType, libovolný odpad), se tiše přeskočí — na úrovni auditu se upřednostňují falešné negativy před falešnými pozitivy
Změněno
- Audit PDF/UA-1 získává dvě kontroly programů písem podle ISO 14289-1 §7.21.6, které musely být v kontrolách na úrovni slovníku ve v3.56.10 odloženy, dokud nebyl k dispozici parser TrueType.
10034hlásí nesymbolická písma TrueType, jejichž vložená tabulka SFNT cmap obsahuje pouze symbolickou položku (platformID=3, encodingID=0) — první odstavec §7.21.6 vyžaduje alespoň jednu nesymbolickou podtabulku cmap, aby program mohl vykreslit kódové body deklarované svým /Encoding.10035hlásí nesymbolické pole/Encoding /DifferencesTrueType, jejichž názvy glyfů nejsou členy Adobe Glyph List (.notdefvyjma) — třetí odstavec §7.21.6 vyžaduje, aby každá položka Differences spadala do AGL
Version 3.56.22
Změněno
- Audit PDF/UA-1 získává kontroly dat media clip podle ISO 14289-1 §7.18.6.
10042hlásí slovníky dat media clip (identifikované jako/S /MCD, volitelně/Type /MediaClip) bez povinné položky/CTcontent-type.10043hlásí stejné slovníky bez povinného pole/Alt. Tabulka 274 ISO 32000-1 uvádí oba klíče jako volitelné, ale ISO 14289-1 §7.18.6 je povyšuje na povinné, aby čtečky obrazovky mohly oznámit smysluplný popis vloženého multimédia - To je fáze 6 plánu hlubokého auditu PDF/UA (
.superpowers/plans/2026-05-23-pdfua-deep-audit-plan.md). Běží bez jakékoli závislosti na parseru programů písem nebo content streamů, takže je to první navazující podtřída po sérii v3.56.0..v3.56.13
Version 3.56.21
Přidáno
- Nový
SetSignProcessCommitmentTypeemituje podepsaný atribut CAdEScommitment-type-indication(OID 1.2.840.113549.1.9.16.2.16, ETSI EN 319 122-1 v1.2.1 §5.2.3) uvnitř SignerInfo PAdES-B-B. Přijímá celočíselné kódy 1..6 mapované na známé ETSI commitment OIDid-cti-ets-proofOfOriginažid-cti-ets-proofOfCreation; pro vymazání použijte 0. Kódy mimo rozsah se odmítají - Nový
SetSignProcessSignaturePolicyemituje podepsaný atribut CAdESsignature-policy-identifier(OID 1.2.840.113549.1.9.16.2.15, §5.2.9). Přijímá policy OID v tečkovaném desetinném zápisu, hash policy dokumentu jako řetězec velkých hexadecimálních znaků a kód hash algoritmu (1=SHA-1, 2=SHA-256, 3=SHA-384, 4=SHA-512, 0=auto/SHA-256). Atribut nese sekvenciSignaturePolicyIdssigPolicyId+sigPolicyHash(OtherHashAlgAndValueSEQUENCE)
Změněno
- Oba atributy se projeví pouze tehdy, když je SubFilter
ETSI.CAdES.detached(cesta PAdES-B-B); rozšiřují existující polergAuthAttrvedlecontent-typeasigning-certificate-v2. Řádek d) tabulky 1 PAdES zakazuje kombinovatcommitment-type-indications položkou/Reasonv PDF Signature Dictionary; za to, aby nebyly nastaveny obě, odpovídá volající
Version 3.56.20
Přidáno
- Nový
AddPAdESDSSVRIpřipojuje do DSS, který se právě sestavuje, položku podslovníku Signature VRI a doplňuje tak strukturu Validation Related Information podle ETSI EN 319 142-1 v1.2.1, klauzule 5.4.2.3. Položka je klíčována pomocí velkého hex SHA-1 z bajtů/Contentspodpisu; její podpoleCert/CRL/OCSPse plní odkazováním na odpovídající proudy rodičovského DSS přes indexy od 0, předané jako seznamy oddělené čárkami (např."0,2,5")
Změněno
- Podkladová metoda
TSmartPDFDocument.AddPAdESDSSWithVRIsleduje čísla streamových objektů emitovaných pro každý cert / CRL / OCSP a používá je k zápisu VRI podpolí jako nepřímých odkazů zpět do stejných streamů, na které už ukazují rodičovská pole DSS, čímž splňuje požadavek specifikace, že položky VRI sdílejí úložiště s rodičovským slovníkem DSS. Původní vstupní bodAddPAdESDSSdál funguje beze změny pro volající, kteří VRI nepotřebují - Každý podslovník VRI pro jednotlivý podpis nese volitelný marker
/Type /VRI, takže nástroje, které procházejí katalog podle tagůType, mohou strukturu rozpoznat bez znovuřešení rodičovské cesty
Version 3.56.19
Přidáno
- Nový workflow PAdES-B-T pro připojení podpisového časového razítka RFC 3161 / RFC 5816 (id-aa-signatureTimeStampToken, OID 1.2.840.113549.1.9.16.2.14) ke stávajícímu podpisu PAdES-B-B.
NewPAdESSignatureTimeStampProcessFromFile/FromStream/FromStringotevřou podepsané PDF,SetPAdESSignatureTimeStampFieldpojmenuje pole,GetPAdESSignatureValueHashHexvrací hash SHA-256 (nebo 384 / 512) hodnotysignatureValuepodepisujícího pro odeslání TSA,GetPAdESSignatureCMSByteszpřístupní existující CMS payload,SetPAdESSignatureCMSBytespřijímá rozšířené CMS bajty, které volající sestaví pomocí libovolné CMS knihovny, aEndPAdESSignatureTimeStampProcessToFile/ToStream/ToStringvloží nové CMS do původního zástupného pole/Contents - Nový
SetSignProcessReserveContentsBytesrozšiřuje zástupné pole/Contentspři prvotním podpisu tak, aby se následně rozšířené CMS vešlo bez přetečení původní rezervace. Typické TimeStampTokeny vydané TSA přidávají k SignerInfo 2-6 KB; pro rezervu použijte 1024-8192. Bez dostatečné rezervy vrátí volání rozšíření13(output overflow)
Změněno
BuildPAdESSignatureTimeStampAttributeje bezstavový pomocník, který zabalí TSA vydaný TimeStampToken do CMS Attribute SEQUENCE, kterou očekáváSignerInfo.unsignedAttrs, takže volající, kteří už mají po ruce CMS knihovnu, mohou přeskočit spojovací logiku OID + SET-of- Knihovna neobsahuje TSA HTTP klienta; volající si TimeStampToken obstarává sám (typicky 30-50 řádků TSP požadavku + HTTP POST například proti FreeTSA nebo DigiCert). Windows CryptoAPI
CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTRby v principu mohla automatizovat vložení CMS přímo v knihovně, ale na oddělené SignedData podobě, kterou PAdES generuje, vracíCRYPT_E_INVALID_INDEX(0x80091008), takže se používá cesta s CMS bajty dodanými volajícím
Version 3.56.18
Přidáno
- Nové ASN.1 pomocníky
DER_IntegerFromLittleEndian(řeší pořadí bajtůCRYPT_INTEGER_BLOBna Win32) aDER_ContextTagExplicit(obalí payload do konstruovaného context-specific tagu) doplňují mikroenkodérPDFlibASN1. Nové deklaraceCERT_INFO/CRYPT_ALGORITHM_IDENTIFIER/CRYPT_INTEGER_BLOB/PCERT_CONTEXTvPDFlibCryptoAPIdávají sign path přístup k parsovaným polím certifikátu
Změněno
- Atribut PAdES
signing-certificate-v2nyní vkládá volitelné poleIssuerSerialdefinované RFC 5035 (ESSCertIDv2). Issuer Distinguished Name podpisového certifikátu je zabalen do volbyGeneralName [4] EXPLICIT directoryNameuvnitřGeneralNames, následované sériovým číslem certifikátu jako ASN.1 INTEGER. Bajty sériového čísla přicházejí z Windows CryptoAPI (CRYPT_INTEGER_BLOB) v little-endian a obracejí se na big-endian s přidáním výplňového bajtu pro kladné celé číslo, když je nastaven nejvyšší bit, což odpovídá tomu, jak stejnou položku emitují OpenSSL a BouncyCastle - Ověřovatelé, kteří porovnávají dvojici issuer name + serial se svou kandidátní sadou pro sestavování cesty (zejména EU DSS v přísném režimu), nyní najdou v atributu signing-cert-v2 oba identifikátory; předchozí výstup z v3.56.17 poskytoval pouze referenci
certHash
Version 3.56.17
Přidáno
- Nová jednotka
PDFlibASN1poskytuje zaměřený DER (X.690) mikro-encoder - prefix délky, OCTET STRING, SEQUENCE, SET, OBJECT IDENTIFIER - používaný k sestavení hodnoty atributuSigningCertificateV2. Encoder dodržuje standardní pravidla pro base-128 oblouky OID a vynechává volitelné polehashAlgorithm, když by jen opakovalo výchozí SHA-256, což odpovídá výstupu OpenSSL a BouncyCastle
Změněno
- Vestavěná cesta podpisu
ETSI.CAdES.detachednyní vytváří strukturálně vyhovující podpisy PAdES-B-B. Knihovna si sama sestavuje CMS autentizované atributy -content-type(id-data) asigning-certificate-v2z RFC 5035 / RFC 5816 s hashem SHA-256 podpisového certifikátu - a předává je doCryptSignMessagepřesrgAuthAttr. Jakmile je toto pole nenulové, Windows CryptoAPI přestane automaticky vkládat atributsigning-time, který PAdES (ETSI EN 319 142-1 v1.2.1 Table 1) zakazuje, takže výslednéSignerInfonese jen požadované atributy ApplySignaturenyní směrujeETSI.CAdES.detachedpřes cestu surových bajtů (stejnou jako proadbe.pkcs7.detached) místo toho, aby předával předpočítaný digest. CryptoAPI nyní počítá autentizovaný atributmessageDigestnad skutečným podepisovaným obsahem, což ověřovatelé očekávají- SHA-384 a SHA-512 se zohledňují i při sestavování atributu signing-certificate-v2: pole
hashAlgorithmse emituje s odpovídajícímAlgorithmIdentifiermísto spoléhání na výchozí hodnotu. SHA-1 se v tomto kontextu tiše povyšuje na SHA-256, protože PAdES-B-B SHA-1 nepovoluje (clause 6.2.1)
Version 3.56.16
Přidáno
- Nový
SetSignProcessDigestAlgorithmvybírá algoritmus message-digest pro podpis:1= SHA-1 (zastaralý),2= SHA-256 (moderní výchozí),3= SHA-384,4= SHA-512,0= auto (SHA-256 pro každý SubFilter kromě staré cestyadbe.pkcs7.sha1, která zůstává na SHA-1 kvůli bitově stabilní zpětné kompatibilitě). ETSI EN 319 142-1 v1.2.1 §6.2.1 zakazuje MD5 a odkazuje na ETSI TS 119 312 pro doporučené kryptografické sady, takže PAdES podepisující by měli volit SHA-256 nebo silnější - Vedle stávajícího
SHA1StreamRangebyly přidány hash pomocníkySHA256StreamRange,SHA384StreamRangeaSHA512StreamRange; sign path je používá k vytvoření digestu PDF ByteRange pod vybraným algoritmem. OIDSignerInfo.digestAlgorithmv PKCS#7 a skutečné hash bajty se nyní zaručeně shodují (předchozí kód vždy předával digest SHA-1 bez ohledu na dohodnutý algoritmus)
Změněno
TPDFlibPFXFile.SignDatanyní přijímá parametrDigestAlgorithma pro každou dvojici (SubFilter, algoritmus) vybírá správné OID: pro SHA-256/384/512 na odpojených i vlastních SubFilterech (RFC 5754)2.16.840.1.101.3.4.2.1/.2/.3a pro starší cestuadbe.pkcs7.sha1odpovídající OID rodinysha256WithRSAEncryption
Version 3.56.15
Přidáno
- Nový
SetSignProcessDocTimeStamppřepíná sign proces do režimu PAdES Document Time-stamp podle ETSI EN 319 142-1 v1.2.1 §5.4.3. Výsledný Signature Dictionary nese/Type /DocTimeStampa/SubFilter /ETSI.RFC3161, vynechává zakázané klíče/M,/Reason,/Location,/ContactInfoa/Namea vyhrazuje v/Contentshex zástupný prostor o velikosti 8192 bajtů (nebo podle volajícího) pro externě získaný TimeStampToken RFC 3161
Změněno
- Passthrough se zapne automaticky po zvolení režimu DocTimeStamp, protože TimeStampToken pochází z externí TSA. Volání
SetSignProcessInfoprovedená po přepnutí do režimu DocTimeStamp se tiše ignorují, aby Signature Dictionary zůstal v souladu se specifikací - Existující automatické vkládání
/Extensions /ESICpro PAdES přidané ve v3.56.8 už pokrývá i DocTimeStamp, protože jeho SubFilter začínáETSI., takže PDF s Document Time-stamp deklaruje požadované rozšíření katalogu bez dalšího zapojování
Version 3.56.14
Přidáno
- Nové API pro rozšíření PAdES Document Security Store (DSS).
NewPAdESDSSProcessFromFile/NewPAdESDSSProcessFromStream/NewPAdESDSSProcessFromStringotevřou dříve podepsané PDF,AddPAdESDSSCertificate/AddPAdESDSSCRL/AddPAdESDSSOCSPpřipraví DER-enkódovaný validační materiál aEndPAdESDSSProcessToFile/EndPAdESDSSProcessToStream/EndPAdESDSSProcessToStringzapíšou inkrementální aktualizaci obsahující slovník/DSS << /Type /DSS /Certs [...] /CRLs [...] /OCSPs [...] >>podle ETSI EN 319 142-1 v1.2.1 §5.4.2.2. To je stavební blok pro povýšení podpisu PAdES-B-B / B-T na dlouhodobé ověřování PAdES-B-LT
Změněno
- Proces DSS při přidávání validačního materiálu automaticky zvýší položku katalogu
/Extensions /ESICalespoň naExtensionLevel 1, což odpovídá požadavku v §5.6, a při opakovaných voláních slučuje nové certifikáty, CRL a odpovědi OCSP do existujících polí/Certs//CRLs//OCSPs, takže revize přibývají místo přepisování GetPAdESDSSProcessResult/ReleasePAdESDSSProcessuzavírají životní cyklus a zrcadlí existující rozhraní APISignProcess
Version 3.56.8
Změněno
- Shoda s baseline PAdES: když je podpis vytvořen se SubFilter PAdES (
ETSI.CAdES.detachedneboETSI.RFC3161), dokumentový katalog nyní automaticky dostane položku/Extensions /ESIC <</BaseVersion /1.7 /ExtensionLevel 2>>požadovanou ETSI EN 319 142-1 v1.2.1 §5.6. Položka se přidává ve stejné inkrementální aktualizaci, která nese podpis, nikdy nesnižuje existující vyšší/ExtensionLevela sleduje nepřímé odkazy/Extensionsnebo/ESIC, když je zdrojové PDF už ukládá jako samostatné objekty - Marker rozšíření ekvivalentní Adobe, který SetSignProcessCustomSubFilter zapisuje pro PDF vytvářená přes
TPDFlib, je nyní/ADBE /BaseVersion /1.7 /ExtensionLevel 8(dříveExtensionLevel 5), což odpovídá alternativní deklaraci, kterou mohou baseline podpisy PAdES používat; úroveň 5 pokrývala jen funkce ISO 32000-2 forms / 3D / RichMedia a ve skutečnosti neidentifikovala rozšíření PAdES
Version 3.56.13
Změněno
- Když je SetPDFUAMode aktivní a dokument se ukládá, každý strukturální prvek L (list), který nemá explicitní atribut
ListNumbering, nyní automaticky dostane/O = List /ListNumbering = None. ISO 14289-1 §7.6 vyžaduje, aby každý tag L deklaroval svůj styl číslování; nové opravení při ukládáníApplyPDFUAListNumberingse připojuje ke stávající rodiněApplyPDFUATabOrder/ApplyPDFUAFormFieldTU/ApplyPDFUAAnnotContents/ApplyPDFUAEmbeddedAFRelationship/ApplyPDFUAStripTrapNet - Autoři, kterým záleží na konkrétním stylu seznamu, by měli stále volat SetStructElemListNumbering před EndTag; automatické opravení se spustí jen tehdy, když při ukládání není přítomen žádný atribut ListNumbering, takže explicitní hodnoty zůstávají zachovány
- Diagnostická zpráva na straně zapisovače
LIST-NO-NUMBERING:Nnyní uvádí, že automatické opravení problém při ukládání maskuje, takže uživatelé rozumějí jak chybějícímu atributu, tak automatickému chování opravy
Version 3.56.12
Změněno
- Audit PDF/UA-1 získává tři nové kontroly podle ISO 14289-1.
10031hlásí anotace Link, jejichž slovník URI akce obsahuje/IsMap = true(zakázáno v §7.18.5, pokud není ekvivalentní funkce poskytnuta jinde v obsahu; autoři s legitimním případem použití IsMap si mohou diagnostiku potlačit sami).10032hlásí strukturální prvkyNotebez položky/ID— §7.9 vyžaduje, aby každý tag Note deklaroval jedinečné ID.10033hlásí počet duplicitních dvojic, když dva nebo více tagů Note sdílí stejnou hodnotu/ID - Detekce kolize ID u Note se provádí shromážděním ID v setříděném TStringList a průchodem sousedních dvojic, takže skupina tří Note sdílejících jedno ID se počítá jako dvě duplicitní dvojice
- Kontrola URI akcí prochází pole
/Annotskaždé stránky, filtruje podle/Subtype /Linka poté kontroluje/A /S /URIa boolean/IsMap. Nepřímé odkazy se dereferencují v každém kroku, takže oddělené slovníky akcí se chovají stejně jako vložené
Version 3.56.11
Změněno
- ISO 14289-1 §7.6 vyžaduje, aby každý strukturální prvek L (list) nesl explicitní atribut
ListNumbering.10030(na straně čtečky) aLIST-NO-NUMBERING:N(na straně zapisovače) hlásí tagy L, které jej vynechávají. Průchod na straně čtečky dekóduje oba tvary/A(jediný slovník atributu nebo pole slovníků smíchané s revizními celky) a hledá klíč/ListNumberingbez ohledu na vlastníka. Kontrola na straně zapisovače zkoumáTPDFStructElem.Attributesse stejným názvem jak v dokončeném seznamu struktury, tak ve stále otevřeném zásobníku tagů - Platné hodnoty
ListNumberingpodle ISO 32000-1 Table 347 jsouNone,Disc,Circle,Square,Decimal,UpperRoman,LowerRoman,UpperAlpha,LowerAlpha. Audit kontroluje jen přítomnost klíče, ne to, která hodnota je zvolena — každý tag L potřebuje jednu z nich
Version 3.56.10
Změněno
- Audit PDF/UA-1 získává pravidla kódování TrueType podle ISO 14289-1 §7.21.6.
10028hlásí nesymbolická písma TrueType, jejichž/Encoding(nebo/BaseEncodinguvnitř slovníku Encoding) není aniMacRomanEncoding, aniWinAnsiEncoding.10029hlásí symbolická písma TrueType, která vůbec nesou položku/Encoding(zakázáno čtvrtým odstavcem §7.21.6) - Symbolické vs. nesymbolické se určuje z bitu 3
/Flagsve FontDescriptor (maska4) a znovu se používá stávající pomocníkUAFontDescriptorSymbolicz podtřídy 4. Celý první odstavec §7.21.6 (vložený program TrueType musí obsahovat odpovídající položky cmap) vyžaduje parsování programu písma TrueType a je stále ve stavu čeká na dopracování; pravidla na úrovni slovníku výše jsou praktická vrstva, kterou může tento audit ověřit bez parseru TrueType - Pravidla pro pole Differences v §7.21.6 (názvy glyfů pouze z AGL, přítomnost cmap Microsoft Unicode) zůstávají ze stejného důvodu mimo rozsah — vyžadují kontrolu programu písma
Version 3.56.9
Změněno
- Audit PDF/UA-1 získává úplnou kontrolu podle ISO 14289-1 §7.18.4.
10027hlásí anotace Widget, jejichž/StructParentse přes strom struktury/ParentTreevyřeší, ale nedopadne na strukturální prvek s/S = Form. Předchozí částečná kontrola z v3.56.7 (10026) zachycovala jen Widgety, které vůbec nemají/StructParent; nová kontrola pravidlo doplňuje tím, že sleduje ukazatel number-tree a ověřuje cílový tag - Nový pomocník
NumberTreeLookupimplementuje tvar number-tree podle ISO 32000-1 §7.9.7 (plochý kořen/Nums, mezilehlé/Kidsomezené pomocí/Limits). Budoucí audity, které potřebují rozřešit položky stránky/StructParentsnebo popisky/PageLabels, jej mohou znovu použít - Ověření Form tagu u anotací Widget používá dvouúrovňový model: Widget bez
/StructParentse hlásí jako10026; Widget, jehož/StructParentexistuje, ale nevyřeší se na/S = Form, se hlásí jako konkrétnější10027. Tím se zabrání dvojímu započítání stejného porušení pod oběma kódy
Version 3.56.7
Změněno
- Když je SetPDFUAMode aktivní a dokument se uloží, všechny položky anotací
TrapNetse nyní automaticky odstraní z pole/Annotskaždé stránky. ISO 14289-1 §7.18.2 anotaceTrapNetzakazuje; nové opravení při ukládáníApplyPDFUAStripTrapNetse připojuje ke stávající rodiněApplyPDFUATabOrder/ApplyPDFUAFormFieldTU/ApplyPDFUAAnnotContents/ApplyPDFUAEmbeddedAFRelationship, takže dokumenty v režimu PDF/UA přestanou tiše vypouštět zbyléTrapNet - Audit PDF/UA-1 získává částečnou kontrolu podle §7.18.4.
10026hlásí anotace Widget, které postrádají/StructParent— Widget bez/StructParentnelze dosáhnout ze stromu struktury, a proto jej nelze vnořit do strukturálního taguForm. Úplné ověření struktury (vyřešení/StructParentpřesParentTreea potvrzení, že rodičovské/SjeForm) zůstává na navazující vydání - Funkce GetPDFUADiagnostics na straně zapisovače získává odpovídající problém
WIDGET-NO-STRUCTPARENT:N. Existující zpráva TRAPNET-ANNOT nyní také uvádí, že SetPDFUAMode je při ukládání automaticky odstraňuje
Version 3.56.6
Změněno
- Audit PDF/UA-1 získává dvě kontroly hierarchie nadpisů podle ISO 14289-1 §7.4.2.
10024hlásí, když první prvek nadpisu v pořadí dokumentu není H1 (nebo H).10025hlásí počet přeskočení úrovní nadpisu v sestupné sekvenci (např. H1 následované H3 bez H2). Obě kontroly sdílejí jediný pre-order průchod stromem struktury, který dekóduje vnořené tvary/K(jediný StructElem, pole StructElem / IndRefs / MCRs) - Funkce GetPDFUADiagnostics na straně zapisovače získává odpovídající problém
FIRST-HEADING-NOT-H1, tedy paritu s čtečským10024. Dříve existující kontrola HEADING-LEVEL-SKIP na straně zapisovače nyní dostává společníka, který zachytí i problémy typu "první nadpis byl H2"
Version 3.56.5
Změněno
- Když je SetPDFUAMode aktivní a dokument je později zašifrován, klíč oprávnění šifrování (
/Pve slovníku encrypt) nyní automaticky dostane nastaven bit 10 (maska$200, "Extract text and graphics in support of accessibility"), i když volající nezahrnulppCanCopyAccessdoTPDFExtraPermissionspředaných do Encrypt. ISO 14289-1 §7.16 vyžaduje, aby každý šifrovaný vyhovující soubor povoloval přístupnostní extrakci, a tento bit se jinak snadno přehlédne. Nastavit jej je vždy bezpečné — přidává přístup jen asistivní technologii, ne ostatním cestám extrakce - Funkce GetPDFUADiagnostics na straně zapisovače získává nový problém
ENCRYPT-NO-ACCESS, který se spustí, když je PDFUAMode zapnutý a bit 10/Pve slovníku encrypt je nulový. Tím se zachytí okrajový případ pořadí volání, kdy uživatel nejdřív zavolalEncrypt()a SetPDFUAMode až potom — diagnostika uživateli říká, aby znovu zavolalEncrypt(), takže se slovník encrypt znovu vydá s opraveným/P
Version 3.56.4
Změněno
- Funkce GetPDFUADiagnostics na straně zapisovače získává pět nových kontrol podle ISO 14289-1, takže audit dokumentu v paměti zachytí stejná porušení jako audit na straně čtečky CheckFileCompliance ComplianceTest=2.
SUSPECTS-TRUEoznačuje MarkInfo/Suspects=true (§7.1: vyhovující soubory PDF/UA vyžadují Suspects=false).ROLEMAP-STANDARD-REMAP:Noznačuje volání AddRoleMap, která by přemapovala standardní strukturální tag — §7.1 přemapování standardních tagů zakazuje.DC-TITLE-MISSINGoznačuje prázdné XMP dc:title (odděleně od DOCINFO-TITLE-MISSING, který kontroluje /Info /Title).TRAPNET-ANNOT:Noznačuje anotace TrapNet (§7.18.2 je zakazuje).ANNOT-PAGE-NO-TABS-S:Noznačuje stránky s anotacemi, jejichž slovník stránky /Tabs není /S (§7.18.3 vyžaduje na těchto stránkách pořadí tabulace podle stromu struktury) - Audity PDF/UA-1 na straně zapisovače i čtečky jsou nyní zhruba v paritě: každý problém, který audit na straně čtečky vyvolá u uloženého souboru, je nyní dosažitelný i z diagnostiky v paměti, až na formátové konvence každé funkce (text oddělený novými řádky versus seznam řetězců s kódy NNNNN)
Version 3.56.3
Změněno
- Audit PDF/UA-1 získává své kontroly písem podle §7.21.
10020hlásí každé písmo mimo Standard-14, jehož FontDescriptor postrádáFontFile/FontFile2/FontFile3(§7.21.4.1: každé vykreslované písmo musí mít vložený program).10021hlásí potomky CIDFontType2 bez položky/CIDToGIDMap(§7.21.3.2).10022upozorňuje na písma Standard 14 (Helvetica, Times, Courier, Symbol, ZapfDingbats a tučné / šikmé varianty), která jsou odkazována bez vloženého programu — §7.21.4 NOTE 5 jasně uvádí, že pro tato písma neexistuje žádná výjimka z vkládání.10023hlásí písma, která postrádají CMap/ToUnicodea neshodují se s výjimkami z §7.21.7 (předdefinované kódování MacRoman / MacExpert / WinAnsi, Type 0 s kolekcemi znaků Adobe-GB1 / CNS1 / Japan1 / Korea1, nesymbolické TrueType) - Kompozitní písma Type 0 se kontrolují na obou úrovních:
/ToUnicodena samotném rodičovském slovníku Type 0 a vložení //CIDToGIDMapna prvním potomku CIDFont. Písma Type 3 přeskočí kontrolu vkládání (jejich glyfy jsou inline CharProc), ale stále se účastní kontroly/ToUnicode - Pomocníci PDFlibPDFA pro podobnou práci s písmy nebyli záměrně sdíleni — půl tuctu krátkých rutin (odstranění prefixu subsetu, tabulka názvů Standard-14, přítomnost FontFile, příznak Symbolic) je lokálně duplikováno jako pomocníci
UA*, aby se audit PDF/A mohl dále vyvíjet bez rozbití PDF/UA, a naopak
Version 3.56.2
Změněno
- Audit PDF/UA-1 získává pět dalších kontrol podle ISO 14289-1 pokrývajících anotace, vložené soubory a volitelný obsah.
10015hlásí anotace Link, které postrádají neprázdný alternativní popis/Contents(§7.18.5), aby čtečky obrazovky mohly oznámit cíle odkazů.10016a10017označují slovníky FileSpec vložených souborů, kterým chybí povinné klíče názvu souboru/Fnebo/UF(§7.11).10018označuje slovníky konfigurace optional content, které vynechávají neprázdný textový řetězec/Name(§7.10).10019označuje slovníky konfigurace optional content, které obsahují zakázaný klíč/AS(§7.10) - Průchod anotacemi po stránkách, který už poháněl kontroly TrapNet a
/Tabs /S, nyní ve stejném průchodu sbírá i data Link //Contents, takže audit zůstává O(N) podle počtu objektů
Version 3.56.1
Změněno
- Audit PDF/UA-1 získává pět nových kontrol podle ISO 14289-1.
10010ověřuje oprávnění pro extrakci přístupnosti (bit 10 klíče šifrování/P) u šifrovaných souborů (§7.16).10011detekuje dynamické formuláře XFA přes prvek<dynamicRender>required</dynamicRender>uvnitř XDP paketu XFA (§7.15).10012označuje Form XObjecty, které nesou položku/Ref— reference XObjecty jsou zakázané (§7.20).10013označuje anotaceTrapNet(§7.18.2).10014prochází každou stránku a hlásí jakoukoli stránku s anotacemi, jejichž slovník stránky nenastavuje/Tabs /S(§7.18.3), aby pořadí tabulace odpovídalo stromu struktury - Všech pět nových kódů prochází stejnou dvojicí handle CheckFileCompliance + GetStringListItem, kterou přidalo předchozí vydání — nevzniká žádné nové veřejné API
Version 3.56.0
Přidáno
- Nový audit na straně čtečky
CheckCompliancePDFUAověřuje externí PDF proti ISO 14289-1 (PDF/UA-1). Doplňuje existující kontrolu na straně zapisovače GetPDFUADiagnostics tím, že přijímá libovolné vstupní PDF (vlastní výstup, výstup skeneru, obsah třetích stran) a vypisuje porušení PDF/UA-1 stejným způsobem, jakým CheckFileCompliance už hlásí problémy PDF/A
Změněno
- CheckFileCompliance nyní přijímá
ComplianceTest = 2pro spuštění nového auditu PDF/UA-1. Test PDF/A podComplianceTest = 1zůstává beze změny a seznam problémů se stále vrací přes stávající dvojici handle GetStringListCount / GetStringListItem - První verze pokrývá základní brány shody PDF/UA-1 z §5 (identifikace XMP
pdfuaid:part) a §7.1 (stream/Metadatav Catalogu, značku tagged PDF, strom struktury, přednost názvu prohlížeče, jazyk dokumentu, XMPdc:title, hodnotu/Suspectsa zákaz přemapování standardních strukturálních tagů). Vydává osm diagnostických kódů —10001až10009— takže je číselná řada vizuálně oddělená od kódů PDF/A00xxx - Podrobnější klauzule PDF/UA-1 (bezpečnost, anotace, XObjecty, podmnožiny písem) jsou sledovány pro navazující opravné verze nad stejným rámcem auditu
Version 3.55.6
Změněno
- Každý nově generovaný balíček XMP nyní nese vlastnost xmpMM:InstanceID ve formátu uuid:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX. Identifikátor se generuje pomocí Win32 CoCreateGuid a dává každému vytvořenému dokumentu jedinečný otisk nezávislý na verzi, jak doporučuje ISO 19005-1 §6.7.2 (Cor2) a průvodci osvědčených postupů PDF/A. Sestavení pro jiné než Windows (kde balíček XMP zůstává prázdný) nejsou dotčena
- Namespace xmpMM (http://ns.adobe.com/xap/1.0/mm/) je nyní součástí SelectionNamespaces balíčku XMP; noví pomocníci SetXMPMM a GenerateInstanceID stojí za emitováním InstanceID a tvoří základ pro budoucí podporu xmpMM:History / xmpMM:DerivedFrom
- Popisné schema PDF/A Extension Schema (pdfaExtension / pdfaSchema / pdfaProperty / pdfaType / pdfaField) se v tomto vydání nepřidává. Vytvoření vlastního extension schematu vyžaduje více kroků sestavení bag / seq / structured-property nad rámec stávajícího tvaru SetDublinCore / SetXMPBasic; práce je sledována pro budoucí vydání. Dokumenty, které potřebují deklarovat vlastní vlastnosti XMP, dál přecházejí na cestu LoadFromString
Version 3.55.5
Změněno
- Dokumenty PDF/A nyní mají při ukládání normalizované příznaky anotací /F. ISO 19005-1 §6.5.3 vyžaduje, aby bit Print byl 1 a bity Hidden / Invisible / NoView byly u každé anotace 0; zapisovač nyní tuto masku aplikuje při ukládání, takže si volající nemusí pamatovat rozložení bitů. Případ /Subtype /Popup je vyňat — popupy jsou potomky jiných anotací a tradičně se netisknou
- Příznak AcroForm /NeedAppearances je nyní při ukládání v jakémkoli režimu PDF/A vynucen na false. ISO 19005-1 §6.9 vyžaduje, aby příznak chyběl nebo byl false; dříve zapisovač ponechával libovolnou hodnotu nastavenou volajícím, což vytvářelo dokumenty, které po otevření žádaly prohlížeč o regeneraci vzhledů, a tiše porušovalo specifikaci, když volající nastavil true. Oprava běží i pro dokumenty, které příznak dříve neměly vůbec — zapisovač emituje explicitní /NeedAppearances false, aby pro validátor nevznikla žádná nejednoznačnost
Version 3.55.4
Změněno
- AddStandardFont nyní v režimu PDF/A volání odmítá. ISO 19005-1 §6.3.4 ruší výjimku z PDF reference "Standard 14 may be unembedded": každý program písma v vyhovujícím souboru musí být vložen a knihovna obrysy Standard 14 nebalí. Fasáda vrací 0 tiše; volající by měli přejít na AddTrueTypeFont nebo AddType1Font se skutečným souborem písma
- AddTrueTypeFont nyní v režimu PDF/A tiše povyšuje Embed=0 (bez vložení) na Embed=1 (vložit celé písmo). Nevložená referenční cesta produkovala PDF, která závisela na náhradním fontu prohlížeče na systémovou instalaci Arial / Times / Courier, což porušuje ISO 19005-1 §6.3.4. Stávající volající, kteří si vložení vyžádali (Embed=1 nebo 2), nejsou dotčeni
- Kontrola shody /Encoding u nesymbolických TrueType (ISO 19005-1 §6.3.7 Cor2 vyžaduje WinAnsi nebo MacRoman jako název kódování nebo BaseEncoding bez /Differences) se v tomto vydání nepřidává, protože knihovna pro nesymbolické podmnožiny TrueType už emituje /WinAnsiEncoding a hlubší vynucení by vyžadovalo sledovat rozdělení symbolické/nesymbolické přes cestu podmnožiny. CheckCompliancePDFA 00034 / 00035 (přidané ve v3.51.0) zachytí jakýkoli nevyhovující výstup při validaci
Version 3.55.3
Změněno
- Slovníky fontů CIDFontType2 založené na TrueType nyní nesou
/CIDToGIDMap /Identityexplicitně. ISO 19005-1 §6.3.3.2 (Cor2) vyžaduje, aby tato položka byla přítomna u každého vloženého CIDFont Type 2; PDF reference připouští implicitní výchozí hodnotu Identity, ale PDF/A vyžaduje explicitní hodnotu. Zapisovač klíč dříve vynechával úplně, což způsobovalo, že veraPDF (a CheckCompliancePDFA 00033 přidaná ve v3.51.0) soubor označila. Název/Identityodpovídá rozložení GID-as-CID, které zapisovač už dříve produkoval implicitně, takže stávající dokumenty se vykreslují stejně - FontDescriptor /CharSet (pro podmnožiny Type 1) a /CIDSet (pro podmnožiny CIDFont) zůstávají TODO; zapisovač by musel sledovat, které názvy glyfů / CID skončily v podmnožině, aby je mohl vyplnit přesně. CheckCompliancePDFA 00031 a 00032 (také přidané ve v3.51.0) na absenci upozorní, takže ji uživatelé uvidí při validaci
Version 3.55.2
Změněno
AddImageDirectFromStringnyní odmítá filtry nekompatibilní s PDF/A přímo na vstupu. PředáníFilter = 'LZWDecode'je odmítnuto pro každou část PDF/A (ISO 19005-1 §6.1.10 a ekvivalentní pravidla ISO 19005-2 / -3). PředáníFilter = 'JBIG2Decode'nebo'JPXDecode'je odmítnuto pro PDF/A-1 (režimy 1 a 2). PDF/A-2 a PDF/A-3 připouštějíJPXDecodepodle ISO 19005-2 §6.2.8.3 s podmínkami podspecifikace (počet barevných kanálů, jednotnost bitové hloubky, požadavkyMETH/APPROX), které kontrola na straně zapisovače nevynucuje — volající v těchto režimech musí stále zajistit, že tok JPEG 2000 je v souladu se specifikací. Rozhraní vrací0bez hlášení, když je vyžádán zakázaný filtr- Vstupy TIFF, PNG, JPEG a JPEG 2000 načtené přes
AddImageFromFile/AddImageFromStreamnejsou ovlivněny: importér rozbalí zdrojové bajty a znovu je zakóduje pomocíFlateDecode(neboDCTDecodepro datové části JPEG), takže vstup LZW se nikdy nepřenese do výstupního řetězceFilter. ValidátorCheckCompliancePDFApřidaný ve v3.50.0 (00004) a v3.52.0 (00022, 00023) poskytuje při validaci druhou linii obrany pro jakoukoli nepřímou cestu, která by přesto propašovala zakázaný filtr do výstupu
Version 3.55.1
Změněno
AddLinkToHideFieldnyní v režimu PDF/A odmítá volání. Předchozí vydání ponechalo komentář tvrdící, že akce je s PDF/A kompatibilní, ale ISO 19005-1 Cor2 přidalo/Hidedo seznamu zakázaných akcí (§6.6.1) a ISO 19005-2 / -3 toto omezení přebírají. Rozhraní vrací0bez hlášení, když je voláno v režimu PDF/A, stejně jakoAddLinkToJavaScriptaAddLinkToImportDataAddSWFAnnotationFromFilenyní v režimu PDF/A odmítá volání. Anotace SWF / RichMedia obalují Flash média, která jsou zakázána v ISO 19005-1 §6.5.2 (žádné podtypyMovie/Sound) a zpřísněna v ISO 19005-2 §6.3.1 (žádné3D/Sound/Screen/Movie). Rozhraní vrací0bez hlášeníAddEmbeddedFileaAddLinkToEmbeddedFilenyní odmítají volání v režimech PDF/A-1 a PDF/A-2. ISO 19005-1 §6.1.11 zakazuje/EFa ISO 19005-2 §6.8 připouští pouze vložené soubory PDF/A; místo ověřování rekurzivní shody připojené datové části s PDF/A zapisovač v těchto režimech volání jednoduše odmítne. PDF/A-3 (SetPDFAMode5 nebo 6) zůstává povolené — automatické vložení/AFRelationshipviz v3.55.0SetOpenActionMenunyní v režimu PDF/A odmítá hodnotyMenuItemmimo whitelist {NextPage,PrevPage,FirstPage,LastPage}. ISO 19005-1 §6.6.1 omezuje pojmenované akce na tuto sadu, takže dříve API tiše vytvářelo nevyhovující slovníky Open-Action proFind/Print/FullScreen, které byveraPDFodmítlNewOptionalContentGroupnyní odmítá volání v režimech PDF/A-1 (SetPDFAMode1 nebo 2). ISO 19005-1 §6.1.13 zakazuje klíč/OCPropertiesv katalogu. PDF/A-2 (režimy 3/4) a PDF/A-3 (režimy 5/6) volitelný obsah připouštějí s omezeními uvedenými v příslušných §6.9, takže brána se spouští jen pro PDF/A-1
Version 3.55.0
Změněno
- Dokumenty PDF/A-3 nyní automaticky dostávají položku
/AFRelationshipu každého vloženého souboru. Dříve mohl soubor PDF/A-3 vytvořený knihovnou neprocházet validací, protože ISO 19005-3 Annex E, Table E.1 vyžadujeAFRelationshipu každé specifikace vloženého souboru. Zapisovač nyní při ukládání vkládá nakonfigurovanou výchozí hodnotu ('Unspecified'po instalaci) do každého slovníkuFileSpec, kterému položka chybí, a napodobuje tím automatické vloženíAFRelationshipzavedené dříve pro PDF/UA. Automatické vložení spouštějí pouze režimy PDF/A-3 (SetPDFAMode5 = PDF/A-3b nebo 6 = PDF/A-3a); PDF/A-1 a PDF/A-2 stále vložené soubory přímo odmítají podle ISO 19005-1 §6.1.11 a ISO 19005-2 §6.8 SetPDFA3DefaultAFRelationshipje nové API, které přepisuje výchozí hodnotu zapisovanou zapisovačem, když vloženému souboru chybí položka/AFRelationship. Přijímá hodnoty z ISO 19005-3 Table E.1'Source'(vložený soubor je zdrojový materiál, z něhož vznikl obsah PDF),'Data'(soubor je strukturovaná data pro vizuální tabulku nebo graf),'Alternative'(alternativní podoba, například zvuková verze),'Supplement'(doplňková reprezentace, například forma rovnice v MathML),'Unspecified'(vztah nelze zařadit mezi výše uvedené), nebo libovolný registrovaný název druhé třídy. Prázdný řetězec resetuje hodnotu na'Unspecified'. Přepsání po jednotlivých souborech je nadále dostupné přesSetEmbeddedFileAFRelationship- Nová API jsou na Delphi fasádě vystavena jako
TPDFlib.SetPDFA3DefaultAFRelationshipa přes DLL jakoDLSetPDFA3DefaultAFRelationship(PWideChar) aDLSetPDFA3DefaultAFRelationshipA(PAnsiChar)
Version 3.54.0
Změněno
LoadOutputIntentProfileje nové API, které nahrazuje vestavěný profil sRGB OutputIntent externím ICC profilem načteným z disku. Je vyžadováno při tvorbě dokumentů PDF/A v barevných prostorechDeviceCMYKneboDeviceGray, protože knihovna dodává jen profil sRGB. Typické použití je nejprve zavolatSetPDFAMode(které inicializuje kostruOutputIntent) a potéLoadOutputIntentProfile('C:\path\to\FOGRA39.icc', 'DeviceCMYK'), aby se nahradily bajty profilu a dokument se označil novým barevným prostorem. Vrací1při úspěchu,0při nenalezení souboru nebo neznámém barevném prostoru. Na Delphi fasádě je vystaveno jakoTPDFlib.LoadOutputIntentProfilea přes DLL jakoDLLoadOutputIntentProfile(PWideChar) aDLLoadOutputIntentProfileA(PAnsiChar). ISO 19005-1 §6.2.2 připouští v prouduDestOutputProfilelibovolný registrovaný ICC profilSetFillColorCMYK,SetTextColorCMYK,SetTextHighlightColorCMYK,SetTextUnderlineColorCMYK,AddSeparationColor,SetFillColorSep,SetLineColorSep,SetTextHighlightColorSepaSetTextColorSepnyní v režimu PDF/A uspějí, pokud má dokument profilOutputIntenttypuDeviceCMYK. Dříve tato API odmítala každé volání v režimu PDF/A bez ohledu naOutputIntent, což bránilo vytváření vyhovujících dokumentů CMYK. Brána je nyníPDFAMode = 0 OR OutputIntentColorSpace = 'DeviceCMYK', což odpovídá pravidlu ISO 19005-1 §6.2.3.3, žeDeviceCMYKje povolen, kdyžOutputIntentpoužívá profil CMYK, a ISO 19005-1 §6.2.3.4, které připouští alternativySeparation, jejichž základní barevný prostor je rovněž vyhovujícíSetTextShadernyní v režimu PDF/A uspěje, když má profilOutputIntentbuďDeviceRGB, neboDeviceCMYK. Samotné stínování není v PDF/A zakázané; validátor na čtecí straně ověřuje, že vnitřní barevný prostor stínování odpovídáOutputIntent. Předchozí přísné odmítání znemožňovalo použití vyhovujícího stínování- Odblokování CMYK / Separation / Shader závisí na značce
OutputIntentColorSpacenastavené pomocíAddOutputIntentaLoadOutputIntentProfile(zavedených ve v3.53.0). VoláníSetPDFAModebezLoadOutputIntentProfileponechá barevný prostor jakoDeviceRGB(vestavěný profil sRGB), takže volání CMYK se stále ve výchozím stavu odmítají — nové chování je aktivováno volitelně přesLoadOutputIntentProfile
Version 3.53.0
Změněno
- Slovník
OutputIntentnyní nese úplná skeletová pole PDF/A doporučená ISO 19005-1 §6.2.2 a předpřípravou Adobe Acrobat:/OutputCondition(lidsky čitelný popis barevných podmínek),/Info(text s podrobnější identifikací) a/RegistryName(adresa registru, výchozíhttp://www.color.org). Hodnoty mají ve starších jednoargumentových voláních výchozí podobu"sRGB IEC61966-2.1"/"sRGB IEC61966-2.1"/"http://www.color.org"; nové přetíženíAddOutputIntentpřijímá čtyři vlastní pole přímo, aby je volající mohli vyplnit pro své vlastní barevné podmínky AddOutputIntentzískává nové pětargumentové přetížení:AddOutputIntent(ColorSpace, OutputConditionIdentifier, OutputCondition, Info, RegistryName). Starý jednoargumentový tvar dál funguje beze změny; nyní jen předává práci novému přetížení s výchozími hodnotami sRGB. ArgumentColorSpacetaké volí počet komponent/Nzapsaný do slovníku vloženého profilu ICC (3proDeviceRGB,4proDeviceCMYK,1proDeviceGray); samotný vložený profil zůstává vestavěným tokem sRGB, dokud se v připravovaném APILoadOutputIntentProfileve v3.54.0 nezměníTPDFDocumentvystavujeOutputIntentColorSpacejako čtecí/zapisovatelnou vlastnost sledující barevný prostor posledního voláníAddOutputIntent. To se ve v3.54.0 stává podmínkou brány pro omezení na straně zapisovače u CMYK / Separation / Shader, kde barevná API, která dnes odmítají každé volání v režimu PDF/A, budou odmítat jen tehdy, když se barevný prostor neshoduje sOutputIntent
Version 3.52.0
Změněno
CheckCompliancePDFAnyní kontroluje poznámky, grafický stav, akce a form XObjecty a doplňuje tak pokrytí validátoru na čtecí straně pro kapitoly ISO 19005-1 6.2-6.6 a ekvivalentní diferenciační pravidla PDF/A-2/-3. Validátor hlásí 14 nových tříd problémů (00050-00067): zakázané podtypy poznámek (00050; ISO 19005-1 §6.5.2 zakazujeFileAttachment/Sound/Moviepro PDF/A-1 a ISO 19005-2 §6.3.1 zakazuje3D/Sound/Screen/Moviepro PDF/A-2 a PDF/A-3),/CApoznámky jiné než 1.0 (00051; §6.5.3),/Fpoznámky chybějící nebo sPrint=0/Hidden=1/Invisible=1/NoView=1(00052; §6.5.3, s výjimkou pro/Subtype /Popup),/AApoznámky (00054; §6.6.2), slovník vzhledu poznámky s klíči jinými než/Nnebo s nevyhovující hodnotou/N(00055; §6.5.3 Cor2), Widget poznámka s/A(00056; §6.9),ExtGState /TR(00058; §6.2.8),ExtGState /TR2jiné než/Default(00059; §6.2.8) a v PDF/A-1 pouze:ExtGState /SMaskjiné než/None(00061; §6.4),/BMjiné nežNormalneboCompatible(00062; §6.4),/CAnebo/cajiné než 1.0 (00063; §6.4)- Audit akcí kdekoli (00064, 00065) nahrazuje kontrolu pouze
OpenActionz v3.50.0 úplným průchodem, který označuje zakázané hodnoty/Sakcí (Launch,Sound,Movie,ResetForm,ImportData,JavaScript,Hide,SetState,NOP,Trans,GoTo3DView,Rendition,SetOCGState) a pojmenované akce, jejichž/Nleží mimo {NextPage,PrevPage,FirstPage,LastPage}, bez ohledu na to, kde se akce nachází (annotation /A,widget /A,outline /A,catalog /OpenActionatd.). ISO 19005-1 §6.6.1 - Audit
XObject(00066, 00067) hlásíPostScriptaReference XObject, plus zakázané klíče uForm XObject(/OPI,/PS,/Subtype2 = /PS) aImage XObject(/Alternates,/OPI,/Interpolate true). ISO 19005-1 §6.2.4 - §6.2.7
Version 3.51.0
Změněno
CheckCompliancePDFAnyní kontroluje také shodu písem a barevných prostorů, a to navíc k strukturálním kontrolám přidaným ve v3.50.0. Validátor hlásí devět nových tříd problémů: alespoň jeden program písma není vložen (00030; ISO 19005-1 §6.3.4 vyžaduje, aby byl vložen každý program písma včetně náhrad Standard 14), subset Type 1 postrádá/CharSetve svémFontDescriptor(00031; §6.3.5), subsetCIDFontpostrádá/CIDSet(00032; §6.3.5),CIDFontType2postrádá/CIDToGIDMap(00033; §6.3.3.2 Cor2), ne-symbolické TrueType s nevyhovujícím/Encoding(00034; §6.3.7 Cor2 vyžaduje WinAnsi/MacRoman přímo nebo jakoBaseEncoding, bez/Differences), symbolické TrueType, které stále nese/Encoding(00035; §6.3.7 Cor2), alespoň jedno písmo bez/ToUnicodev dokumentech PDF/A-Na nebo PDF/A-Nu (00036; uplatňuje se výjimka pro čtyři třídy), barevný prostorICCBased, který nevkládá proud profilu (00037; §6.2.3.2), a soubor, který používá zároveňDeviceRGBiDeviceCMYK(00038; §6.2.3.3 zakazuje jejich kombinaci)- Kontrola
/ToUnicode(00036) je omezena na úrovně shody A a U, protože Unicode mapování vyžadují jen tyto úrovně podle ISO 19005-1 §6.3.8 a ISO 19005-2 §6.2.11.7. Soubory úrovně B (PDF/A-1b, PDF/A-2b, PDF/A-3b) nejsou označovány. Výjimka pro čtyři třídy uznává předdefinovaná kódování (MacRomanEncoding,MacExpertEncoding,WinAnsiEncoding), písma Standard 14 Type 1 BaseFonts jako zástupce pro Adobe Standard Latin / Symbol glyph-name fonts a písma Type 0, jejichž potomkovskýCIDFontpoužívá registry Adobe-GB1, Adobe-CNS1, Adobe-Japan1 nebo Adobe-Korea1 - Audit písem prochází každý slovník
Font, klasifikuje jej podleSubtype(Type1,MMType1,TrueType,Type3,Type0s potomkovskýmCIDFontType0neboCIDFontType2) a teprve potom spouští příslušné kontroly. Složená písmaType 0předávají vložení a kontrolu subsetu svému potomkovskémuCIDFont, zatímco/ToUnicodezůstává na obálceType 0. Detekce subsetu používá standardní konvenci šesti velkých písmen jako prefixu
Version 3.50.0
Změněno
CheckCompliancePDFAnyní hlásí 15 dalších problémů s nevyhověním PDF/A, které validátor dříve přehlížel: chybějící pole/IDv traileru (00013), chybějící streamDocument Catalog /Metadata(00014), použití/Filterna streamu/Metadata(00015), streamové slovníky odkazující na externí soubory přes/F,/FFilternebo/FDecodeParms(00016), vložené soubory deklarované přes/EFv libovolném slovníku specifikace souboru nebo přes položku stromu názvů/EmbeddedFilesv dokumentech PDF/A-1 (00017, 00018),/OpenActionmířící na zakázaný typ akce (00019), slovníky dalších akcí/AAv katalogu dokumentu nebo na libovolné stránce (00020, 00021), filtryJBIG2DecodeneboJPXDecodev dokumentech PDF/A-1 (00022, 00023), filtryCrypt, jejichž/Namenení/Identity(00024),/Requirementsv katalogu dokumentu (00025),/Permss klíči jinými než/UR3a/DocMDP(00026) a/AcroForm /NeedAppearancesnastavené natrue(00027). Validátor nyní označuje zakázané typy akcíCatalog /OpenAction(/Launch,/Sound,/Movie,/ResetForm,/ImportData,/JavaScript,/Hide,/SetState,/NOP,/Trans,/GoTo3DView,/Rendition,/SetOCGState) a hodnoty/Npojmenovaných akcí mimo seznam {NextPage,PrevPage,FirstPage,LastPage} podle ISO 19005-1 §6.6.1- Kontroly specifické pro filtry (
JBIG2Decode,JPXDecode) a kontroly vložených souborů (/EF,/EmbeddedFiles) zůstávají omezeny na PDF/A-1, protože ISO 19005-2 §6.2.8.3 a §6.8 tato omezení výslovně uvolňují pro PDF/A-2 a PDF/A-3. Kontroly struktury dokumentu (/Metadata,/AcroForm /NeedAppearances,/OpenAction,/AA,/Requirements,/Perms) platí pro každou část PDF/A
Opraveno
- Parser
PDFAIDpřijímá příponu shody U (PDF/A-2U,PDF/A-3U) vedle stávajících variant A a B, takžeCheckCompliancePDFAuž při kontrole souboruPDF/A-2UneboPDF/A-3Uvytvořeného jiným nástrojem nehlásí falešné varování "00005 PDFA Mark NOT Found or invalid". Validátor nyní rozpoznává úrovně shody s mapováním Unicode, které byly přidány v ISO 19005-2:2011
Version 3.49.0
Změněno
AddLinkToImportDatavytváří anotaciLink, jejíž akce je akce importu dat PDF (/S /ImportData), která po kliknutí uživatele na odkaz naplní poleAcroFormv dokumentu z externího souboru FDF (ISO 32000-1 §12.6.4.8, Table 198). ParametrFileNameje vyhodnocen jako slovníkfilespecse stejnými pravidly normalizace cest, jaká používajíAddLinkToFile/AddLinkToFileEx(zpětná lomítka se podle ISO 32000-1 §7.11.2.1 převádějí na dopředná). Bit 0 vOptionspřepíná viditelný rámeček a bity 1–3 volí režim zvýraznění odkazu (Invert,Outline,Push), což odpovídá stávajícím konvencímAddLinkTo*. PDF 1.4 nebo novější. V PDF/A není povoleno, protože akce odkazuje na externí zdroj; rozhraní při volání v režimu PDF/A tiše vrací0. V Delphi knihovně a v rozhraní DLL je zpřístupněno jakoDLAddLinkToImportData/DLAddLinkToImportDataA(PWideCharaPAnsiCharform)
Version 3.48.0
Změněno
AddLinkToHideFieldvytváří anotaciLink, jejíž akce je akce skrytí PDF (/S /Hide), která při kliknutí na odkaz přepíná viditelnost jednoho nebo více políAcroForm(ISO 32000-1 §12.6.4.10, Table 196).FieldNamespřijímá jeden nebo více plně kvalifikovaných názvů polí oddělených čárkami, středníky nebo zalomeními řádku; jediný název zapíše/Tjako textový řetězec a dva nebo více názvů zapíše/Tjako pole, přičemž obě podoby specifikace dovoluje.HideFlagurčuje směr viditelnosti: nenulová hodnota pole skrývá (/H true) a nula je zobrazuje (/H false). Bit 0 vOptionspřepíná viditelný rámeček a bity 1–3 volí režim zvýraznění odkazu (Invert,Outline,Push), stejně jakoAddLinkToWeb/AddLinkToNamedAction. PDF 1.2 nebo novější. S PDF/A je kompatibilní, protože neodkazuje na externí zdroj. V Delphi knihovně a v rozhraní DLL je zpřístupněno jakoDLAddLinkToHideField/DLAddLinkToHideFieldA(PWideCharaPAnsiCharform)
Version 3.47.0
Změněno
AddLinkToNamedActionvytváří anotaciLink, jejíž akce je pojmenovaná akce PDF (/S /Named) spouštějící jeden ze čtyř standardizovaných navigačních příkazů prohlížeče definovaných v ISO 32000-1 §12.6.4.11, Table 194:NextPage,PrevPage,FirstPageaLastPage. ParametrNamedActionTypevolí příkaz (0=NextPage,1=PrevPage,2=FirstPage,3=LastPage); hodnoty mimo tento rozsah se vracejí kNextPage, takže zapisovač vždy vytvoří název/Nodpovídající specifikaci. Bit 0 vOptionspřepíná viditelný rámeček a bity 1–3 volí režim zvýraznění odkazu (Invert,Outline,Push), stejně jako stávající konvenceAddLinkToWeb/AddLinkToPage. Anotace vyžaduje PDF 1.1 nebo novější a je kompatibilní s PDF/A, protože neodkazuje na externí zdroj. Dostupné v Delphi knihovně i v rozhraních DLL
Version 3.46.1
Změněno
AddCaretAnnotationvytváří anotaci poznámky typu caret (PDF/Subtype /Caret) v daném obdélníku a označuje místo na stránce, kde byl text nebo obsah vložen, vynechán nebo jinak vyžaduje pozornost recenzenta. Podporuje dva typy symbolů (NoneaParagraph) pomocíSymbolType(0/1), konfigurovatelnou barvu, neprůhlednost, název, obsah a čas vytvoření / úpravy. Definováno v ISO 32000-1 §12.5.6.11. PDF 1.5 nebo novější. Dostupné v Delphi knihovně i v rozhraních DLL- Tato položka uzavírá doplnění geometrických anotací, které začalo ve v3.44.0 s
SquareaCircle.PDFlibPasnyní vytváří anotaceText,Stamp,FreeText,TextMarkup(Highlight/Underline/Squiggly/StrikeOut),Square,Circle,Line,Polygon,PolyLine,InkaCaret, navíc ke stávající podpořeLink,FileAttachment,SVG,U3DaSWF
Version 3.46.0
Změněno
AddInkAnnotationvytváří inkoustovou anotaci typu markup (PDF/Subtype /Ink) představující ručně psané tahy nebo volné značky nakreslené na stránce. Tahy se předávají jako jeden řetězec, kde více tahů odděluje znak'|'nebo zalomení řádku a uvnitř každého tahu dvojice souřadnic používají stejný formát s mezerami, čárkami, středníky a tabulátory jakoAddPolygonAnnotation. Například"100 100 110 105 120 110 | 200 200 210 205"popisuje dva samostatné tahy. Podporuje konfigurovatelnou šířku okraje, barvu inkoustu, neprůhlednost, název, obsah a časové značky. Definováno v ISO 32000-1 §12.5.6.13. PDF 1.3 nebo novější. Dostupné v Delphi knihovně i v rozhraních DLL- Každý tah musí obsahovat sudý počet hodnot (nejméně čtyři), jinak volání vrátí 0 a žádná anotace se nezapíše. /Rect se počítá automaticky z celkového rozsahu všech tahů plus malého odsazení, aby tahy zůstaly uvnitř ohraničujícího rámečku anotace
Version 3.45.0
Změněno
- AddPolygonAnnotation vytváří uzavřenou značkovou anotaci polygonu (PDF /Subtype /Polygon) s vrcholy zadanými jako řetězec souřadnicových dvojic oddělených mezerami, čárkami, středníky nebo tabulátory (např. "100 100 200 100 200 200 100 200"). Podporuje nastavitelnou šířku okraje, barvu okraje, volitelnou vnitřní výplňovou barvu, průhlednost, název, obsah a časové značky. Definováno v ISO 32000-1 §12.5.6.9. PDF 1.5 nebo novější. K dispozici v Delphi library a DLL rozhraních
- AddPolyLineAnnotation vytváří otevřenou značkovou anotaci lomené čáry (PDF /Subtype /PolyLine) se stejným formátem řetězce vrcholů a nastavitelnými styly koncových čar na každém konci (None, Square, Circle, Diamond, OpenArrow, ClosedArrow, Butt, ROpenArrow, RClosedArrow, Slash). Definováno v ISO 32000-1 §12.5.6.9. PDF 1.5 nebo novější. K dispozici v Delphi library a DLL rozhraních
- Obě anotace vyžadují alespoň dva body vrcholů (čtyři čísla) a sudý celkový počet čísel; volání vrátí 0, pokud se řetězec vrcholů nepodaří rozparsovat na platný seznam dvojic. /Rect se vypočítá z rozsahu vrcholů plus odsazení úměrného šířce okraje, aby koncové dekorace zůstaly viditelné
- Obě anotace automaticky zvýší verzi dokumentu na PDF 1.5, pokud jsou vypsány při nižším nastaveném minimu verze
Version 3.44.1
Změněno
- AddLineAnnotation vytváří značkovou anotaci čáry (PDF /Subtype /Line) mezi dvěma koncovými body s nastavitelnou šířkou okraje, barvou čáry, volitelnou vnitřní výplňovou barvou, styly koncových čar na obou koncích (None, Square, Circle, Diamond, OpenArrow, ClosedArrow, Butt, ROpenArrow, RClosedArrow, Slash), průhledností, názvem, obsahem a časovými značkami vytvoření/úpravy. Definováno v ISO 32000-1 §12.5.6.7. PDF 1.3 nebo novější. K dispozici v Delphi library a DLL rozhraních
- /Rect anotace se vypočítá z obou koncových bodů plus odsazení úměrné šířce okraje, aby koncové dekorace zůstaly uvnitř ohraničujícího rámečku anotace
Version 3.44.0
Změněno
- AddSquareAnnotation vytváří obdélníkovou značkovou anotaci (PDF /Subtype /Square) v zadaném obdélníku s nastavitelnou šířkou okraje, barvou okraje, volitelnou vnitřní výplňovou barvou, průhledností, názvem, obsahem a časovými značkami vytvoření/úpravy. Definováno v ISO 32000-1 §12.5.6.8. PDF 1.3 nebo novější. K dispozici v Delphi library a DLL rozhraních
- AddCircleAnnotation vytváří eliptickou značkovou anotaci (PDF /Subtype /Circle) vepsanou do zadaného obdélníku se stejným nastavitelným okrajem, výplní, průhledností, názvem, obsahem a časovými značkami jako AddSquareAnnotation. Definováno v ISO 32000-1 §12.5.6.8. PDF 1.3 nebo novější. K dispozici v Delphi library a DLL rozhraních
- Obě nové anotace automaticky zvýší verzi dokumentu na PDF 1.3, pokud jsou vypsány při nižším nastaveném minimu verze, a vyprodukují standardní sadu polí značkové anotace (/Type /Subtype /Rect /C /IC /BS /Border /CA /F /M /CreationDate /NM /T /Contents /Subj /P), aby je bylo možné po vytvoření upravovat v existujících pracovních postupech revizí v Acrobatu, Foxitu a Edge
Version 3.43.0
Změněno
- SetStructElemSpaceBefore a SetStructElemSpaceAfter nastavují atributy /SpaceBefore a /SpaceAfter (vlastník Layout) na aktuálně otevřeném strukturálním prvku a vyjadřují mezery před a po blokových prvcích v bodech. Definováno v ISO 32000-1 §14.8.5.4.2 Tabulka 340. K dispozici v Delphi library, ActiveX (Dispids 73008051/73008052) a DLL rozhraních
- SetStructElemStartIndent a SetStructElemEndIndent nastavují atributy /StartIndent a /EndIndent (vlastník Layout) a vyjadřují odsazení od začátku a konce obsahu v bodech s ohledem na směr psaní. Definováno v ISO 32000-1 §14.8.5.4.2 Tabulka 340. K dispozici v Delphi library, ActiveX (Dispids 73008053/73008054) a DLL rozhraních
- SetStructElemColor nastavuje atribut /Color (vlastník Layout) jako trojici RGB (každá složka 0.0-1.0) a popisuje barvu popředí prvku pro enginy přetékání textu a následné kontrolory barevného kontrastu. Definováno v ISO 32000-1 §14.8.5.4.2 Tabulka 340. K dispozici v Delphi library, ActiveX (Dispid 73008055) a DLL rozhraních
Opraveno
- Opraven problém serializace v BuildStructElemDictRef: číselné hodnoty atributů zapsané jako jediný token (například SpaceBefore, SpaceAfter, StartIndent, EndIndent) se zapisovaly jako PDF jména místo PDF čísel. Oprava platí pro větve atributů s jedním i více vlastníky
Version 3.42.0
Změněno
- Přidány tři nové kontroly shody: kód 00006 označuje šifrované dokumenty (šifrování je zakázáno ve všech verzích PDF/A); kód 00007 označuje dokumenty bez položky OutputIntents v katalogu (vyžadováno ve všech verzích PDF/A); kódy 00011 a 00012 označují dokumenty bez MarkInfo nebo StructTreeRoot, když je úroveň shody -a (přístupnost)
Opraveno
- CheckCompliancePDFA nyní správně ověřuje všech šest režimů PDF/A (1a, 1b, 2a, 2b, 3a, 3b). Kontrola PDFAID (kód 00005) přijímá kteroukoli z šesti platných značek XMP místo pouze '1B'. Kontrola horní hranice verze (00002) používá 1.4 pro PDF/A-1 a 1.7 pro PDF/A-2 a PDF/A-3
- Kontrola OCProperties (kód 00003) je nyní podmíněná: platí pouze pro dokumenty PDF/A-1, kde je volitelný obsah (vrstvy) zakázán. PDF/A-2 a PDF/A-3 vrstvy dovolují a už nejsou označovány
Version 3.41.0
Změněno
- Režim PDF/A nyní vynucuje zakázané operace na úrovni API. Když je aktivní některý režim PDF/A (kterýkoli z režimů 1-6), volání SetEncryption, AddSeparationColor, SetFillColorCMYK, SetTextColorCMYK nebo jakéhokoli jiného API CMYK/Separation/Shader vrátí 0 a nemá žádný efekt, což je v souladu s požadavkem PDF/A na jediný výstupní intent sRGB
- Průhlednost je v PDF/A-1 (režimy 1 a 2) zakázána: SetTransparency, SetBlendMode a SetPageTransparencyGroup vracejí 0 a jsou bez efektu, když je aktivní režim 1 nebo 2. PDF/A-2 a PDF/A-3 (režimy 3-6) dovolují omezenou průhlednost a nejsou omezeny
- Akce JavaScriptu jsou zakázány ve všech režimech PDF/A (1-6): SetOpenActionJavaScript, PageJavaScriptAction, DocJavaScriptAction, AddGlobalJavaScript a AddLinkToJavaScript při aktivním jakémkoli režimu PDF/A vracejí 0 a jsou bez efektu. ISO 19005-1 §6.6.1 JavaScript v dokumentech PDF/A výslovně zakazuje
- Rozhraní pro přílohy souborů (EmbedFile, AddFileAttachment) jsou v režimech PDF/A-1 a PDF/A-2 (1-4) blokována. V PDF/A-3 (režimy 5 a 6), který výslovně dovoluje libovolné vložené soubory, zůstávají funkční
Version 3.40.0
Přidáno
- SetPDFAMode nyní podporuje úrovně shody PDF/A-2 a PDF/A-3. Předání NewMode=3 znamená PDF/A-2b, 4 znamená PDF/A-2a, 5 znamená PDF/A-3b a 6 znamená PDF/A-3a. PDF/A-2 cílí na PDF 1.7 a dovoluje vrstvy, interaktivní formuláře, obrázky JPEG2000 a omezenou průhlednost. PDF/A-3 rozšiřuje PDF/A-2 o možnost libovolných vložených souborů (jakéhokoli typu MIME). Všechny varianty -a automaticky zapisují /MarkInfo a značky strukturovaného PDF požadované úrovní přístupnosti
Změněno
- GetInformation(201) vrací '1' až '6' podle aktivního režimu PDF/A, což odpovídá novému číslování režimů
Opraveno
- Oprava: SetPDFAMode(1) (PDF/A-1a) byla dříve bez efektu kvůli interní chybě směrování zavedené ve v3.20.0. Nyní správně zapisuje /MarkInfo a /OutputIntents a nastavuje XMP pdfaid:part=1/conformance=A
Version 3.39.0
Změněno
- SetStructElemWritingMode nastavuje atribut /WritingMode (vlastník Layout) na aktuálně otevřeném strukturálním prvku. Platné hodnoty jsou LrTb (zleva doprava, výchozí pro latinská písma), RlTb (zprava doleva, pro arabštinu a hebrejštinu) a TbRl (shora dolů zprava doleva, pro tradiční svislý CJK text). Definováno v ISO 32000-1 §14.8.5.4.2 Tabulka 340. K dispozici v Delphi library, ActiveX (Dispid 73008049) a DLL rozhraních
- SetStructElemListNumbering nastavuje atribut /ListNumbering (vlastník List) na aktuálně otevřeném strukturálním prvku. Podporované hodnoty zahrnují None, Disc, Circle, Square (nečíslované značky) a Decimal, UpperRoman, LowerRoman, UpperAlpha, LowerAlpha (číslování v pořadí). Atribut se nastavuje na prvek L (seznam) a umožňuje asistivní technologii správně oznámit typ seznamu. Definováno v ISO 32000-1 §14.8.5.3.2 Tabulka 336. K dispozici v Delphi library, ActiveX (Dispid 73008050) a DLL rozhraních
Version 3.38.0
Změněno
- SetStructElemColSpan nastavuje atribut /ColSpan (vlastník Table) na aktuálně otevřeném strukturálním prvku a určuje, přes kolik sloupců buňka sahá. Definováno v ISO 32000-1 §14.8.5.7.2 Tabulka 337. K dispozici v Delphi library, ActiveX (Dispid 73008047) a DLL rozhraních
- SetStructElemRowSpan nastavuje atribut /RowSpan (vlastník Table) na aktuálně otevřeném strukturálním prvku a určuje, přes kolik řádků buňka sahá. Definováno v ISO 32000-1 §14.8.5.7.2 Tabulka 337. K dispozici v Delphi library, ActiveX (Dispid 73008048) a DLL rozhraních
- Obě funkce jsou pohodlné obálky ekvivalentní volání AddTagAttribute s Owner='Table' a příslušným názvem atributu. Doplní SetStructElemScope pro plně popsané tabulkové buňky ve složitých tabulkách nebo tabulkách s přesahujícími záhlavími
Version 3.37.2
Změněno
- GetPDFUADiagnostics nyní hlásí FORM-NO-TOOLTIP:N, když N interaktivních formulářových polí (Widget annotations) postrádá položku TU (tooltip / accessible name). ISO 14289-1 §7.18.4 vyžaduje, aby všechna interaktivní formulářová pole obsahovala položku TU, aby asistivní technologie mohla po získání fokusu oznámit jejich účel uživateli. /TU je přístupný název, který čtečky obrazovky vyslovují nahlas; je odlišný od /T, což je částečný název pole používaný pro programový přístup a odeslání formuláře
Version 3.37.1
Změněno
- GetPDFUADiagnostics nyní hlásí LIST-STRUCT:N, když N strukturálních prvků LI nebo LBody se objevuje mimo svůj požadovaný rodičovský prvek. ISO 32000-1 §14.8.4.4 vyžaduje, aby LI byl přímým potomkem L (seznamu) a LBody přímým potomkem LI (položky seznamu). Chybné vnoření seznamu brání asistivní technologii ve správném procházení a oznamování obsahu seznamu a může způsobit chyby validace struktury dokumentu ve validátorech PDF/UA-1
Version 3.37.0
Změněno
- BeginTagEx2 je nové API, které otevře strukturální prvek a nastaví všechny hlavní vlastnosti prvku v jediném volání. Kromě parametrů TagType, AltText, ActualText a Lang z BeginTagEx přijímá BeginTagEx2 také Title (/T, pro navigační panel Tags), ElemID (/ID, jedinečný identifikátor prvku) a Expansion (/E, plný text zkratky nebo akronymu). Předání prázdného řetězce u kteréhokoli z těchto tří dalších parametrů je ekvivalentní vynechání odpovídajícího setteru. BeginTagEx2 snižuje množství opakovaného kódu u dobře popsaných prvků - místo volání BeginTagEx následovaného samostatným SetStructElemTitle, SetStructElemID a SetStructElemExpansion lze všech sedm vlastností nastavit jediným voláním. Funkce je k dispozici v Delphi library, ActiveX (Dispid 73008046) a DLL rozhraních
Version 3.36.1
Změněno
- GetPDFUADiagnostics nyní hlásí TABLE-TH-NO-SCOPE:N, když N strukturálních prvků TH (hlavičková buňka tabulky) postrádá atribut Scope. ISO 32000-1 §14.8.4.3.4 Tabulka 337 definuje Scope (Row, Column nebo Both) jako atribut, který popisuje, na které datové buňky se hlavičková buňka vztahuje. Bez něj nemůže čtečka obrazovky a další asistivní technologie spolehlivě přiřadit hlavičkové buňky k datovým buňkám ve složitých tabulkách nebo tabulkách s více hlavičkami, což vyžaduje ISO 14289-1 §7.5. Po označení každého prvku TH hned zavolejte SetStructElemAttr('Table','Scope', 'Column') (nebo 'Row' / 'Both')
Version 3.36.0
Změněno
- SetStructElemExpansion je nové API, které nastavuje položku /E (expansion text) na aktuálně otevřeném strukturálním prvku (ISO 32000-1 §14.9.5). Expanzní text je plně rozepsaná podoba zkratky nebo akronymu obsaženého v prvku - např. "World Wide Web" pro Span, jehož text je "WWW". Čtečky obrazovky vyslovují expanzi místo pokusu vyslovit zkrácené znaky, což je kritické pro přístupnost technického a vědeckého obsahu. PDF/UA-1 (ISO 14289-1 §7.2) vyžaduje, aby přirozený jazyk šel jednoznačně určit; /E je standardní mechanismus pro zkratky a akronymy. Funkce je k dispozici v Delphi library, ActiveX a DLL rozhraních
Version 3.35.1
Změněno
- GetPDFUADiagnostics nyní hlásí DOCINFO-TITLE-MISSING, když je položka /Title v dokumentovém informačním slovníku chybějící nebo prázdná. PDF/UA-1 (ISO 14289-1) vyžaduje název dokumentu, aby jej čtečky obrazovky mohly oznámit při otevření dokumentu. Existující kontrola DISPLAYDOCTITLE-FALSE potvrzuje, že je název zobrazen v záhlaví okna prohlížeče; DOCINFO-TITLE-MISSING je doplňková - potvrzuje, že samotná hodnota názvu je nastavena. Hodnotu doplníte voláním SetDocumentInfo('Title', ...)
Version 3.35.0
Změněno
- SetStructElemTitle je nové API, které nastavuje položku /T (title) na aktuálně otevřeném strukturálním prvku (ISO 32000-1 §14.7.2 Tabulka 324). Titul je lidsky čitelný popisek, který identifikuje konkrétní instanci prvku - například "Chapter 1", "Summary Table" nebo "Figure 3: Quarterly Sales" - a zobrazuje se v navigačním panelu Tags v PDF prohlížečích a používá se nástroji pro nápravu přístupnosti. /T je odlišné od /Alt (alternativní text pro uživatele se zhoršeným vnímáním) a /ActualText (oprava textu na úrovni glyfů); nejvíc se hodí pro ne-textové kontejnerové prvky, jako jsou Table, Figure, Form, Sect a Div. Zadejte prázdný řetězec pro vymazání dříve nastavené hodnoty. Funkce je k dispozici v Delphi library, ActiveX a DLL rozhraních
Version 3.34.0
Změněno
- SetStructElemAltText je nové API, které nastavuje položku /Alt na aktuálně otevřeném strukturálním prvku (ISO 32000-1 §14.9.3). Je ekvivalentní předání AltText do BeginTag, ale dovoluje alternativní textový popis nastavit nebo aktualizovat i po otevření prvku - užitečné, když je popis vypočítán odděleně od typu prvku. PDF/UA-1 (ISO 14289-1 §7.5) vyžaduje Alt text u prvků Figure a Formula; GetPDFUADiagnostics už hlásí FIGURE-NO-ALT:N pro chybějící hodnoty. Funkce je k dispozici v Delphi library, ActiveX a DLL rozhraních
Version 3.33.1
Přidáno
- GetPDFUADiagnostics nyní obsahuje kontrolu ROLEMAP-UNMAPPED:N, která zjišťuje názvy vlastních typů strukturálních prvků použitých v dokumentu, pro něž v slovníku /RoleMap chybí položka. ISO 14289-1 §7.1 a ISO 32000-1 §14.7.3 vyžadují, aby byl každý nestandardní typ struktury namapován na standardní typ PDF (například P, Span nebo Figure), aby asistivní technologie mohla určit, jak s prvkem zacházet. Když se najdou N nenamapovaných typů, popis problému obsahuje seznam názvů typů, aby bylo jasné, které položky AddRoleMap jsou potřeba. Rozpoznává se a z reportu se vylučuje všech 49 standardních typů struktury definovaných v ISO 32000-1 Tabulka 333 (PDF 1.7)
Version 3.33.0
Změněno
- SetStructElemLang je nové API, které nastavuje položku /Lang na aktuálně otevřeném strukturálním prvku (ISO 32000-1 §14.9.2). Jazyková značka přebíjí jazyk na úrovni dokumentu deklarovaný pomocí SetDocumentLanguage nebo SetPDFUAMode pro prvek i všechny jeho potomky, takže vícejazyčné dokumenty mohou označit každý span správnou značkou BCP 47 (např. 'en-US', 'fr', 'zh-Hant-TW'). Čtečky obrazovky používají /Lang na úrovni prvku k výběru vhodného syntetizátoru řeči nebo hlasu při čtení dokumentu nahlas. Funkce je k dispozici v Delphi library, ActiveX a DLL rozhraních
Version 3.32.0
Změněno
- SetStructElemActualText je nové API, které nastavuje položku /ActualText na aktuálně otevřeném strukturálním prvku (ISO 32000-1 §14.9.4). Použijte jej k určení přesného Unicode textu, který sekvence glyfů představuje, když by extrakce z content streamu vedla k nesprávným výsledkům - nejčastější případy jsou glyfy ligatur OpenType (U+FB00 ff, U+FB01 fi, U+FB02 fl) a zkratky s nejednoznačnou expanzí. ActualText doplňuje, nikoli nahrazuje, vykreslený obsah; přepisuje, co asistivní technologie a extraktory textu pro tento prvek přečtou, aniž by potlačil vizuální vykreslení. Funkce je k dispozici v Delphi library, ActiveX a DLL rozhraních
Version 3.31.1
Změněno
- GetPDFUADiagnostics nyní při hlášení chybějícího Alt textu (FIGURE-NO-ALT:N) kontroluje kromě Figure prvků také prvky Formula. ISO 32000-1 §14.9.3 vyžaduje alternativní popisy pro grafické figury i matematické vzorce; dříve se kontrolovaly jen Figure prvky
- GetPDFUADiagnostics nyní hlásí PDF-VERSION-LOW, když je verze PDF dokumentu nižší než 1.7. PDF/UA-1 (ISO 14289-1) vychází z PDF 1.7 (ISO 32000-1:2008); dokumenty ve verzi PDF 1.5 nebo 1.6 nesplňují požadavky základní specifikace. Zavolejte SetPDFUAMode, aby se verze automaticky zvýšila na 1.7
Version 3.31.0
Opraveno
- Podpora identifikátorů strukturálních prvků a přiřazení záhlaví tabulky je nyní k dispozici. SetStructElemID přiřadí aktuálně otevřenému strukturálnímu prvku jedinečný řetězcový identifikátor (/ID); při uložení dokumentu se tyto identifikátory shromažďují do jmenného stromu /IDTree v kořeni stromu struktury, takže přístupové nástroje i křížové odkazy mohou prvky najít podle ID (ISO 32000-1 §14.7.4). SetStructElemHeaders propojí aktuální buňku tabulky (TD nebo TH) s jednou či více záhlavními buňkami pomocí čárkami odděleného seznamu dříve přiřazených ID a zapíše pole /Headers ve slovníku vlastností Table (ISO 32000-1 §14.8.5.7.2). Tyto dvě funkce společně podporují složitou značku tabulek pro PDF/UA-1 (ISO 14289-1 §7.10) a WCAG 2.x SC 1.3.1. Obě funkce jsou k dispozici v rozhraních Delphi library, ActiveX a DLL. AddTagAttribute nyní také správně zpracovává atribut /Headers s hodnotami zapsanými jako pole textových řetězců PDF oddělených čárkami
Version 3.30.1
Přidáno
- GetPDFUADiagnostics nyní zahrnuje kontrolu HEADING-LEVEL-SKIP:N, která detekuje skoky úrovní nadpisů v pořadí dokumentu (např. H1 bezprostředně následovaný H3 bez H2 mezi nimi). Kontrola provede předřazený průchod celým stromem strukturálních prvků a započítá každý případ, kdy je další úroveň nadpisu o více než jednu vyšší než předchozí. Obecné prvky H se považují za H1. Návrat k vyšší úrovni nadpisu (H3 → H1) se jako skok nepočítá. WCAG 2.x Success Criterion 1.3.1 a ISO 14289-1 §7.1 vyžadují, aby nadpisy byly vnořené bez mezer
Version 3.30.0
Změněno
- Pro tagované PDF a dokumenty PDF/UA jsou nyní podporovány atributy strukturálních prvků. Tři nové API funkce umožňují připojit atributy k právě vytvářenému strukturálnímu prvku na zásobníku tagů: AddTagAttribute (obecné použití, libovolný owner/name/value), SetStructElemScope (pohodlný obal, který nastaví atribut /Scope pod ownerem Table pro záhlavní buňky TH — ISO 32000-1 §14.8.5.7.2) a SetStructElemBBox (pohodlný obal, který nastaví atribut /BBox pod ownerem Layout pro figury a další vizuálně umístěné prvky — ISO 32000-1 §14.8.5.4). Při uložení dokumentu se atributy zapisují jako slovníky atributů /A v každém strukturálním prvku; více atributů od stejného ownera se seskupí do jednoho slovníku a atributy od různých ownerů se zapisují jako pole slovníků. Všechny tři funkce jsou k dispozici v rozhraních Delphi library, ActiveX a DLL
Version 3.29.1
Přidáno
- GetPDFUADiagnostics nyní obsahuje dvě další kontroly: zda některým Figure strukturálním prvkům v dokumentu chybí hodnota Alt text (hlášeno jako FIGURE-NO-ALT:N podle ISO 14289-1 §7.5 a ISO 32000-1 §14.9.3), a zda některé strukturální prvky stále nejsou uzavřeny, protože nebyl volán EndTag (hlášeno jako STRUCT-UNCLOSED:N). Kontrola figure provádí úplný rekurzivní průchod stromem strukturálních prvků a pokrývá prvky ve všech úrovních vnoření
Version 3.29.0
Změněno
- GetPDFUADiagnostics je nové diagnostické API, které kontroluje dokument na možné problémy s vyhověním PDF/UA-1 (ISO 14289-1) a vrací seznam nálezů oddělený novými řádky. Provádí se šest kontrol: zda je nastaven MarkInfo/Marked (tagged PDF), zda katalog dokumentu obsahuje položku /Lang, zda je ViewerPreferences/DisplayDocTitle true, zda metadata XMP obsahují identifikátor pdfuaid:part, počet nevyňatých anotací bez položky Contents a počet vložených souborů bez položky AFRelationship. Každý nález je označen krátkým kódem (např. LANG-MISSING, ANNOT-NO-CONTENTS:3), za kterým následuje srozumitelný popis. Pokud se nenajdou žádné problémy, vrací prázdný řetězec. K dispozici v rozhraních Delphi library, ActiveX a DLL
Version 3.28.5
Změněno
- Zlepšení přístupnosti anotací PDF/UA-1: když anotace FileAttachment nemá položku Contents ani pole /T, použije se jako náhradní přístupový popis název souboru z přidružené specifikace souboru (/FS /UF nebo /F) této anotace. Tím se dokončuje řetězec náhrad pro Contents anotací: /T → Link URI → název Stamp → název souboru FileAttachment. Čtečky obrazovky dostanou název připojeného souboru místo ticha, což splňuje ISO 14289-1 §7.18.1 pro nejběžnější typy anotací
Version 3.28.4
Změněno
- Zlepšení přístupnosti anotací PDF/UA-1: když anotace Stamp nemá položku Contents (nebo má prázdnou) ani pole /T, použije se jako náhradní přístupový popis název typu razítka z položky /Name této anotace (např. "Approved", "Draft", "Confidential", "Final"). Tím se rozšiřuje řetězec náhrad pro Contents zavedený ve v3.28.3 na anotace Stamp, které jsou běžné v pracovních postupech s kontrolovanými nebo schvalovanými dokumenty a často nemají explicitní hodnotu Contents
Version 3.28.3
Změněno
- Zlepšení přístupnosti anotací PDF/UA-1: když anotace Link nemá položku Contents (nebo má prázdnou) ani pole /T, použije se jako náhradní přístupový popis URI z akce URI této anotace. To platí pouze při zpracování SetPDFUAMode a jen pro anotace Link, které nesou akci /URI. Čtečky obrazovky dostanou URL jako poslední možný popisek, což splňuje ISO 14289-1 §7.18.1 v běžném případě, kdy autoři vytvářejí odkazy bez lidsky čitelného popisu
Version 3.28.2
Změněno
- SetEmbeddedFileAFRelationship je nové API pro explicitní nastavení hodnoty AFRelationship ve slovníku specifikace souboru vloženého souboru. Vyžaduje to ISO 14289-1 (PDF/UA-1) §7.11 a volajícím to umožňuje určit sémantický vztah vloženého souboru k obsahu dokumentu výběrem z pěti platných hodnot: Source, Data, Alternative, Supplement nebo Unspecified. Když je aktivní SetPDFUAMode, každému vloženému souboru bez klíče AFRelationship se automaticky přiřadí Unspecified; tuto funkci použijte, chcete-li toto výchozí nastavení před uložením přepsat. K dispozici v rozhraních Delphi library, ActiveX a DLL
Version 3.28.1
Změněno
- Když je SetPDFUAMode volána nad dokumentem, jehož metadata XMP nesou obecný výchozí titul knihovny místo titulu specifického pro dokument, je tento titul nyní automaticky nahrazen hodnotou z položky /Info Title v dokumentu (pokud je přítomna). Tím se zajistí, že paket XMP pdfuaid:part-1 odráží skutečný název dokumentu místo zástupného textu, což splňuje očekávání validátorů PDF/UA-1
- Parser XMP (LoadFromString) nyní při načtení dokumentu čte hodnotu dc:title z existujících metadat XMP, takže při průchodu PDF, které už dc:title obsahuje, se tento název správně zachová místo návratu k výchozímu zástupnému textu
Version 3.28.0
Změněno
- BeginArtifactEx(ArtifactType, ArtifactSubtype) je nové API pro tagged PDF, které rozšiřuje BeginArtifact tak, aby jedním voláním vyjádřilo jak artefaktový /Type, tak Pagination /Subtype. Když jsou oba parametry neprázdné, zapisuje se operátor /Artifact << /Type /T /Subtype /S >> BMC, což umožňuje plně určené Pagination artefakty, jako jsou záhlaví a zápatí podle ISO 32000-1 §14.8.2.2.1. Je-li neprázdný jen jeden parametr, použije se odpovídající jedno-klíčová podoba. Exportovány jsou také vstupní body DLL DLBeginArtifactEx a DLBeginArtifactExA
Version 3.27.2
Opraveno
- BeginArtifact nyní správně rozlišuje typy artefaktů od podtypů stránkování. Je-li argument Pagination, Layout nebo Page (typy artefaktů podle ISO 32000-1 §14.8.2.2.1 Table 330), operátor značeného obsahu zapisuje /Type místo /Subtype. Jiné hodnoty, jako Header, Footer a Watermark, se nadále zapisují jako /Subtype. Tím se opravuje dříve nesprávný výstup, který by při záměru označit artefakt stránkování zapisoval /Subtype /Pagination
Version 3.27.1
Změněno
- Když je aktivní režim PDF/UA a dokument obsahuje vložené soubory, každý slovník specifikace souboru, kterému chybí položka AFRelationship, nyní při ukládání automaticky jednu dostane. Zapisovaná hodnota je /Unspecified, čímž se splňuje požadavek ISO 14289-1 §7.11, že každý vložený soubor musí nést klíč AFRelationship. To platí jak pro soubory přidané pomocí EmbedFile, tak pro vložené soubory, které již byly v načteném dokumentu
Version 3.27.0
Změněno
- AddRoleMap(CustomType, StandardType) je nové API pro tagged PDF, které registruje mapování z vlastního (nestandardního) názvu strukturálního prvku na standardní typ PDF struktury. Po uložení se tato mapování zapisují do slovníku RoleMap v kořeni stromu struktury, čímž se splňuje požadavek ISO 14289-1 §7.1 pro dokumenty používající aplikačně specifické názvy tagů. Lze zaregistrovat více mapování; duplicitní klíče přepíše poslední volání. Exportovány jsou také vstupní body DLL DLAddRoleMap a DLAddRoleMapA
Version 3.26.0
Změněno
- BeginTagEx(TagType, AltText, ActualText, Lang) je nové API pro tagged PDF, které rozšiřuje BeginTag o explicitní atribut přirozeného jazyka. Když je Lang neprázdný, zapisuje se do atributu /Lang strukturálního prvku, čímž se umožňuje jazyková anotace na úrovni prvku požadovaná ISO 14289-1 §7.2 pro vícejazyčné dokumenty. Předáním prázdného řetězce Lang se chová stejně jako BeginTag. Exportovány jsou také vstupní body DLL DLBeginTagEx a DLBeginTagExA
Version 3.25.1
Změněno
- Nepodmnožinová písma TrueType načtená s výchozí stránkou kódů Windows (WinAnsiEncoding) nyní dostávají stream ToUnicode CMap, což umožňuje spolehlivou extrakci Unicode textu a kopírování/vkládání pro tato písma. Dříve se stream ToUnicode zapisoval jen tehdy, když bylo přítomné explicitní přepsání stránky kódů nebo pole Differences; běžná větev s výchozím kódováním ho postrádala
- Stejná oprava platí pro písma TrueType načtená s explicitní ne-výchozí stránkou kódů, ale bez pole Differences, a pro písma načtená prostřednictvím formátu packaged-font
Version 3.25.0
Změněno
- Když je aktivní režim PDF/UA, anotace bez výjimky (všechny typy kromě Widget, PrinterMark a TrapNet), kterým chybí neprázdná položka Contents, ji nyní při ukládání dostanou automaticky. Jako náhradní hodnota se použije /T (title / author) anotace, což splňuje ISO 14289-1 §7.18.1 pro anotace, které nesou nadpis, ale nemají explicitní přístupový popis
Version 3.24.0
Změněno
- Když je aktivní režim PDF/UA, interaktivní formulářová pole, kterým chybí položka TU (tooltip / alternate description), ji nyní při ukládání dostanou automaticky. Jako náhradní hodnota se použije částečný název pole (položka /T), což zajišťuje, že čtečky obrazovky dokážou identifikovat každé pole. Tlačítka typu Push button jsou z tohoto požadavku správně vyňata podle ISO 14289-1 §7.18.4
Version 3.23.1
Změněno
- GetInformation(200) vrací '1', když je na vybraném dokumentu aktivní režim PDF/UA-1, takže volající mohou za běhu dotazovat stav souladu s režimem
- GetInformation(201) vrací '1' pro PDF/A-1a, '2' pro PDF/A-1b nebo prázdný řetězec, když je režim PDF/A vypnutý
- GetInformation(313) vrací řetězec verze PDF, ve které je cílové uložení právě uzamčeno, nebo prázdný řetězec pro dokumenty s volným verzováním
Opraveno
- GetInformation(311) a GetInformation(312) nyní správně vracejí řetězec požadavku na verzi a název funkce z nejnovějšího konfliktu uzamčení verze (dříve slibované ve záznamu v3.20.3, ale dosud neimplementované)
Version 3.23.0
Změněno
- SetMarkInfo(Marked) je nyní veřejné API, které umožňuje nastavit příznak MarkInfo.Marked nezávisle na plném nastavení PDF/UA-1 prováděném SetPDFUAMode. Když je Marked 1, MarkInfo.Suspects se také nastaví na false, jak vyžaduje ISO 14289-1 §7.18.6
- Když je aktivní režim PDF/UA, všechny stránky při ukládání automaticky dostanou položku /Tabs /S, čímž se splňuje požadavek ISO 14289-1 §7.18.4 na pořadí záložek založené na struktuře
- HTML referenční dokumentace byla doplněna pro SetPDFUAMode, SetDocumentLanguage, SetMarkInfo, BeginTag, EndTag, BeginArtifact a EndArtifact, včetně úplných tabulek syntaxe a příkladů použití
Version 3.22.0
Změněno
- BeginTag(TagType, AltText, ActualText) otevírá prvek struktury tagged PDF v aktuálním proudu obsahu, zapisuje operátor BDC s automaticky přiřazeným MCID a registruje prvek ve stromu struktury dokumentu. TagType je libovolný standardní typ struktury PDF (P, H1, Figure, Table atd.). AltText a ActualText jsou volitelné přístupové řetězce kódované jako textové řetězce PDF (UTF-16BE)
- EndTag uzavírá naposledy otevřený strukturální prvek a zapisuje do proudu obsahu odpovídající operátor EMC
- BeginArtifact(SubType) označuje oblast obsahu jako PDF artefakt (pagination artefact, background atd.) a zapisuje operátor BMC. SubType je volitelný; je-li uveden, zapisuje se jako /Artifact << /Subtype /SubType >>
- EndArtifact uzavírá oblast artefaktu operátorem EMC
- Při ukládání, pokud byly zaregistrovány jakékoli tagované strukturální prvky, knihovna automaticky sestaví kompletní StructTreeRoot, přiřadí klíče StructParents dotčeným stránkám a zapíše číselný strom ParentTree, čímž splňuje požadavky ISO 32000-1 §14.7 pro tagged PDF
- Standardní písma Type 1 (Helvetica, Times, rodina Courier, Symbol) a vložená písma Type 1 s kódováním WinAnsi nyní dostávají stream ToUnicode CMap, což umožňuje spolehlivou extrakci Unicode textu a kopírování/vkládání pro tyto typy písem
Version 3.21.0
Změněno
- SetPDFUAMode(Language) aktivuje režim shody PDF/UA-1 (ISO 14289-1): automaticky zvýší dokument na PDF 1.7, zapíše MarkInfo.Marked a MarkInfo.Suspects, zapne DisplayDocTitle ve ViewerPreferences, nastaví Catalog.Lang, když je Language neprázdný, a zapíše položku jmenného prostoru XMP pdfuaid:part = 1 vyžadovanou ISO 14289-1 Section 6.7.11
- SetDocumentLanguage(Language) zapisuje položku Catalog /Lang přímo, takže lze jazyk dokumentu deklarovat nezávisle na režimu PDF/UA
- MarkInfo.Suspects se nyní nastaví na false vždy, když je MarkInfo.Marked nastaven na true, čímž se splňuje požadavek struktury tagged PDF podle ISO 14289-1 (Section 7.18.6)
- Encrypt nyní vynucuje příznak oprávnění CanCopyAccess (kopírování obsahu pro přístupnost), když je dokument v režimu PDF/UA, jak vyžaduje ISO 14289-1 Section 7.17
Opraveno
- Formulářová pole Choice (rozbalovací seznam) už nenesou nesmyslnou pevně zadanou hodnotu tooltipu; TU zůstává nenastavené, aby mohl volající přiřadit smysluplný štítek pomocí API vlastností formulářového pole
Version 3.20.3
Změněno
- Encrypt a AddSWFAnnotationFromFile nyní okamžitě vracejí 0 s LastErrorCode 602, když je zamčená verze ukládání pod minimem vyžadovaným zvolenou silou šifrování nebo typem anotace, místo aby tiše pokračovaly a selhaly až při ukládání.
- GetInformation(311) a GetInformation(312) nyní při zápisu odrážejí konflikt požadavků na verzi, když zamčená verze blokuje funkce úrovně rozšíření, jako jsou AES-256 nebo anotace RichMedia.
Version 3.20.2
Změněno
- AddU3DAnnotationFromFile nyní při přidání 3D anotace do dokumentu s nižší verzí automaticky zvýší verzi dokumentu na PDF 1.6, v souladu s automatickým zvyšováním verze u všech ostatních vstupních bodů API pro PDF 1.6+.
Version 3.20.1
Změněno
- Cíle ukládání PDF 1.2 jsou nyní vynucovány jako přísné smlouvy PDF 1.2. Uložení objektů PDF 1.3+ jako jsou data page TrimBox pod cílem PDF 1.2 selže dříve, než se zapíše výstup, místo aby vznikl soubor s promíchanými verzemi.
- Soulad s úrovní rozšíření Adobe pro PDF 1.7 je nyní součástí předběžné kontroly ukládání. AESV3, AES-256, RichMedia, Projection, geospatial dictionaries a subfiltry ETSI podpisů se kontrolují proti požadovanému ExtensionLevel.
- Šifrování AES-256, anotace RichMedia, geospatial dictionaries a subfiltry ETSI podpisů nyní deklarují odpovídající položku Adobe Extensions, když PDFlib automaticky zvýší dokument na obsah rozšíření PDF 1.7.
- Ukládání pomocí append nyní používá stejnou bránu souladu verzí jako úplné ukládání.
- Přibalené volitelné runtime DLL PDFium byly obnoveny pro Win32 a Win64. GDI+ zůstává výchozím rendererem; PDFium zůstává volitelný přes SetPDFiumFileName a SelectRenderer(3).
- Validace: sady DUnitX pro Delphi Win32 a Win64 prošly v obou případech 207/207 a GoogleTest pro C++Builder Win64x prošel 61 testů se 2 stávajícími testy závislými na ukázkách přeskočenými.
Version 3.20.0
Změněno
- Dalších osm vstupních bodů zápisu PDFlib nyní prochází přes Phase 3 EnsureMinVersion, takže se verze dokumentu automaticky zvýší na minimum vyžadované právě vkládanou funkcí: SetDocumentMetadata (PDF 1.4 - /Metadata XMP stream) SetPDFAMode(1 or 2) (PDF 1.4 - /MarkInfo + /OutputIntents) PageJavaScriptAction (PDF 1.5 - Page /AA + JavaScript) DocJavaScriptAction (PDF 1.4 - Catalog /AA + JavaScript) SetTabOrderMode (PDF 1.5 - Page /Tabs) NewOptionalContentGroup (PDF 1.5 - /Type /OCG) SetNeedAppearances (PDF 1.5 - AcroForm /NeedAppearances) NewFormField(ftSignature) (PDF 1.5 - AcroForm /SigFlags AppendOnly)
- Spolu se sadou v3.15.0 (SetTransparency, SetPageUserUnit, Encrypt, SetPageLayout) a sadou v3.17.0 (osm položek JavaScript / embedded-file / XFA / SWF) PDFlib nyní automaticky zvyšuje FVersion napříč jednadvaceti vstupními body zápisu.
- NewOptionalContentGroup dříve zvyšoval FVersion přímo; nyní prochází přes EnsureMinVersion, takže je respektován LockSaveVersion a zvýšení je zaznamenáno v AutoBumpedFeatures.
Version 3.19.0
Změněno
- Soulad s verzí PDF při ukládání i načítání nyní rozpoznává také čtyři dříve odložené funkce: Btn /Ff bit 15 NoToggleToOff (jen přepínače) -> PDF 1.4 DeviceN /Subtype /NChannel (upřesnění color-space) -> PDF 1.6 FontFile3 /Subtype /OpenType (typ fontového programu) -> PDF 1.6 Sig /SubFilter ETSI.CAdES.detached or ETSI.RFC3161 -> PDF 1.7.
- Pravidlo NChannel odpovídá podobě pole color-space DeviceN [/DeviceN names alternateSpace tintTransform attributes], když slovník atributů na indexu 4 nese /Subtype /NChannel.
- Pravidlo FontFile3 OpenType se aktivuje jen tehdy, když se streamu dosáhne přes nadřazený klíč pojmenovaný 'FontFile3', takže nesouvisející streamy, které náhodou nesou /Subtype /OpenType, nejsou označeny.
- Tabulka PDFFeatureRules nyní obsahuje 103 pravidel (99 + 4 nová).
Version 3.18.6
Změněno
- Soulad s verzí PDF při ukládání i načítání nyní rozpoznává /AA (additional actions) s ohledem na typ kontejneru: Catalog /AA (spouštěče na úrovni dokumentu) -> PDF 1.4 Annot /AA (spouštěče anotací) -> PDF 1.4 Page /AA (spouštěče stránek) -> PDF 1.5.
- Form-field /AA (PDF 1.2) zůstává pokryto stávající smlouvou ukládání PDF 1.3; není potřeba žádné pravidlo.
- Tabulka PDFFeatureRules nyní obsahuje 99 pravidel (96 + 3 nová).
Version 3.18.5
Přidáno
- Nové pravidlo: AcroForm /NeedAppearances je rozpoznáván jako funkce PDF 1.5 podle tabulky 218 v PDF 1.5.
Změněno
- Tabulka PDFFeatureRules nyní obsahuje 96 pravidel (95 + 1 nové).
Opraveno
- Soulad s verzí PDF při ukládání i načítání nyní správně klasifikuje Page /Tabs jako funkci PDF 1.5; dříve byla chybně klasifikována jako PDF 1.4. Dokument změn specifikace PDF 1.4 (Adobe TN #5409) /Tabs neuvádí a tabulka 8.10 v PDF 1.5 zavádí "Tabs (Optional; PDF 1.5)".
Version 3.18.4
Přidáno
- Regresní pokrytí zlib-ng nyní zahrnuje payloady na hranici velikosti, scanline data podobná PNG, uložené víceblokové streamy a známé streamy zlib napříč testovacími běhy Delphi a C++Builder.
Změněno
- PDFlibZLib nyní při běžných sestaveních knihovny vždy používá přibalený statický backend zlib-ng object, čímž odstraňuje zbývající záložní cestu System.ZLib.
- Validace: sady DUnitX pro Delphi Win32 a Win64 prošly v obou případech 194/194 a GoogleTest pro C++Builder Win64x prošel 58 testů se 2 stávajícími testy závislými na ukázkách přeskočenými.
Version 3.18.3
Změněno
- Dema Delphi a C++Builder, která generují PDF nebo textový výstup, nyní po úspěšném uložení automaticky otevřou vygenerovaný dokument.
- Balíčkování instalátoru nyní udržuje artefakty sestavení mimo složky dem a dělá z ukázek C++Builder plus modulů DLL a ActiveX/OCX volitelné komponenty; odpovídající soubory se nainstalují jen tehdy, když je komponenta vybrána.
Version 3.18.2
Změněno
- Dema EditFormField pro Delphi a C++Builder nyní před aktualizací hodnot polí vymazávají /NeedAppearances, takže každé upravené textové pole získá v uloženém PDF obnovený normální appearance stream.
- Tím zůstává uložený /AP stream v souladu s uloženou hodnotou /V a vyhýbá se rozdílům závislým na prohlížeči, kdy při zaostření pole odhalí text, který chyběl ve statickém vzhledu pole.
Version 3.18.1
Změněno
- Soulad s verzí PDF při ukládání i načítání nyní rozpoznává také bitové form-field /Ff příznaky a bit AppendOnly u AcroForm /SigFlags: /Ff bit 21 (FileSelect, mask 1048576) -> PDF 1.4 /Ff bit 22 (MultiSelect, mask 2097152) -> PDF 1.4 /Ff bit 23 (DoNotSpellCheck, mask 4194304) -> PDF 1.4 /Ff bit 24 (DoNotScroll, mask 8388608) -> PDF 1.4 /Ff bit 25 (Comb, mask 16777216) -> PDF 1.5 /Ff bit 26 (RichText / RadiosInUnison, 33554432) -> PDF 1.5 /Ff bit 27 (CommitOnSelChange, mask 67108864) -> PDF 1.5 /SigFlags bit 2 (AppendOnly, mask 2) -> PDF 1.5.
- Dědičnost /Parent se nesleduje: pravidla spouštějí pouze slovníky, které výslovně nesou /Ff nebo /SigFlags.
- Tabulka PDFFeatureRules nyní obsahuje 95 pravidel (87 + 8 nových bitových).
- Validace: sady DUnitX pro Delphi Win32 a Win64 prošly v obou případech 191/191 a GoogleTest pro C++Builder Win64x prošel 57/57.
Version 3.18.0
Změněno
- Soulad s verzí PDF při ukládání i načítání nyní rozpoznává také devět dalších sub-key a bitových funkcí: bitové příznaky anotací (/F mask): Locked (128) -> PDF 1.4 ToggleNoView (256) -> PDF 1.5 LockedContents (512) -> PDF 1.7 odlišné podklíče katalogu a stránky: /BoxColorInfo (page) -> PDF 1.4 /Permissions, /Legal, /PresSteps -> PDF 1.5 /VP (page geospatial viewport) -> PDF 1.6 /Collection (catalog portable collection) -> PDF 1.7.
- Tabulka PDFFeatureRules nyní obsahuje 87 pravidel (78 kapitolových + 9 sub-key / bit-level).
- Validace: sady DUnitX pro Delphi Win32 a Win64 prošly v obou případech 189/189 a GoogleTest pro C++Builder Win64x prošel 57/57.
Version 3.17.0
Změněno
- Dalších osm vstupních bodů zápisu PDFlib nyní prochází přes Phase 3 EnsureMinVersion, takže se verze dokumentu automaticky zvýší na minimum vyžadované právě vkládanou funkcí: AddLinkToJavaScript, SetOpenActionJavaScript, AddGlobalJavaScript, FormFieldJavaScriptAction (PDF 1.3 - JavaScript actions) AddEmbeddedFile, AddFileAttachment (PDF 1.3 - file attachments) SetXFAFromString (PDF 1.5 - XFA forms) AddSWFAnnotationFromFile (PDF 1.7 - RichMedia annotation).
- Spolu se sadou v3.15.0 (SetTransparency, SetPageUserUnit, Encrypt, SetPageLayout) PDFlib nyní pokrývá třináct vstupních bodů zápisu s vyšší verzí od začátku do konce.
- Validace: sady DUnitX pro Delphi Win32 a Win64 prošly v obou případech 187/187 a GoogleTest pro C++Builder Win64x prošel 57/57.
Version 3.16.3
Přidáno
- Nové PDFlib API: LockSaveVersion(Version) připne dokument na Version a zabrání tomu, aby Phase 3 writer-side EnsureMinVersion automaticky zvyšovalo verzi nad tuto hodnotu. UnlockSaveVersion zámek zruší.
Změněno
- Kontrola při ukládání zůstává beze změny: funkce vložené zapisovačem nad zamčenou verzí stále při ukládání vracejí LastErrorCode 602 místo toho, aby tiše zvýšily hlavičku
- Ověření: sady DUnitX pro Delphi Win32 a Win64 prošly v obou případech 184/184 a GoogleTest pro C++Builder Win64x prošel 57/57
Version 3.16.2
Změněno
- Načtené PDF nyní přes GetInformation(103) ("ContributorFeatures") zpřístupňují pohled na detekci funkcí při načítání pouze pro přispěvatele. Seznam obsahuje jen funkce, jejichž minimální požadovaná verze je přísně vyšší než HeaderVersion (klíč 100), takže přímo odpovídá na otázku "proč je výsledná verze vyšší než hlavička souboru?"
- GetInformation(101) ("DetectedFeatures") zůstává beze změny a dál vypisuje každou nalezenou funkci bez ohledu na to, zda přispívá k výsledné verzi
- Ověření: sady DUnitX pro Delphi Win32 a Win64 prošly v obou případech 181/181 a GoogleTest pro C++Builder Win64x prošel 57/57
Version 3.16.1
Přidáno
- Rozšířeno testovací pokrytí detekce na straně načítání o šest dalších syntetických vzorků: in-page transparency ExtGState (bez zvýšení verze), Catalog /MarkInfo (PDF 1.3 -> PDF 1.4), obsah /OCProperties + OCG (PDF 1.4 -> PDF 1.5), /Type /3DStream (PDF 1.5 -> PDF 1.6), vzorek s kombinací více funkcí a kontrolu stability snímku
Změněno
- Ověření: sady DUnitX pro Delphi Win32 a Win64 prošly v obou případech 179/179 a GoogleTest pro C++Builder Win64x prošel 57/57
Version 3.16.0
Přidáno
- Nové klíče GetInformation: 100 vrací HeaderVersion (doslovné %PDF-X.Y), 101 vrací DetectedFeatures (funkce nalezené při načtení oddělené CRLF), 102 vrací AutoBumpedFeatures (funkce oddělené CRLF, které na straně zapisovače vyvolaly EnsureMinVersion)
Změněno
- Načtené PDF dokumenty nyní procházejí detekcí verze řízenou obsahem: každý nepřímý objekt se vyhodnocuje podle tabulky mapující funkce na minimální verzi používané kontrolou při ukládání a FVersion se zvýší nad doslovnou hodnotu hlavičky %PDF-X.Y, když obsah skutečně vyžaduje vyšší verzi. Například položka stránky /UserUnit zvýší výslednou verzi na PDF 1.6, i když hlavička souboru říká PDF 1.4
- Kontrola při ukládání zůstává beze změny: dokumenty, jejichž výsledná verze byla zvýšena při načtení a potom výslovně snížena pomocí SetInformation(0, ...), stále při ukládání vracejí LastErrorCode 602
- Ověření: sady DUnitX pro Delphi Win32 a Win64 prošly v obou případech 173/173 a GoogleTest pro C++Builder Win64x prošel 57/57
Version 3.15.0
Změněno
- Vstupní body zapisovače, které vytvářejí funkce vyžadující určitou minimální verzi PDF, nyní automaticky zvyšují verzi PDF dokumentu. Volání SetTransparency na dokumentu označeném jako PDF 1.3 nyní povýší hlavičku na PDF 1.4 místo toho, aby uložení skončilo chybou LastErrorCode 602
- Stejné automatické zvýšení bylo zapojeno i do SetPageUserUnit (>=1.6), Encrypt se Strength 1/2/3/4 (>=1.4/1.6/1.7/1.7 podle pořadí) a dvoustránkových variant SetPageLayout (>=1.5)
- Změna chování oproti 3.14.x: aplikace, které dříve spoléhaly na bránu v3.12.6 "save target rejects writer-emitted features", nyní uspějí na zvýšené verzi. Načtené PDF, která už obsahují funkce vyšší verze, stále procházejí existující kontrolou při ukládání, takže načtení tagovaného PDF a volba PDF 1.3 stále končí chybou LastErrorCode 602
- Ověření: sady DUnitX pro Delphi Win32 a Win64 prošly v obou případech 170/170 a GoogleTest pro C++Builder Win64x prošel 57/57
Version 3.14.3
Změněno
- Kompatibilita verze PDF při ukládání nyní rozpoznává i zbývající typy 3D slovníků PDF 1.6 (/Type /3DStream /3DRef /3DBackground /3DRenderMode /3DLightingScheme /3DCrossSection /3DNode) a podtypy anotací Redact, RichMedia a Projection v PDF 1.7 spolu s doprovodnými slovníky /Type /Requirement a /ReqHandler
- Ověření: sady DUnitX pro Delphi Win32 a Win64 prošly v obou případech 168/168 a GoogleTest pro C++Builder Win64x prošel 57/57
Version 3.14.2
Změněno
- Kompatibilita verze PDF při ukládání nyní rozpoznává také funkce PDF 1.5: formuláře /XFA, /AlternatePresentations, jmenný strom /Renditions, multimediální slovníky /Type /Rendition /MediaCriteria /MediaPermissions /MediaPlayers a podtyp anotace Screen
- Uložení jako PDF 1.4 nyní odmítá dokumenty, které tyto funkce obsahují, s LastErrorCode 602
- Ověření: sady DUnitX pro Delphi Win32 a Win64 prošly v obou případech 166/166 a GoogleTest pro C++Builder Win64x prošel 57/57
Version 3.14.1
Změněno
- Kompatibilita verze PDF při ukládání nyní rozpoznává také funkce PDF 1.4: tagged PDF /StructTreeRoot /MarkInfo a slovníky StructElem, položky dokumentu /Lang a stránky /Tabs, /OutputIntents a slovníky /OutputIntent, podpis oprávnění /UR3 a podtypy anotací PDF 1.4 Polygon, PolyLine, Caret, Ink, Popup a Watermark
- Uložení jako PDF 1.3 nyní odmítá dokumenty, které tyto funkce obsahují, s LastErrorCode 602
- Ověření: sady DUnitX pro Delphi Win32 a Win64 prošly v obou případech 165/165 a GoogleTest pro C++Builder Win64x prošel 57/57
Version 3.14.0
Změněno
- Kompatibilita verze PDF při ukládání nyní rozpoznává i funkce PDF 1.3, jako jsou smooth shading, function objects, barevné prostory ICCBased a DeviceN, položky stránky /TrimBox /BleedBox /ArtBox, CMap /ToUnicode, přílohy souborů a anotace /Sound a /Movie, slovníky /Type /Filespec a /Type /EmbeddedFile, klíče /Group /EF /Alternates /Mask a akce JavaScript
- Volání s PDF 1.2 nyní ukládá podle smlouvy PDF 1.3: doslovná hlavička %PDF-1.2 zůstává zachována, ale kontrola přijímá funkce PDF 1.3. Funkce PDF 1.4 a novější jsou stále odmítány s LastErrorCode 602
- Ověření: sady DUnitX pro Delphi Win32 a Win64 prošly v obou případech 162/162 a GoogleTest pro C++Builder Win64x prošel 57/57
Version 3.13.0
Změněno
- Kontrola souladu s verzí PDF, která při ukládání odmítá funkce z pozdějších verzí, byla vyčleněna do samostatného modulu, aby se sada pravidel mohla rozšiřovat bez zásahů do jádra dokumentu
- Proti v3.12.7 se pro uživatele nic nemění: stejné funkce mimo verzi jsou stále odmítány s LastErrorCode 602
- Ověření: sady DUnitX pro Delphi Win32 a Win64 prošly v obou případech 155/155 a GoogleTest pro C++Builder Win64x prošel 57/57
Version 3.12.7
Přidáno
- Rozšířeno automatické testovací pokrytí pro workflow renderování PdfToImage s přímým přístupem v sadách Delphi DUnitX i C++Builder GoogleTest
Změněno
- Delphi VCL GUI test runner nyní registruje vzorky Syntax a XRef, čímž odpovídá pokrytí konzolového runneru
- Ověření: sady DUnitX pro Delphi Win32 a Win64 prošly v obou případech 147/147 a GoogleTest pro C++Builder Win64x prošel 57/57
Version 3.12.6
Změněno
- Uložení jako PDF 1.3, 1.4, 1.5, 1.6 nebo 1.7 nyní vynucuje vybranou verzi jako smlouvu plného uložení výstupu
- Plná uložení odstraňují přepsání /Version v katalogu, odstraňují nepodporovaná rozšíření katalogu a položky metadat pro nižší cíle a potlačují streamy metadat XMP v PDF 1.4 při ukládání jako PDF 1.3
- SaveToFile, SaveToString a SaveToStream nyní selžou s LastErrorCode 602, když je zvolená cílová verze PDF nižší než funkce stále přítomné v dokumentu, například transparency, optional content, JPX, UserUnit, 3D nebo AES crypt-filter funkce
Version 3.12.5
Přidáno
- Přidáno regresní pokrytí pro neznámé escape sekvence v literálních řetězcích a smíšené osmičkové a neosmičkové escape sekvence
Změněno
- Vylepšeno zpracování literálních řetězců PDF 1.7 tak, aby neznámé escape sekvence ignorovaly zpětné lomítko podle požadavků standardu
- Osmičkové escape sekvence v literálních řetězcích nyní spotřebují jen osmičkové číslice a následující neosmičkovou číslici ponechají jako běžná data řetězce
- Ověření: sady DUnitX pro Delphi Win32 a Win64 prošly v obou případech 141/141
Version 3.12.4
Přidáno
- Přidáno regresní pokrytí pro oddělovače názvů pravou složenou závorkou a řídké položky xref streamu komprimovaných objektů
Změněno
- Vylepšeno lexikální zpracování PDF 1.7, takže objekty typu name nyní správně končí u pravé složené závorky
- Ověření: sady DUnitX pro Delphi Win32 a Win64 prošly v obou případech 139/139
Opraveno
- Opraveno načítání položek komprimovaných objektů ve streamu xref přes SmartAccess, u nichž je číslo object streamu větší než délka PDF v bajtech
Version 3.12.3
Přidáno
- Nové šifrované PDF s AES nyní zapisují hodnoty crypt-filter Length jako bitové délky, což odpovídá kontraktu slovníku crypt filter v PDF 1.7
Změněno
- Vylepšena kompatibilita šifrovaných dokumentů PDF 1.7 pro soubory standard security handler, které používají StrF, StmF, EFF, Identity, None nebo pojmenované filtry ve stylu StdCF
- Metadata streamy nyní při pracovních postupech decrypt, encrypt a copy/save respektují EncryptMetadata=false místo toho, aby se zpracovávaly jako běžné streamy
- Streamy vložených souborů nyní nesou /Type /EmbeddedFile a při načítání nebo ukládání šifrovaných dokumentů používají rozhodovací cestu crypt-filter pro vložené soubory
- Externí streamy vložených souborů nyní převádějí FDecodeParms na DecodeParms, když se FFilter převede na Filter, a tím zachovávají parametry dekódování streamu
- Hodnoty Prev/XRefStm ve streamu XRef a velké číselné posuny nyní zachovávají 64bitovou přesnost napříč parserem a cestami SmartAccess
- Ověření: sady DUnitX pro Delphi Win32 a Win64 prošly v obou případech 137/137
Version 3.12.2
Změněno
- Vylepšena kompatibilita dekódování streamů PDF 1.7. Obecné dekódování streamů nyní respektuje /DP jako alias pro DecodeParms, rozpoznává nepřímé položky pole dekódovacích parametrů a přijímá standardní zkratky filtrů /AHx a /LZW
- Výstup PDF pro velké soubory nyní zapisuje posuny xref, startxref, linearization a ByteRange digitálních podpisů přes 64bitové formátovací cesty místo zužování těchto hodnot přes 32bitové celočíselné pomocné funkce
- Načtené dokumenty nyní považují položku katalogu /Version za účinnou verzi PDF, když je novější než verze v hlavičce souboru
- Ověření: sady DUnitX pro Delphi Win32 a Win64 prošly v obou případech 134/134
Opraveno
- Přepsané trailerové záznamy xref-stream už neuchovávají klíče DecodeParms určené jen pro stream, když je PDFlibPas ukládá jako klasické trailer dictionaries
Version 3.12.1
Změněno
- Generované PDF se nyní otevírají s první stránkou nastavenou na dostupnou výšku okna prohlížeče, takže je celá první stránka viditelná shora dolů při největším zoomu, který se do okna vejde; chcete-li toto výchozí chování přepsat, nastavte pro dokument vlastní OpenAction (SetOpenActionDestination, SetOpenActionMenu, SetOpenActionJavaScript)
Version 3.12.0
Přidáno
- Přidány CRT stuby malloc/calloc/realloc/free zarovnané na 32 bajtů pro statické C knihovny a opraveno uvolňování bufferů jpeg_mem_dest v TPDFJPEGImage.Compress přes stejnou C cestu free, která je alokovala
- Rozšířeny veřejné validační poznámky o přísné automatizované pokrytí za tímto vydáním: sestavení knihovny, kompresní round tripy, výstup HelloWorld /FlateDecode, vykreslování JPEG, pracovní postupy s obrazy, písma, formuláře, zabezpečení, podepisování, tisk a workflow odvozená z demo projektů C++Builder
Změněno
- Statické Windows backendy nyní zahrnují objekty libjpeg-turbo NASM SIMD pro Win32 a Win64, plus objekty x86 SIMD dispatch pro sadu zlib-ng ve Win64x
- Přepracovány skripty pro obnovu zlib-ng tak, aby sestavení Win64x bcc64x a diagnostické sestavení MSVC kompilovaly obecné zdrojové soubory, SSE2, SSSE3, SSE4.1/SSE4.2, PCLMULQDQ a AVX2 s příznaky funkcí po jednotlivých souborech místo spoléhání na jeden globální přepínač kompilátoru
Version 3.11.0
Přidáno
- Přidán malý bridge objekt zlib-ng pro sestavení Win64, aby Pascal kód zachoval stabilní vstupní body kompatibilní se zlibem, zatímco Delphi a C++Builder používají své vlastní sady objektů kompatibilní s linkerem
Změněno
- Windows Flate komprese a dekomprese byly přepnuty na zlib-ng v režimu kompatibilním se zlibem. Win32, Delphi Win64 a C++Builder Win64x nyní odkazují ABI-sladěné statické sady objektů zlib-ng z Lib\thirdparty\Win32, Lib\thirdparty\Win64 a Lib\thirdparty\Win64x
- Aktualizovány všechny demo projekty C++Builder, aby definovaly PDFLIB_CPPBUILDER, což odpovídá runneru GoogleTest a zabraňuje demo projektům Win64x odkazovat na objekty zlib-ng pro Delphi Win64
Opraveno
- Cesta Win64 už nevede přes jednotku Delphi System.ZLib, takže komprese/dekomprese PDF streamů může těžit z backendu zlib-ng stejně jako 32bitové sestavení
Version 3.10.3
Přidáno
- Rozšířena sada GoogleTest pro C++Builder o pokrytí každého dema v Demo\C++Builder. Rozložení fáze 1 se 7 fixture se rozrostlo na 15 fixture / 52 případů GoogleTest, všechny procházejí na Win64x. Nově pokrytá dema: AddFormattedTitle, AddTextImage, AddTrueTypeSubsettedFont, AddWebLink, CanvasText, CaptureToNewSize, CopyPageRanges, CreateWithImage, CreateWithImageToStream, DoInTheStream, DrawWrappedText, EditFormField, EmbeddedFonts, ExtractAnnotAttach, ExtractEmbeddedFonts, ExtractImage, ImageToPdf, ImportEMF, MultiFunction (renderer switch), PageOperations, PdfDecrypt, PdfPermission, PrintPDF, TextMeasure, TextPaging
Version 3.10.2
Přidáno
- Do Tests\C++Builder byl přidán běhový program GoogleTest pro C++Builder, který prověřuje Lib\PDFlibrary.pas prostřednictvím stejných HPP hlaviček generovaných pomocí {$JPHNE}, jaké používají dema C++Builderu. První fáze zrcadlí sedm klíčových scénářů Delphi (HelloWorld, DrawShapes, CreateTable, PdfEncrypt, ExtractText, PdfSigning, PdfToImage rendering) jako 17 případů GoogleTest, všechny procházejí na Win64x
- Sada Delphi DUnitX byla rozšířena o Tests.Print pokrývající dema PrintPDF a ShowPrinterBins (výčet výchozích tiskáren, nastavení vlastní tiskárny, volby tisku, tiskovou úlohu s přesměrováním do souboru) a o test přepínače vykreslování v Tests.Render, který na stejném zdrojovém PDF prověřuje volbu enginu GDI+ / PDFium / Cairo v demu MultiFunction
Version 3.10.1
Přidáno
- Do SetPageSize bylo přidáno 57 pojmenovaných velikostí stránek, takže zde fungují stejné kanonické názvy velikostí stránek: SIZE8X11, QUADA0, DOUBA0, B0PLUS, ENVB4/B5/C6/DL/MONARCH, ENV9/10/11, ANSIA/B/C/D/E, ARCHA/B/C/D/E1/E, SHIROKU, G1K, USBC/EUBC/ASBC, ID1/ID2/ID3, ONEINCH/TWOINCH/L2INCH/USVISA, foto formáty P2R..P24R / S8R / P4D, plus čínské a tchajwanské formáty archů octavo a sextodecimo LARGE/STANDARD/CROWN/ROC 8K a odpovídající poloviny 16K
Version 3.10.0
Přidáno
- Pro každé Delphi demo v Demo byly přidány nativní verze pro C++Builder. Dema pro tvorbu PDF, práci se stránkami, písmy, obrazy, zabezpečení, podepisování, vykreslování a tisk lze nyní buildovat a spouštět z C++Builderu bez jakéhokoli Delphi-side wrapperu
- Do každé složky s Delphi demem byl přidán krátký anglický Readme.txt popisující, co demo ukazuje, na jaké API se zaměřuje a jak jej spustit; přehled v HTML na Demo\Delphi\index.html odkazuje na všechna dema seskupená podle tématu
Změněno
- Každé nové demo je v Demo\C++Builder\<Name>\ jako konzolový projekt, který přímo používá Lib\PDFlibrary.pas a dodává vstupní soubory potřebné ke spuštění
- Stejný Readme.txt byl zrcadlen pro každé C++Builder demo a sekce Run byla přepsána pro konzolový workflow (argv arguments místo Open/SaveDialogs); odpovídající Demo\C++Builder\index.html vypisuje všechna C++Builder dema se stejnými skupinami témat
Opraveno
- Byl opraven únik paměti v demu ImportEMF (instance TPDFlib byla vytvořena, ale nikdy nebyla uvolněna)
Version 3.9.14
Změněno
- Dema wrapped-text a HTML pagination byla upravena tak, aby se každé zaměřovalo na vlastní API a spouštělo se z jediného tlačítka
- Dva demo projekty (EmbeddedFonts a PdfPermission) byly přejmenovány, aby se výsledné spustitelné soubory shodovaly s názvy složek místo starších prototypových názvů
Opraveno
- Bylo opraveno demo pro kopírování rozsahu stránek, aby skutečně kopírovalo stránky místo toho, aby vždy hlásilo selhání
Version 3.9.13
Přidáno
- Byla zavedena automatizovaná testovací sada DUnitX (spouštěče konzole i VCL GUI) pokrývající pomocné jednotky — buffer, AES, ZLib, Unicode a digest hashing — a pracovní postupy na úrovni knihovny včetně vytváření dokumentů, save-to-file a save-to-stream, load round-trips a šifrování AES-128/AES-256
Opraveno
- Byla opravena chyba pozice ve streamu ve vnitřním čteči bufferu: čtení dvoubajtových slov posouvalo čtecí kurzor o čtyři bajty místo o dva. V bufferech delších než dva bajty následná čtení končila na nesprávném offsetu a tiše vracela nesprávná data. Projevovalo se to nejvíce při parsování binárních datových struktur, které střídají čtení bajtů a slov
Version 3.9.12
Změněno
- Vykreslování obrazů přes GDI+ nyní ve výchozím stavu používá hladkou, vysoce kvalitní bicubickou interpolaci při škálování rastrových obrazů na rozlišení obrazovky nebo exportu. Dříve byl výchozí nearest-neighbor, který na malých obrázcích (loga, náhledy) zvětšených pro náhled na obrazovce nebo export ve vysokém DPI vytvářel viditelné schodovité artefakty. Volající, kteří dávají přednost ostřejšímu režimu nearest-neighbor, mohou staré chování obnovit přes SetGDIPlusOptions
Version 3.9.11
Opraveno
- Bylo opraveno vykreslování obrazů PDF v Cairo, které používají průhlednost color-key (pole /Mask s rozsahem barev ve slovníku obrázku). Dříve, když stránka obsahovala obraz s touto formou průhlednosti, Cairo renderer obraz zcela vynechal místo toho, aby jej složil s pozadím stránky. Oprava odvozuje alfa kanál pro každý pixel z deklarovaných rozsahů color-key a vykresluje výsledek jako průhledný obraz, takže výstup je vizuálně konzistentní s rendererem GDI+
Version 3.9.10
Opraveno
- Byla opravena regrese vykreslování v Cairo, kdy byl veškerý obsah stránky následující po sekvenci oříznutého obrazu nesprávně omezen na ořezový obdélník obrazu. Stránky PDF, které uloží stav grafiky, použijí clip path, vykreslí obraz a pak stav obnoví — běžná technika rozvržení pro orámované nebo ohraničené obrazy — by pak vykreslovaly veškerý následný text, tvary i grafiku pouze uvnitř oříznuté oblasti. Uložení a obnovení stavu v Cairo nyní správně mapuje na operátory PDF q/Q, takže se ořezová oblast po vykreslení obrazu zahodí
Version 3.9.9
Přidáno
- Byl přidán PDF vykreslovací engine založený na Cairo jako třetí možnost vedle GDI+ a PDFium. Před vykreslováním jej aktivujte voláním SelectRenderer(2); engine vyžaduje cairo.dll z přibalené složky DLL\Cairo. Vykreslování přes Cairo podporuje stejné výstupní režimy jako GDI+: export bitmapového souboru a streamu (BMP, JPEG, PNG, GIF, TIFF, G4 TIFF), vykreslování do device contextu a přímý tisk
Změněno
- Demo MultiFunction View/Print nyní nabízí trojcestný přepínač rendereru, takže lze na stejném dokumentu porovnávat výstup GDI+, PDFium a Cairo vedle sebe bez jakýchkoli změn kódu
Version 3.9.8
Opraveno
- Dvě falešná diagnostická hlášení kompilátoru ve Win32 C-runtime shim, která se objevovala v RAD Studio 13.1 a novějších, byla potlačena. Varování o zastarání (W1000) vznikalo proto, že ochrana podle schopností verze kompilátoru nebyla propagována na kompilátory novější než Delphi 2009, takže se kompilovala proti zastaralému API správce paměti. Nápověda o nepoužité proměnné (H2164) vznikala pro interní kompatibilitní proměnnou potřebnou jen pro sestavení Delphi 7; nyní je omezena na podmíněný blok této verze. Oba problémy se týkaly pouze diagnostiky a neměly žádný dopad za běhu
Version 3.9.7
Přidáno
- Na Windows bylo přidáno volitelné vykreslování stránek přes PDFium, včetně vykreslování do BMP streamu, do device contextu, do paměti a na tiskárnu
Změněno
- Demo Delphi MultiFunction View/Print bylo aktualizováno o přepínač rendereru, takže uživatelé mohou přepínat mezi dosavadním rendererem GDI+ a PDFium
Version 3.9.6
Přidáno
- Byly přidány samostatné skripty Inno Setup pro plný balíček PDFlibPas a pro trial balíček, s release zaměřenými výjimkami pro metadata správy zdrojů, build výstupy, cache IDE, lokální agentní soubory a přibalené zdrojové stromy třetích stran, které nejsou součástí dodávaného balíčku
Změněno
- Trial instalátor nyní před vytvořením instalačního EXE sestavuje a balí zkušební binární knihovny pro RAD Studio 11.3, 12.3 a 13.1 spolu se zkušebními Delphi demy
Version 3.9.5
Opraveno
- Byly opraveny sestavovací postupy Win32 knihovny v RAD Studio 9.0 / Delphi XE2. Build skript předával příznak výstupního adresáře DCU, který existuje až od Delphi 2010; kompilátor XE2 jej vyložil jinak, vytvořil zkomolenou výstupní cestu a vyvolal fatální chybu ještě před zpracováním jakéhokoli zdrojového souboru. Skript nyní automaticky vybírá odpovídající příznak podle cílové verze kompilátoru
- Byla opravena související ochrana podle verze kompilátoru ve zdrojích knihovny, která pod podmínkou XE2+ volala jmenně kvalifikovanou runtime funkci zavedenou v XE4. Sestavení cílená na XE2 a XE3 nyní místo toho používají správný kompatibilitní import
Version 3.9.4
Opraveno
- Opraveno nastavení tisku pro síťové a serverově sdílené tiskárny tak, že se zásobník papíru, médium, oboustranný tisk, kvalita a další tisková nastavení předávají přes handle DEVMODE tiskárny místo přes handle device context tiskárny
Version 3.9.3
Změněno
- Aktualizován přibalený AES backend na zdroje AES z roku 2018 od Briana Gladmana pro Win32 i Win64. Reprodukovatelné build skripty nyní umožňují kdykoli znovu sestavit statické AES objekty ze zdrojů. Byl přitom odhalen a opraven ABI problém v Pascal vazbách: funkce AES-CBC pro šifrování a dešifrování neměly deklaraci C calling convention, takže sestavení pro Win32 tiše předávala argumenty ve špatném pořadí registrů, což mohlo vést k nesprávnému šifrovanému výstupu. Sestavení pro Win64 tím nebyla dotčena, protože platforma vynucuje jednotnou calling convention
Zabezpečení
- Zesíleny skripty pro přestavbu třetích stran, aby bylo možné spustit skripty založené na MSVC pro zlib, JPEG a CRT stub z kořene repozitáře i z adresáře thirdparty; dříve vyžadovaly nastavení pracovního adresáře na složku thirdparty
Version 3.9.2
Opraveno
- Upgradován přibalený backend JPEG 2000 z původního OpenJPEG 1.5 na OpenJPEG 2.5.4 pro Win32 i Win64. Obě platformy nyní používají statické linkování objektů, takže kódování a dekódování JPEG 2000 funguje bez další runtime DLL. Moderní kodek přináší aktuální zpracování hlaviček JP2/J2K, stream API řízené callbacky a nashromážděné opravy chyb a bezpečnostních problémů z upstream projektu. Veřejné API TJpeg2000Bitmap zůstává beze změny
Version 3.9.1
Opraveno
- Opraveno vykreslování stránek JPEG a export obrázků po upgradu libjpeg-turbo, čímž se obnovila konverze JPG v PdfToImage a výstup TPDFJPEGImage.SaveToStream na Win32 i Win64
- Upraveny vazby ABI libjpeg-turbo pro Win32 tak, aby callbacky, zarovnání struktur, booleovské položky a JPEG cíle v paměti odpovídaly libjpeg-turbo 3.1.90
- Opraveno dekomprimování streamu FlateDecode ve Win32 s přibaleným backendem zlib 1.3.2, čímž se obnovilo načítání PDF xref streamů pro soubory jako ukázkový dokument PdfToImage
Version 3.9.0
Změněno
- Upgradován přibalený backend JPEG 2000 z původního OpenJPEG 1.5 na OpenJPEG 2.5.4. Načítání i ukládání JPEG 2000 nyní používá moderní kodek, stream API řízené callbacky a aktuální zpracování hlaviček JP2/J2K při zachování veřejného API TJpeg2000Bitmap
Opraveno
- Výstup JPEG 2000 nyní automaticky volí platný počet rozlišení OpenJPEG pro malé obrázky a statický backend pro Win32 už nezávisí na chybějících exportech pomůcek MSVCRT
Version 3.8.1
Opraveno
- Odstraněno všech 16 kosmetických varování linkeru W1028 "Bad global symbol definition" na Win32 i Win64. Přejmenování na úrovni zdrojů odstraňuje nadbytečné duplicitní symboly na straně Pascalu (jpeg_std_error a alokační stuby jmemnobs se nyní řeší výhradně z vrstvy obj); tři zbývající symboly obj bcc32 / vc64 (jpeg_natural_order, jpeg_aritab, jpeg_nbits_table), které musí zůstat linkově vázané na data na straně Pascalu, jsou nyní odstraněny ze svých názvů COFF symbolů pomocí následného zpracování ObjConv během thirdparty\build-jpeg-vc64.bat. Žádná změna veřejného API; čistý výstup linkeru pro sestavení Delphi Win32 i Win64
Version 3.8.0
Zabezpečení
- JPEG kodek pro Win64 byl upgradován z libjpeg ve stylu IJG na libjpeg-turbo 3.1.90, čímž se dokončila migrace JPEG zahájená ve v3.7.0 (Win32). Cesty pro Win32 i Win64 nyní sdílejí stejný moderní JPEG kodek se stejnými SIMD- optimalizovanými vnitřními smyčkami a více než 30 nashromážděnými opravami CVE / fuzz z upstreamu. Veřejné API PDFlibPas zůstává beze změny
Version 3.7.0
Zabezpečení
- JPEG kodek pro Win32 byl upgradován z IJG libjpeg-6b na libjpeg-turbo 3.1.90. Výrazně rychlejší kódování a dekódování JPEG díky SIMD- optimalizovaným vnitřním smyčkám, plus více než 30 oprav CVE / fuzz nashromážděných v upstreamu libjpeg-turbo. Veřejné API PDFlibPas (TPDFJPEGImage class, DumpJPEG functions) zůstává beze změny; stávající cesty PDF/JPEG běží rychleji bez nutnosti změn zdrojového kódu
Version 3.6.0
Změněno
- Cesta Win64 zlib je v tomto vydání beze změny - dál používá jednotku System.ZLib dodávanou s Delphim
- Aktivován Win64 link-time CRT shim PDFlibCLibs.pas (zavedený ve v3.5.0) pro cestu Win32 zlib, který poskytuje symboly memcpy / memset / malloc / free, na které odkazují nové obj soubory zlib 1.3.2
Zabezpečení
- Zlib pro Win32 byl upgradován z 1.2.x na 1.3.2. Zahrnuje standardní více než 25 oprav CVE / fuzz nashromážděných upstreamem od verze 1.2.8, plus nové vstupní body inflateBack9 / inflateTree9 používané proudy s 64bitovým oknem. Veřejné API PDFlibPas (DeflateStr / InflateStr / InflateStrParms) zůstává beze změny
Version 3.5.0
Přidáno
- Přidána build infrastruktura pro OpenJPEG 2.5.4. Samotný zdrojový strom OpenJPEG si uživatel stahuje samostatně (git clone uclouvain/openjpeg do Lib/thirdparty/OpenJPEG/), takže jej lze upgradovat bez zásahu do build konfigurace PDFlibPas
- Přidán Lib/PDFlibCLibs.pas, link-time CRT shim pro Win64 používaný backendem Win64. Překlenuje mezeru mezi MSVC-kompilovanými C obj soubory a Delphi Win64 linkery (dcc64 / Win64x ld.lld / BCB ilink64), které automaticky nenačítají msvcrt.dll
Změněno
- Přidána nová build infrastruktura pro přibalené C image / compression knihovny: zlib 1.3.2, libjpeg-turbo 3.1.90, libtiff 4.7.1. Build skripty pro Embarcadero bcc32 (Win32) i MSVC cl.exe (Win64) jsou v Lib/thirdparty/ vedle zdrojových stromů, takže kdokoli s RAD Studio + VS2022 může z čistých zdrojů znovu sestavit statické obj soubory
Version 3.4.0
Zabezpečení
- Zesíleno generování šifrovacího klíče, inicializačního vektoru AES a bloků oprávnění Perms proti předvídatelným zdrojům náhodných čísel. Šifrované PDF vzniklé na systémech spuštěných zhruba ve stejný okamžik už nejsou triviálně korelovatelné; dokumenty AES-256 si nyní zachovávají plnou sílu klíče
- Zesíleno parsování slovníku obrázků proti poškozeným nebo útočným PDF, která deklarují nepřiměřené počty Width, Height, BitsPerComponent nebo komponent DeviceN. Hodnoty mimo rozsah se před jakoukoli aritmetikou pixelového bufferu omezí, což zabraňuje pádům při otevírání takových souborů
- Zesíleno procházení cross-reference a stromu stránek proti dokumentům, jejichž řetězce /Prev xref nebo odkazy /Parent tvoří cyklus nebo jsou příliš hluboké. Čtečka nyní odmítá poškozené struktury čistě místo toho, aby rekurzí došla až k přetečení zásobníku
Version 3.3.1
Přidáno
- Přidány vložené komentáře s vysvětlením kolem oprav vykreslování v PDFlibRenderer.pas, které už byly přítomné v původním Git baseline. Komentáře popisují, proč SetPen škáluje šířky čar podle aktivní transformace canvasu a proč operátory CharProc d0/d1 u písma Type 3 musí spotřebovat své operandy. Chování za běhu se nezměnilo
Opraveno
- Zjednodušeny per-component Windows build skripty. Složky DLL/, OCX/ a Dylib/ už neobsahují oddělené varianty build12-* / build13-*: každá platforma má nyní jediný skript build-Win32 / build-Win64, který je připnutý na nejnovější RAD Studio a přijímá volitelný argument "debug"
Version 3.3.0
Opraveno
- Opraveno renderování transformovaných tahů v PDFlibRenderer.pas. SetPen nyní před voláním Picasso aplikuje měřítko aktuální transformace canvasu na šířky PDF čar, čímž zabraňuje příliš širokým nebo příliš úzkým tahům u cest, jejichž souřadnice už byly transformovány. Tím se opravují obrysy písma Type 3, které se mohly vykreslovat jako tlusté nepravidelné bloky
- Opraveno zpracování CharProc d0/d1 u písma Type 3 v parseru content streamu. d0 nyní spotřebuje své dva width operandy a d1 spotřebuje svých šest width / bounding box operandů dříve, než proběhnou pozdější kreslicí příkazy, což zabraňuje tomu, aby zbylé operandy poškodily geometrii glyfu nebo cesty