Poznámky k vydání PDFiumPas
Historie verzí funkcí PDFiumPas viditelných pro uživatele, oprav, vylepšení prohlížeče, generování dokumentů, výstupu PDF/A, vykreslování a aktualizací dokumentace
Poslední vydání
- Nejnovější verze: 2.57.0; Datum vydání:
Version 2.57.0
Přidáno (Added)
TPdfThumbnailView.Orientationpodporuje vertikální a horizontální rozložení miniatur při zachování stávajícího vertikálního výchozího nastaveníFirstVisiblePageIndex,LastVisiblePageIndexaEnsureCurrentPageVisiblezpřístupňují a řídí výřez miniatur pomocí indexů stránek založených na jedničce
Změněno (Changed)
- Změna
CurrentPageIndexnyní posune vybranou miniaturu do zobrazení v obou orientacích - Testy Delphi, Lazarus a C++Builder nyní pokrývají výchozí hodnoty orientace, přepínání, viditelné rozsahy a viditelnost vybrané stránky
TPdf.AboutInfo, metadata balíčku Lazarus a metadata instalátoru nyní jednotně hlásí Version 2.57.0
Version 2.56.2
Změněno (Changed)
HighlightSearchText,AddSearchTextHighlightaClearHighlightnyní zneplatňují pouze obdélníky zařízení pro vyhledávací rozsahy, které byly přidány nebo odebrány, místo překreslení celého prohlížeče- Nahrazení zvýraznění stejnými shodami nebo připojení duplicitních shod již neplánuje zbytečné překreslení
- Testy Delphi, Lazarus a C++Builder nyní pokrývají omezenou invalidaci, idempotentní aktualizace, mazání a bezpečnost neaktivního zobrazení
TPdf.AboutInfo, metadata balíčku Lazarus a metadata instalátoru nyní jednotně hlásí Version 2.56.2
Version 2.56.1
Změněno (Changed)
TPdfThumbnailViewnyní znovu používá vykreslené bitmapy pro stránky, které zůstávají viditelné napříč překresleními a sousedními pozicemi posunu- Mezipaměť si ponechává pouze aktuální viditelný rozsah stránek a uvolňuje položky přesně tehdy, když stránky opustí tento rozsah, přiřazený dokument se změní nebo se změní rozměry miniatur
- Testy Delphi, Lazarus a C++Builder nyní pokrývají opakované použití mezipaměti, prořezávání výřezu, invalidaci velikosti, nahrazení dokumentu a zničení komponenty
TPdf.AboutInfo, metadata balíčku Lazarus a metadata instalátoru nyní jednotně hlásí Version 2.56.1
Version 2.56.0
Přidáno (Added)
TPdfView.CutSelectedFormTextToClipboardaTPdfView.PasteFormTextFromClipboardposkytují úpravy schránky Unicode pro zaměřený editovatelný widget formuláře
Změněno (Changed)
- Zaměření editoři formulářů nyní zpracovávají standardní klávesové zkratky kopírování, vyjmutí, vložení a výběru všeho před předáním textového vstupu do PDFia
- Vyjmutí a vložení odmítnou pole jen pro čtení a relace bez oprávnění vyplnění nebo úpravy formuláře, zatímco vyjmutí úspěšně zkopíruje před odstraněním vybraného textu
- Testy Delphi, Lazarus a C++Builder nyní pokrývají chování bez zaměření, zpětnou zkratku a odmítnutí jen pro čtení
TPdf.AboutInfo, metadata balíčku Lazarus a metadata instalátoru nyní jednotně hlásí Version 2.56.0
Version 2.55.0
Přidáno (Added)
TPdfView.AddSearchTextHighlightpřipojuje jedinečné shody pro další vyhledávací výraz k aktuální překryvu stránky, což umožňuje, aby několik dotazů zůstalo zvýrazněno společně
Změněno (Changed)
HighlightSearchTextzůstává náhradním vstupním bodem a nyní sdílí aditivní skener, zatímco duplicitní rozsahy znaků jsou ignorovány aClearHighlightodstraňuje kompletní nahromaděnou sadu- Testy Delphi, Lazarus a C++Builder nyní pokrývají akumulaci odlišných dotazů a potlačení duplicitních rozsahů
TPdf.AboutInfo, metadata balíčku Lazarus a metadata instalátoru nyní jednotně hlásí Version 2.55.0
Version 2.54.0
Přidáno (Added)
TPdfnyní zpřístupňuje kompletní snímky objektů stránky, dávkové aktualizace stylů, afinní transformace objektů, segmenty cest, cesty oříznutí a potomky Form XObject- Inspekce znaků nyní zahrnuje barvy výplně a tahu, název a příznaky písma, volné hranice glyfů, efektivní matice, popisovače textových objektů a převod znak-na-textový index
- Anotace nyní round-trip geometrii ohraničení a normální, rollover a down proudy vzhledu
- Nové přístupové body pro surové a dekódované miniatury, transformace obsahu stránky a anotací a
RenderPageWithMatrixposkytují přímé pokročilé cesty vykreslování a úprav
Změněno (Changed)
- Změny stylu objektů stránky lze nyní odeslat jako jednu dávku, takže PDFium regeneruje obsah stránky pouze jednou
- Vykreslování maticí používá stávající cestu bitmapy zero-copy, když je rozložení cílové bitmapy kompatibilní
Version 2.53.1
Opraveno (Fixed)
- Vestavěný čínský popisek nabídky Copy nyní používá body kódu Unicode nezávislé na kódování a zobrazuje se správně v buildech Lazarus
- Starší toolchainy Delphi mohou kompilovat
FPdfAsync, když jejich jednotkaWinapi.Windowsvynechává deklaraciGetTickCount64
Version 2.53.0
Přidáno (Added)
- Nová testovací sada
Tests.ApiCoveragepokrývající veřejná API TPdf, která dříve neměla žádné end-to-end testové pokrytí:GetPageBox/SetPageBox(čtení/zápis MediaBox/CropBox, chyby chybějícího boxu a round-trip ukládání),FlattenPage/FlattenAllPages(návratová hodnota a zachování počtu stránek),GenerateFormAppearances(no-op na dokumentech bez formuláře),SaveAsEncrypted/SaveAsEncryptedToStream(AES-256 s round-trip heslem — ověřuje, že šifrovaný soubor odmítne otevření bez hesla a s heslem se otevře), ověření hranicDeletePage(stránka 0 a mimo rozsah vyvolajíEPdfError) a sentinelové hodnotyHasContents/HasAuthoranotací zavedené ve v2.38.0 (ověřující, žeDefault(TPdfAnnotation)je ponecháváFalse)
Version 2.52.0
Přidáno (Added)
TPdfView.CopySelectedFormTextToClipboardkopíruje výběr textu uvnitř zaměřeného widgetu AcroForm do schránky Windows jakoCF_UNICODETEXT
Změněno (Changed)
- Operace kopírování textu stránky a zaměřeného formuláře nyní sdílejí stejný defenzivní zapisovač schránky Unicode a ponechávají schránku nezměněnou, když je jejich výběr prázdný
- Testy Delphi, Lazarus a C++Builder nyní pokrývají neaktivní nebo nezaměřené volání kopírování formuláře a round-trip výběru zaměřeného formuláře přes schránku Windows
TPdf.AboutInfo, metadata balíčku Lazarus a metadata instalátoru nyní jednotně hlásí Version 2.52.0
Version 2.51.0
Přidáno (Added)
TPdfView.SelectLineAtvybírá vizuální textovou řádku obsahující stránku založenou na jedničce a index znaku založený na nule bez nutnosti vstupu myší
Změněno (Changed)
- Programový výběr řádku, výběr trojitým kliknutím a
Shift+HomeneboShift+Endnyní sdílejí jeden model hranic řádku založený na znakových obdélnících - Testy Delphi, Lazarus a C++Builder nyní pokrývají stabilní výběr řádku a neplatné indexy stránek nebo znaků
TPdf.AboutInfo, metadata balíčku Lazarus a metadata instalátoru nyní jednotně hlásí Version 2.51.0
Version 2.50.0
Přidáno (Added)
TPdf.LoadDocumentnyní přijímá oknoIndexzaložené na nule aCountdo vyrovnávací pamětiTBytes, což umožňuje načítání vložených PDF bez alokace dočasného řezu bajtového pole
Změněno (Changed)
- Načítání bajtového rozsahu odmítá záporná nebo mimo rozsah okna před změnou stavu dokumentu a zachovává stávající možnosti životnosti vyrovnávací paměti a půjčené vyrovnávací paměti
- Testy Delphi, Lazarus a C++Builder nyní pokrývají okna vložených PDF a neplatné argumenty bajtového rozsahu
TPdf.AboutInfo, metadata balíčku Lazarus a metadata instalátoru nyní jednotně hlásí Version 2.50.0
Version 2.49.1
Přidáno (Added)
TPdfView.FitModenyní podporujepfmFitHeightpro přizpůsobení aktuální stránky viditelné výšce výřezu s umožněním horizontálního posunu, když je to potřeba
Opraveno (Fixed)
- Režimy přizpůsobení nyní konvergují poté, co změna viditelnosti posuvníku změní klientskou oblast, čímž se výsledky fit-page, fit-width a fit-height udržují konzistentní mezi VCL a LCL
- Testy prohlížeče Delphi, Lazarus a C++Builder nyní pokrývají výběr
pfmFitHeighta zpětné převody výčtů TPdf.AboutInfo, metadata balíčku Lazarus a metadata instalátoru nyní jednotně hlásí Version 2.49.1
Version 2.49.0
Přidáno (Added)
- Veřejná plocha vazby PDFium nyní pokrývává všech 470 exportovaných funkcí v revidovaných hlavičkách, včetně přístupu k popisům příloh prostřednictvím
FPDFAttachment_SetDescriptionaFPDFAttachment_GetDescription TPdfnyní zpřístupňuje popisy příloh, platnost křížových odkazů, offsety konce traileru, revizi security-handleru, 64bitové načítání do paměti, rozsahy bajtů podpisu, rozsahy textu webových odkazů a rozšířené snímky dat obrázku, filtru, metadat a profilu ICC- Pomocníci formulářů nyní podporují nativní zaměření polí, dotazy a aktualizace zaměřených možností volby, předávání kolečka myši, zapisovatelné tahy perem a překryvy formulářů po progresivním vykreslení
Změněno (Changed)
FormFieldCount, indexy polí formuláře a pořadí tabulátorů nyní popisují pouze anotace widgetů místo zahrnutí nesouvisejících anotací stránky- Bezhlavé stránky
TPdfnyní vstupují do životního cyklu stránky vyplňování formuláře a opouštějí ho, takže nativní zaměření a API zaměřených polí fungují bezTPdfView - Exporty popisů příloh jsou řízeny možnostmi, takže aplikace používající starší sestavení PDFium mohou stále načíst knihovnu a detekovat nedostupnou funkci
Opraveno (Fixed)
- Progresivní vykreslování stránky nyní vykresluje ovládací prvky formuláře, když je povoleno vyplňování formulářů
- Testy Delphi, Lazarus a C++Builder nyní pokrývají novou diagnostiku dokumentů, popisy příloh, cesty pera, chování formulářů, rozsahy bajtů podpisu, rozsahy webových odkazů a metadata obrázků
TPdf.AboutInfo, metadata balíčku Lazarus a metadata instalátoru nyní jednotně hlásí Version 2.49.0
Version 2.48.0
Přidáno (Added)
TPdfMatrixnyní zpřístupňuje továrny, klonování a přiřazení, diagnostiku konečných stavů a invertibility, porovnání založené na toleranci, přístup k translaci, hlášení determinantu a afinní rozklad- Kompozice prepend, rotace citlivá na pivot, škálování, zkosení a překlopení plus mapování obdélníků stretch, contain a cover podporují pracovní postupy v lokálním prostoru a přizpůsobené rozložení bez ruční aritmetiky koeficientů
- Nemutující inverzní přístup, inverzní mapování bodů, transformace vektorů a čtyřúhelníků, dynamické dávky bodů a obdélníků, varianty in-place a jednoprvkové transformované hranice rozšiřují znovupoužitelnou geometrickou plochu
Změněno (Changed)
- Translace, škálování a překlopení os nyní aktualizují pouze dotčené koeficienty místo směrování přes obecné afinní násobení
- Transformace obdélníku normalizuje svůj vstup jednou, používá specializovanou přesnou cestu zarovnanou podle os, kde je to možné, a počítá obecné otočené hranice bez dočasných záznamů bodů
- Dávkové transformace bodů a obdélníků přidělují jedno pole výsledků nebo znovu používají úložiště volajícího, zatímco transformované hranice bodů jsou akumulovány v jednom průchodu bez pole zprostředkujícího
Opraveno (Fixed)
- Mapování obdélníků odmítá výsledky nulové velikosti, nekonečné a s přetečením
Singlepřed zveřejněním nepoužitelné matice - Testy Delphi, Lazarus a C++Builder nyní ověřují pořadí kompozice, invarianty pivotu, inverzní zpětné převody, přizpůsobené obdélníky, rozklad a chování hromadné geometrie
TPdf.AboutInfo, metadata balíčku Lazarus a metadata instalátoru nyní jednotně hlásí Version 2.48.0
Version 2.47.0
Přidáno (Added)
FPdfAsyncnyní poskytuje strukturované důvody a zprávy zrušení, odstranitelné registrace zpětných volání, zdroje založené na časovém limitu, čekání na zrušení a atomické operace try-cancel prostřednictvím rozšířených rozhraní, která zachovávají původní APITPdfFuture<T>.RunExpřidává konfigurovatelné odeslání odpovědi a prioritu workera, zatímco obálky výsledků zpřístupňují ID operací, platnost hodnot, názvy tříd výjimek, načasování dokončení a znovupoužitelné pomocníky dokončeníTPdfAsyncExecutorpřidává znovupoužitelný pevný pool workerů se čtyřmi FIFO prioritními dráhami, volitelný backpressure ohraničené fronty, zrušitelné handles úloh, čekání citlivé na časový limit, snímky úloh, agregované statistiky a elegantní vypnutí
Změněno (Changed)
- Opakované asynchronní úlohy mohou znovu použít vlákna workerů a operace fronty O(1) místo vytváření vlákna pro každou úlohu, zatímco synchronizované dokončení zůstává dostupné pro hostitele UI
- selhání executoru a future zachovávají diagnostiku třídy a zprávy výjimek, zrušení zachovává svůj původní důvod a výjimky zpětných volání zůstávají izolovány od životního cyklu workera a vypnutí
- Testy Delphi, Lazarus a C++Builder nyní pokrývají rozšířenou plochu zrušení, metadat future, řízení úloh, backpressure, řazení priorit, statistik, selhání a vypnutí
Opraveno (Fixed)
- Souběžní vlastníci zrušení nyní obdrží deterministický výsledek prvního zapisovatele místo spoléhání na oddělenou sekvenci pozorování a zrušení
- Čekání nečinnosti hlavního vlákna zpracovává synchronizované odpovědi úloh, což brání dokončenému workeru v trvalém ponechání executoru v nečinném stavu během koordinovaného vypnutí
TPdf.AboutInfo, metadata balíčku Lazarus a metadata instalátoru nyní jednotně hlásí Version 2.47.0
Version 2.46.0
Přidáno (Added)
FPdfAsn1nyní zpřístupňuje třídy identifikátorů, 64bitové kódování a dekódování high-tag-number, parsované záznamy TLV, okna child reader s nulovou kopií, typované dekodéry primitiv a řezy obsahu nebo kódovaných hodnot- Zapisovače DER nyní podporují plný 64bitový rozsah INTEGER bez znaménka, validovaný libovolný obsah INTEGER, ENUMERATED, automatický výběr UTCTime nebo GeneralizedTime, tagy application a private, vícehodnotovou SEQUENCE a kanonicky seřazený výstup SET OF
ValidateDervrací chyby validace citlivé na offset při vymáhání konfigurovatelných limitů vnoření, počtu uzlů, délky obsahu, počtu chyb, kořene a volitelného řazení SET
Změněno (Changed)
- Zřetězení DER a vícehodnotová kompozice používají jednu alokaci výstupu, buffery zapisovače zpřístupňují operace reserve, count, capacity a převodu vlastnictví a řazení SET OF nyní používá
O(n log n)merge sort - Hodnoty BOOLEAN, INTEGER, BIT STRING, OBJECT IDENTIFIER, NULL, UTF8String, PrintableString, IA5String, UTCTime a GeneralizedTime dostávají kontroly kanonického tvaru během kódování, typovaného dekódování nebo validace
- Běhový balíček Lazarus nyní exportuje
FPdfAsn1a testovací sady Delphi, Lazarus a C++Builder cvičí stejnou veřejnou DER plochu
Opraveno (Fixed)
- Kontextově specifická čísla tagů větší než 30 již nejsou zkracována do dolních pěti bitů identifikátoru
- Malformované high-tag identifikátory, neminimální určité délky, neplatné UTF-8, nenulové padding BIT STRING, neplatná časová pole, koncové kořeny a porušení limitů prostředků jsou deterministicky odmítnuty
TPdf.AboutInfo, metadata balíčku Lazarus a metadata instalátoru nyní jednotně hlásí Version 2.46.0
Version 2.45.0
Přidáno (Added)
FPdfPreflightReportnyní přiděluje každému problému závažnost Info, Warning nebo Error a zpřístupňuje API závažnosti, stavu, kategorie, issue-code, lookup, search, flattening a filtrování na úrovni standardu a sestavy- Sestavy preflight nyní exportují SARIF 2.1.0, JUnit XML, NDJSON a nativní XML prostřednictvím odpovídajících metod
To*aSave*ToFilepro pipeline CI, automatizace a streamování - Stabilní otisky sestav SHA-256 identifikují ekvivalentní výsledky validace nezávisle na zdrojových cestách a časových značkách generování
Změněno (Changed)
- Sestavy JSON, CSV, text, Markdown a HTML nyní zahrnují závažnost a rozšířená shrnutí stavu; HTML přidává přístupné titulky tabulek a shrnutí stavu
- Konstrukce kolekcí problému a standardu používá geometrický růst kapacity, výsledky dotazů jsou předdimenzovány, escapování JSON zapisuje do jedného ohraničeného výstupního bufferu a všechny soubory sestav používají jeden přímý zapisovač UTF-8
- Shrnutí kategorií problému používají deterministické řazení, časové značky zahrnují milisekundy, JSON nese
formatVersion: 2a buňky CSV neutralizují vzorce tabulkových procesorů
Opraveno (Fixed)
- Export JSON nyní zachovává platné doplňkové páry Unicode a nahrazuje izolované kódové jednotky surrogate UTF-16 místo vysílání malformovaných skalárních dat
- Export HTML nyní escapuje apostrofy a filtrovaná zobrazení sestav vlastní nezávislá pole problému místo sdílení měnitelného úložiště výsledků
TPdf.AboutInfo, metadata balíčku Lazarus a metadata instalátoru nyní jednotně hlásí Version 2.45.0
Version 2.44.0
Přidáno (Added)
- Záložky a cíle vystavují stav otevření, počty potomků, cíle akcí, režimy zobrazení cílů a až čtyři parametry zobrazení
Metadata,GrantedPermissions,UserGrantedPermissions,HasPermissionaUserHasPermissionposkytují typované snímky pro inspekci dokumentu a dotazy na oprávněníExtractThumbnail(PageNumber)vykreslí požadovanou stránku beze změny aktivní stránky a výsledky časových razítek RFC 3161 vystavují zásadu, čas generování a detaily nonce
Změněno (Changed)
- Cesty záložek, JavaScriptu, metadat, cílů a miniatur používají validované dvouprůchodové vyrovnávací paměti, geometrický růst kolekcí a průchod bezpečný vůči cyklům
- Post-processing ukládání řeší aktivní katalog, strom stránek a akci otevření prostřednictvím aktuální revize xref, ukládá do mezipaměti dekódované objektové streamy a skenuje PDF slovníky s lexikálními hranicemi
- Sdílená analýza PDF nyní vynucuje přesné hlavičky objektů, generace, klíče slovníků, délky streamů, geometrii prediktoru, celočíselné rozsahy a hranice komentářů, literálních řetězců a šestnáctkových řetězců
- Validace odpovědi RFC 3161 nyní váže jak nonce, tak SHA-256
messageImprint, vyžaduje strukturálně platného podepisujícího a uplatňuje přísná pravidla pro DER délku, OID, INTEGER a GeneralizedTime
Opraveno (Fixed)
- Inkrementální dokumenty již při přidávání výchozí akce otevření nevybírají neaktivní duplicitní katalogy nebo poškozené přípony referencí
- Časové tokeny s dlouhými DER délkami si zachovají kompletní kódovaný token, zatímco poškozené pořadí volitelných polí CMS a prázdné sady podepisujících jsou odmítnuty
- Čistá sestavení Delphi nyní zapisují pole nonce seedu PAdES prostřednictvím zarovnaně bezpečných bajtových kopií a předávají bajty odpovědi XFA s přesným nativním typem ukazatele
Version 2.43.0
Přidáno (Added)
- Záznamy polí a anotací XFDF nyní vystavují příznaky přítomnosti, které odlišují vynechanou hodnotu XML od explicitně prázdné hodnoty
Změněno (Changed)
- Import XFDF přijímá prvky a atributy s předponou jmenného prostoru, smíšený text a obsah CDATA, odkazy na entity a hodnoty s významnými mezerami, přičemž odmítá neplatné odkazy na skalární hodnoty Unicode
- Import a export XFDF používají indexované párování polí a ohraničené geometrické vyrovnávací paměti, což zlepšuje propustnost a chování špičkové alokace pro hluboce vnořené formuláře, velké kolekce anotací, seznamy inkoustů, vrcholy a označovací čtyřúhelníky
- Validace PDF/A a PDF/UA používají ohraničený růst pro velké kolekce stránek, streamů, názvů struktur a RoleMap; rozlišení RoleMap v PDF/UA nyní následuje přímá pole a nepřímé objekty názvů nebo polí s přesnou generací
Opraveno (Fixed)
- Obousměrné převody XFDF nyní zachovávají hluboce vnořené cesty polí, explicitní prázdné hodnoty polí, explicitní prázdný obsah anotací a rozdíl mezi chybějícím a prázdným obsahem
- Neplatná načtení paměťové vyrovnávací paměti a přiřazení stránek mimo rozsah jsou odmítnuta bez zanechání částečného stavu dokumentu nebo stránky, přičemž selhání opětovného načtení nativní stránky zachová dříve aktivní stránku
- Velké identifikátory označeného obsahu a vyrovnávací paměti metadat podpisů jsou před alokací nebo nativním přístupem ohraničeny a validovány
Version 2.42.0
Přidáno (Added)
TPdfMatrixnyní poskytujeInvert,TryInvert,TransformPointaTransformRectpro mapování souřadnic, testování zásahů, normalizované hranice a explicitní zpracování singulárních maticTPdf.WrapTextzískal přetíženíBreakLongWords, které rozděluje CJK a jiný text bez mezer, přičemž zachovává platné náhradní páry UTF-16 pohromaděTPdfAnnotation.AttachmentPointSetsvystavuje každý čtyřúhelník ve víceřádkových anotacích značek, zatímco stávající poleAttachmentPointszůstává aliasem pro první sadu
Změněno (Changed)
- Extrakce textu, konstrukce čitelného obsahu, vyhledávání slov a mapování posunu mluveného textu nyní používají ohraničenou alokaci a binární vyhledávací cesty, což snižuje opakované alokace a lineární skenování na velkých stránkách
- Serializace ASN.1 a generování šifrovaných PDF nyní používají geometrické výstupní vyrovnávací paměti; řazení šifrovaných objektů používá řazení
O(n log n)a řádky xref jsou zapisovány přímo do konečné vyrovnávací paměti WrapTextzachovává hranice řádků CR, LF a CRLF a znovu používá jeden nativní měřicí objekt pro celou operaci- Import a export XFDF zachovávají každý označovací čtyřúhelník; import také aplikuje barvy RGB/vnitřní barvy a parsuje desetinné souřadnice nezávisle na národním prostředí procesu
Opraveno (Fixed)
- Starší volající mohou znovu aktualizovat obsah a autora anotace přiřazením neprázdných řetězců bez nastavení novějších sentinelů
HasContentsaHasAuthor - Explicitně prázdné řetězce anotací nyní používají platnou nulou zakončenou nativní vyrovnávací paměť, takže vymazání
/Contents,/Ta dalších volitelných textových klíčů již nepředává nil ukazatel do PDFium
Version 2.41.0
Změněno (Changed)
- Preflight report
SaveJsonToFile,SaveMarkdownToFileaSaveTextToFilenyní na Delphi zapisují UTF-8 (což odpovídá stávajícímuSaveHtmlToFile) namísto systémové kódové stránky ANSI; ne-ASCII znaky v cestách k souborům, doporučeních a poznámkách o rozsahu byly dříve při ukládání těmito metodami na Delphi zkomoleny SaveCsvToFilenyní zapisuje UTF-8 s prefixem BOM, takže Excel pro Windows automaticky detekuje kódování; bez BOM interpretuje Excel UTF-8 CSV jako kódovou stránku 1252 a zkomolí veškeré ne-ASCII znaky
Opraveno (Fixed)
- Ukázka
ExtractImageszpůsobovala úniky cacheovaných objektůTBitmapveFExtractedImages, pokud byl formulář zavřen bez jejich předchozího explicitního vyčištění; formulář nyní přepisujeDestroypro voláníClearExtractedImages, čímž uvolní všechny cacheované bitmapy
Version 2.40.0
Změněno (Changed)
TPdf.RenderPage(HDC, ...)nyní maskuje výjimky FPU/SSE kolem voláníFPDF_RenderPage, což odpovídáTPdfView.RenderPage(HDC)(opraveno ve verzi v2.25.0) a každému vstupnímu bodu vykreslování, který vrací bitmapu; přetížení pro přímý zápis na DC na úrovniTPdfdříve ponechávalo výjimky FPU nemaskované u kompilátorů před D12
Opraveno (Fixed)
ColorToARGBnyní vrací plně průhledný pixel (alfa 0) proclNoneaclDefaultnamísto interpretace této zástupné hodnoty jako doslovné barvy RGB; předchozí chování způsobovalo tmavou, téměř neprůhlednou výplň, když volající předalclNonea očekával „žádnou barvu“
Version 2.39.1
Opraveno (Fixed)
- Explicitní ukládání do PDF 1.3 nyní odstraňuje položky
/SMask /None,/AIS falsea/TK true, které pouze opakují výchozí grafický stav, přičemž nadále odmítá jakýkoli jiný než výchozí stav průhlednosti
Version 2.39.0
Změněno (Changed)
CreatePDFaImageToPDFnyní používají potvrzené cíle ukládání a hlásí úspěch pouze tehdy, kdyžSaveAsúspěšně dokončí zápisBatchExport,PDFtoJpgaSplitPDFnyní přidělují jedinečné výstupní adresáře, takže opakované spuštění a stejně pojmenované vstupy zachovají dřívější výsledkySplitViewnyní po zrušení nebo nenalezení shody dokončí hledání bez ponechání skrytého stavu stránky a přeruší neúplné tiskové úlohy namísto odesílání částečného výstupu
Opraveno (Fixed)
MergePDFnyní odmítá chybně formátované tokeny rozsahu stránek a výstupní cesty přepisující zdroj, počítá skutečně importované stránky a odmítá uložit prázdný výsledek- Ukázky
Attachmentpro Delphi a C++Builder nyní ukládají do stejné cesty pomocí bezpečného nahrazení souborů s podporou vrácení změn, takže případné selhání přejmenování nemůže odstranit původní PDF
Version 2.38.0
Změněno (Changed)
SetAnnotationDatanyní chrání zápis/Contentsa/Authorpomocí zástupných příznakůHasContents/HasAuthorvTPdfAnnotation, což odpovídá stávajícímu vzoruHasName/HasSubject/HasIcon; dříve byly tyto dvě položky zapisovány bezpodmínečně, takže přiřazení záznamuDefault(TPdfAnnotation)za účelem aktualizace pouze barvy nebo příznaků tiše přepsalo stávající obsah a autora anotace prázdnými řetězci;GetPageAnnotationnyní tyto příznaky nastavuje, takže cyklus čtení-úprava-zápis zachová původní hodnoty
Opraveno (Fixed)
GenerateFormAppearancesnyní čte hodnotu zaškrtávacího pole nebo přepínače pomocíFPDFAnnot_GetFormFieldValue(který přechází do slovníku nadřazeného pole podle ISO 32000-1 §12.7.5) namístoFPDFAnnot_GetStringValue(Annot, 'V', ...)(který čte slovník widgetu); widget obvykle neobsahuje/V, takže/ASnebylo nikdy synchronizováno se stavem zaškrtnutí a sloučené zaškrtávací pole nebo přepínač se vykreslily jako nezaškrtnuté
Version 2.37.0
Změněno (Changed)
ParseTsaUrlnyní po analýze omezuje port na rozsah1..65535; nadměrná hodnota portu by se jinak při přetečení a oříznutíDWORDzavinula a mohla by skončit na platném portu- XFDF
ParseFieldnyní přijímá parametr hloubky (výchozí 0, s limitem 64) a při dosažení limitu vrací prázdné pole, takže škodlivě vnořený řetězec<field>o hloubce 100 000 již nemůže způsobit přetečení zásobníku
Opraveno (Fixed)
- TSA HTTP požadavek nyní předchází prázdnému tělu požadavku před předáním
@ReqDer[0]doWinHttpSendRequest; dereference dynamického pole s nulovou délkou by přistupovala k neplatnému ukazateli;BuildTimeStampReqsice vždy vrací neprázdnou SEQUENCE, ale místo volání nyní tento kontrakt bezpečně hlídá
Poznámky (Notes)
- Komentář v hlavičce
FPdfTsaWintýkající se kontroly odvolání HTTPS byl opraven: WinHttp sice ve výchozím nastavení ověřuje řetězec certifikátů serveru, ale neprovádí kontrolu odvolání CRL/OCSP, pokud to není explicitně povoleno pomocíWinHttpSetOption; předchozí formulace tvrdila, že kontrola odvolání funguje automaticky, což bylo zavádějící
Version 2.36.0
Změněno (Changed)
- Požadavky TSA HTTP nyní kromě hlaviček
Content-TypeaAcceptodesílají explicitní hlavičkuContent-Length; WinHttp ji sice automaticky odvozuje z celkové délky, ale některé proxy RFC 3161 vyžadují explicitní hlavičku a bez ní požadavek odmítají s kódem411 Length Required - Export XFDF nyní odstraňuje řídicí znaky C0 (kromě TAB/LF/CR, které jsou již escapovány) namísto generování neplatné sekvence se zpětným lomítkem a hexadecimální hodnotou; předchozí escapování
\-01Fnení platným XML (zpětné lomítko nemá v XML žádný speciální význam), takže jakákoli kompatibilní čtečka by dokument odmítla jako poškozený InjectAssociatedFilesnyní zapisuje/Subtypedo slovníku streamu EmbeddedFile, pokud volající zadáTAssociateFile.MIMEType; toto pole bylo deklarováno a zdokumentováno, ale injektor dříve natvrdo zapisoval/Type /EmbeddedFilea hodnotu ignoroval (ISO 32000-2 §7.11.4 přitom povoluje/Subtypeve streamu)
Opraveno (Fixed)
- Import XFDF přeskakoval první bajt obsahu po UTF-8 BOM a také první bajt, pokud BOM nebyl přítomen;
BytesToAnsi(Bytes, 4, ...)(BOM) aBytesToAnsi(Bytes, 1, ...)(bez BOM) používaly počáteční offsety posunuté o jedna, protožeBytesToAnsibere index pole od nuly; volání nyní správně používají3a0 ExtractSignatureValueobsahoval dvě chyby odsazení s neuzavřenýmif, kdy seR.Position:= CNspouštělo bezpodmínečně pro volitelné větvecertificates [0]asignedAttrs [0]; tyto větve jsou nyní uzavřeny do blokůbegin/end, takže se pozice posune pouze tehdy, byl-li volitelný TLV skutečně načten (stejná chyba byla opravena vAddSignatureTimestampToCmsve verzi v2.22.0)
Version 2.35.0
Změněno (Changed)
TFPDFAvail_IsDocAvail,TFPDFAvail_IsPageAvailaTFPDFAvail_IsFormAvailnyní přijímajíhints: PFX_DOWNLOADHINTSnamístovar hints: FX_DOWNLOADHINTS, takže dokumentovaný režim pouze pro dotazy snullptr(ověření dostupnosti bez vyžádání dalších dat) je přístupný z Delphi; hlavička PDFium explicitně povoluje hodnotu null prohints, což předchozí předávání přesvarznemožňovaloTFPDF_SetSystemFontInfonyní přijímápFontInfo: PFPDF_SYSFONTINFOnamístovar pFontInfo: FPDF_SYSFONTINFO, takže volající mohou předatnil, čímž sdělí PDFium, aby přestalo používat dříve zaregistrované rozhraní systémových písem (což je dokumentovaný způsob zakázání)- Vykreslování
TPdfThumbnailView.Paintnyní počítáVisibleRowspomocí stejného vzorce jakoUpdateScrollBarRange(ClientHeight div RowHeight), takže počet vykreslených řádků odpovídá velikosti stránky posuvníku; předchozí vzorec pro vykreslování ((ClientHeight - FMarginY) div RowHeight + 1) se mohl v mezních výškách lišit o jeden řádek, což vedlo k vykreslování řádku mimo viditelnou oblast nebo vynechání posledního viditelného řádku
Version 2.34.0
Přidáno (Added)
TPdf.SaveAsEncrypted/SaveAsEncryptedToStream— vysokoúrovňové API, které uloží dokument a poté jej zašifruje pomocí PDF 2.0 AES-256-CBC (V=5/R=5/R=6); přijímáTPdfEncryptOptionss heslem uživatele/vlastníka, oprávněními a revizí; předává volání naEncryptDocumentBytes- Šifrování řetězcových literálů StrF:
EncryptDocumentBytesnyní šifruje řetězcové literály(...)v nestreamových objektech (slovník Info atd.) do hexadecimálních řetězců AES-256-CBC, což odpovídá formátu šifrování streamů (16bajtový IV + šifrovaný text PKCS7); hexadecimální řetězce<...>zůstávají nedotčeny
Version 2.33.0
Přidáno (Added)
- Injektor celodokumentového šifrování AES-256-CBC v
FPdfEncrypt.pas;EncryptDocumentBytesbere nešifrované PDF a heslo, šifruje každý nepřímý objekt streamu (16bajtový IV + AES-256-CBC PKCS7 pod klíčem souboru), upravuje/Length, připojuje objekt slovníku/Encrypta znovu sestavuje kompletní klasickou tabulku křížových odkazů a trailer s/Encrypta/ID; dokončuje tak šifrovací zásobník PDF 2.0 (blok AES + GCM + SHA-512/384 + odvození klíče R6 + slovník + prohledání celého dokumentu) - Pomocná funkce
EncryptStreamPayload— formát streamu PDF 2.0 AES-256 (IV předřazený před šifrovaný text AES-CBC-PKCS7), znovupoužitelný pro volající, kteří si spravují vlastní rozložení objektů
Version 2.32.0
Přidáno (Added)
- Hašování SHA-512 / SHA-384 (FIPS 180-4) v nové jednotce
FPdfSha512.pas; čistý Pascal, portovaný z HotPDF, vyžadovaný iterací haše hesla PDF 2.0 R6, která se v každém kole větví na základě 128bitové hodnoty modulo 3 pro výběr mezi SHA-256/384/512; správnost je ověřena testy se známým výsledkem podle FIPS-180-4 B.1 - Odvození šifrovacího klíče PDF 2.0 a sestavení slovníku Encrypt v nové jednotce
FPdfEncrypt.pas; implementuje algoritmus 2.B z ISO 32000-2 §7.6.4.3 (iterativní hašování R6: AES-128-CBC + iterativní výběr SHA-256/384/512), odvozuje 32bajtový šifrovací klíč souboru a položky/O,/U,/OE,/UE,/Permsa vytváří slovník Encrypt V=5/R=5/R=6 s/CFM /AESV3; portováno z PDFlibPas a přizpůsobeno stylu TBytes
Version 2.31.0
Přidáno (Added)
- Primitiva blokové šifry AES (FIPS 197) v nové jednotce
FPdfAes.pas; čistý Pascal implementující blokové šifry AES-128 a AES-256, pomocné rutiny pro režim CBC a CSPRNG backend portovaný z HotPDF; testy se známým výsledkem podle FIPS-197 Appendix C.2 / C.3 ověřují správnost a tvoří kryptografický základ pro šifrovací zásobník PDF 2.0 - Autentizované šifrování AES-GCM (NIST SP 800-38D) v nové jednotce
FPdfAesGcm.pas; implementuje GHASH (násobení v GF(2^128)), GCTR a konstrukci GCM AEAD nad blokovými primitivy AES; testovací případy NIST GCM 1 a 3 (AES-128) se přesně shodují s autoritativním šifrovým textem a tagem, testovací případ 13 (AES-256) úspěšně prochází obousměrným testem; GCM je režim podle ISO/TS 32003 pro PDF 2.0 - Validace integrity ParentTree a ClassMap pro PDF/A Level A (ISO 19005-1 §6.8.3);
pvaiParentTreeMissingoznačuje StructTreeRoot, kterému chybí číselný strom /ParentTree;pvaiClassMapUnresolvedoznačuje odkaz na třídu /C bez /ClassMap
Version 2.30.0
Přidáno (Added)
- Vkládání přidružených souborů (
InjectAssociateFiles/TPdf.SaveAsWithAssociateFiles, ISO 32000-2 §7.11.4); nová jednotkaFPdfAssocFilespřipojuje pole odkazů na specifikace souborů/AFke katalogu nebo slovníku kterékoli stránky a pokrývá všech osm hodnot/AFRelationshipz tabulky 45 normy ISO 32000-2; znovu využívá vzor inkrementálních aktualizací ověřený uInjectPadesDssMarkers - Podpora PDF/X-6 (ISO 15930-9:2020);
TPdfXConformancepřidávápxc6, přičemž injektor a validátor jej integrují do identifikacepdfxid:GTS_PDFXVersion; PDF/X-6 je nástupce PDF/X-4 pro kompletní výměnu dat založený na PDF 2.0 - PDF/A zakazuje akci
/Thread(chybějící položka v povoleném seznamu podle ISO 19005-1 §6.6.1); seznam zakázaných akcí nyní zahrnuje Thread vedle Launch, ResetForm, ImportData, SetOCGState, SetState, GoTo3DView, Rendition a Hide
Opraveno (Fixed)
- Validační cesta pro PDF/A-4e nyní respektuje stejné kontroly struktury značek, MarkInfo a konců slov jako Level A; úprava na straně ukládání ve verzi v2.29.0 sice pokrývala
PdfAIsLevelE, ale tři kontroly vValidatePdfAComplianceověřovaly pouzePdfAIsLevelA, takže dokument PDF/A-4e postrádající strukturu značek procházel bez upozornění - Odchylka testu OCG
/BaseState: zpracování PostProcess ve verzi v2.28.0 správně rozšířilo podporu na/ONi/OFF(ISO 32000-1 Table 8.70), avšak testy pro Delphi a C++ stále očekávaly odmítnutí/OFF; testy nyní používají skutečně neplatnou hodnotu (/Undefined) a nový pozitivní test ověřuje akceptování/OFF - Příliš obecné vyhodnocování geoprostorového
/Subtype /GEO: funkceContainsDictionarySubtype('GEO')odpovídala jakémukoli slovníku, který tento token nesl, včetně nesouvisejících jako například/ViewerPreferences << /Subtype /GEO >>; nová funkceContainsMeasureDictionarySubtypenavíc vyžaduje/Type /Measurenebo přidružený klíč specifický pro Measure, takže slovníky nesouvisející s Measure již nevyžadují splnění podmínky ADBE ExtensionLevel 3
Version 2.29.0
Přidáno (Added)
- Podpora PDF/A-4 (ISO 19005-4:2020) napříč validátorem, injektorem XMP a objektovým modelem Pdfium;
TPdfAConformancepřidávápac4base,pac4fapac4e, přičemž základní úroveň vychází z PDF 2.0 (ISO 32000-2) a nahrazuje starší úrovně A/B/U schématem base + F (formuláře) + E (přístupnost);ValidatePdfAčte XMP paketpdfaid:part=4(základní úroveň vynechává element shody),SaveAsPdfAjej generuje aSignPadesWithPdfApřijímápac4basejako kontejner pro dlouhodobou archivaci - Vazba pro
FPDFBookmark_GetColor— poslední chybějící veřejný export PDFium (469/469);TBookmarkzískává poleHasColoraColornaplněná z pole záložky/C(ISO 32000-1 §12.3.3), přičemž vazba využívá tolerantní načítání, takže starší verze DLL bez tohoto exportu nadále bez problémů fungují - Kontrola verze hlavičky PDF/E-1 (ISO 24517-1 §5)
pveiBadPdfVersion— standard PDF/E-1 vychází z verze PDF 1.6 a hlavička neodpovídající této verzi je nyní označena jako neplatná - PDF/R-1 (ISO 23504-1)
pvriEncryptVersionMismatch— šifrování je povoleno pouze při hlavičce%PDF-2.0; tělo verze 1.x nesoucí/Encryptje nyní označeno (dříve bylo ignorováno) - PDF/R-1
pvriBadMediaBox—MediaBoxkaždé stránky musí mít formát[0 0 w h];PdfRHasNonZeroMediaBoxOriginje na národním prostředí nezávislý ASCII skener, který přeskakuje nepřímo odkazované MediaBoxy - PDF/A Level A
pvaiRoleMapUnresolved(ISO 19005-1 §6.8.3.4) — přítomná, ale neúplná mapa rolí RoleMap, která ponechává vlastní typy struktur/Snenamapované, je nyní označena jako chyba; tím se uzavírá mezera po stávající kontrolepvaiRoleMapMissing, která hlídala pouze samotnou přítomnost mapy
Opraveno (Fixed)
PdfVersionToName(20)vracelo"1.0"namísto"2.0", což poškozovalo položku katalogu/Versiona zprávy validátoru pro každé ukládání PDF 2.0; formátovač nyní pro kódy verzí>= 20explicitně rozděluje hlavní a vedlejší verzi- Kodér záporných hodnot INTEGER v
FPdfAsn1.passelhal při kompilaci pod Delphi 12 (chybaE2015uInteger(-(V<0))), což blokovalo celý testovací projekt; opraveno použitímInt64(-Ord(V<0))pro masku znaménkového rozšíření - Seznam zakázaných anotací pro PDF/A nyní zahrnuje
/RichMedianapříč všemi částmi (dříve chybělo; ISO 32000-1 §12.5.6.35 toto chování v PDF/A zakazuje)
Version 2.28.0
Přidáno (Added)
TPdfVersionnyní obsahujepv20pro PDF 2.0 (ISO 32000-2);DecodePdfVersion(20)vracípv20namístopvUnknownaEncodePdfVersion(pv20)generuje hodnotu 20, takže verze dokumentu PDF 2.0 se již neztratí při opětovném načtení a lze ji explicitně zapsat
Změněno (Changed)
DecodeDatenyní analyzuje řetězce kalendářního data PDF s volitelnými koncovými poli podle specifikace PDF Reference 3.8.3 namísto striktního vyžadování plného 23znakového formátuD:YYYYMMDDHHmmSSOHH'mm'; vyhovující zkrácená data jakoD:20260712,D:20260712153000aD:20260712153000Zjsou nyní akceptována (dříve byla odmítána kvůli pevné podmínceLength=23); posun časového pásma je nyní ověřován proti reálnému rozsahu UTC-12 až UTC+14 namísto původního> 23FPdfMeasure.MeasureTextnyní kóduje název písma jako FPCAnsiString/ DelphiUTF8Encode, což odpovídá ostatním místům voláníFPDF_BYTESTRINGv této knihovně, namísto pouhého přetypování naAnsiString, které v závislosti na aktuální kódové stránce komolilo ne-ASCII názvy rodin písem
Opraveno (Fixed)
- Zpracování záporných hodnot v
TDerWriter.Integerzpůsobovalo pád nebo generovalo poškozený formát DER; cykluswhile V <> -1 do V := V shr 8ponechával proValue = -1poleInnerprázdné (což vedlo k chybě rozsahu na následnémInner[Length(Inner)-1]) a pro jiné záporné hodnoty generoval nadbytečné bajty; kodér nyní extrahuje bajty dvojkového doplňku s využitím posunů se znaménkovým rozšířením a správně se zastaví, když je zbytek již tvořen pouze znaménkovým rozšířením; pole INTEGER pro CMS/PAdES jsou sice kladná, takže tato oprava se dotkne pouze volání se zápornými hodnotami, ale samotná cesta je nyní implementována korektně - Metody
TPdf.GetCharacterOriginaTPdfView.GetCharacterOriginignorovaly návratovou hodnotuFPDFText_GetCharOrigina v případě chyby vracely neinicializovaný bod; výsledek je nyní inicializován nulovými hodnotami a neúspěšné načtení vrací počátek (což odpovídá chováníGetCharacterRectangle)
Version 2.27.0
Změněno (Changed)
- Delphi, C++Builder a Lazarus ukázky
PDFVieweraMultiPageViewernyní správně obsluhují hledání, klávesyEnter/F3pro další výsledek aEscpro zrušení - Tisk prohlížeče respektuje aktuální otočení a volí na výšku nebo na šířku
- Všechny tři ukázky
ViewerInteractionLabpodporujíCtrl+A,Ctrl+C,Enter,F3aEsc
Opraveno (Fixed)
- Zrušení tisku v C++Builder a Lazarus nyní přeruší úlohu tiskárny místo odeslání již vykreslených stránek
- Tlačítko Cancel v Delphi
MultiPageViewerje připojeno k obsluze a vyhledávací pole zachovávají nativní klávesy
Version 2.26.0
Změněno (Changed)
TPdf.GetObjectBitmap,TPdf.GetBitmap,TPdf.GetThumbnaila protějšky vTPdfViewnyní používají zámek vykreslování kolemFPDFImageObj_GetBitmap/FPDFPage_GetThumbnailAsBitmapTPdf.RenderPageThumbnailrespektuje/Rotatea přepočítává rozměry pro/Rotate 90a270
Opraveno (Fixed)
TPdfView.GetCharacterRectangleinicializuje obdélník a při chyběGetCharBoxvracíRect(0,0,0,0)GetLinkAnnotationsnyní předávásize-1do druhého volání cesty, takže nepřepisuje buffer
Version 2.25.0
Změněno (Changed)
TPdf.AddText,SetText,AddPathaInsertFormObjectFromXObjectzneplatní cache textu a odkazů před regenerací obsahuTPdfView.RenderPage(HDC, ...)nyní používá zámek a maskuje výjimky FPU/SSE kolemFPDF_RenderPage- Ukázka
PrintPDFpři zrušení voláPrinter.Abort
Opraveno (Fixed)
- Znaky nad U+FFFF nyní vrací U+FFFD; pro úplné UTF-16 použijte
GetText - Negativní počet v
GetWebLinksse omezuje na nulu TPdf.DestroymažePasswordpřesUniqueString+FillChar
Version 2.24.0
Přidáno (Added)
TPdf.DeletePage,GetAttachment,GetAttachmentName,GetAttachmentType,SetAttachmentaDeleteAttachmentnyní kontrolují index a při překročení rozsahu vyvolajíEPdfError
Opraveno (Fixed)
- Opraveny úniky
FPDF_PAGEOBJECTpři chybách v přidávání textu a obrázků TPdf.UnloadPagenyní ničí opuštěnýFPathTPdf.InsertFormObjectFromXObjectvolá po vloženíUpdatePage(FPDFPage_GenerateContent)
Version 2.23.0
Opraveno (Fixed)
- Validace
/BaseStatepřijímá/OFFi/ONpodle ISO 32000-1 Table 8.70 - Validace
/Intentpřijímá/Designa pole[/View /Design] - Detekce Geospatial Measure pro
/Extensions /ADBEExtensionLevel 3 už nevyžaduje/Type /Measurea kontroluje samotné/Subtype /GEO
Version 2.22.0
Změněno (Changed)
- Výpočty fit zoom v
TPdfViewpoužívajíClientWidth/ClientHeightmístoWidth/Height, takže stránka odpovídá viditelné ploše AddSignatureTimestampToCmsnyní vyvoláExceptions názvem nečitelného pole CMS SignerInfo a opravuje blokbegin/endkolemsignedAttrs [0]
Opraveno (Fixed)
- Handle CNG klíče v
ResolveWinSignerse při chybě uvolní přesNCryptFreeObject EcDsaP1363ToDerodmítá nulovou částrnebosmístoINTEGER 0
Version 2.21.12
Opraveno (Fixed)
- Explicitní ukládání do PDF 1.5 až PDF 1.7 nyní odmítá chybně formátované struktury
/OCPropertieskatalogu, včetně chybějících povinných položek/OCGsnebo/D, neplatných výchozích konfiguračních hodnot a neseznamových stavových zápisů
Version 2.21.11
Opraveno (Fixed)
- Explicitní ukládání verze PDF nyní odmítá přímé nebo nepřímé záznamy stránky
/Annots, jejichž slovníky anotací vynechávají povinný záznam/Subtypenebo/Rect
Version 2.21.10
Opraveno (Fixed)
- Explicitní ukládání do PDF 1.7 nyní vyžaduje, aby geoprostorové slovníky
/Type /Measure /Subtype /GEOa Projekční anotace deklarovaly/Extensions /ADBEs/BaseVersion /1.7a/ExtensionLevel 3nebo novější
Version 2.21.9
Opraveno (Fixed)
- Explicitní ukládání do PDF 1.7 nyní vyžaduje, aby RichMedia anotace a akce
RichMediaExecutedeklarovaly/Extensions /ADBEs/BaseVersion /1.7a/ExtensionLevel 3nebo novější
Version 2.21.8
Opraveno (Fixed)
- Explicitní ukládání do PDF 1.7 nyní vyžaduje, aby PRC 3D streamy deklarovaly
/Extensions /ADBEs/BaseVersion /1.7a/ExtensionLevel 1nebo novější, místo aby s PRC zacházelo jako se základní funkcí PDF 1.7
Version 2.21.7
Opraveno (Fixed)
- Explicitní ukládání do PDF 1.4 a starších nyní odmítá záznamy
/SMaskInDataobrazových XObjectů, včetně explicitní hodnoty0, protože vložené kanály měkkých masek JPEG 2000 vyžadují PDF 1.5 nebo novější
Version 2.21.6
Opraveno (Fixed)
- Explicitní ukládání do PDF 1.4 a starších nyní odmítá 16bitové obrazové XObjecty, které vyžadují PDF 1.5 nebo novější, zatímco cíle PDF 1.5 až PDF 1.7 zachovávají data obrázku
/BitsPerComponent 16
Version 2.21.5
Opraveno (Fixed)
- Explicitní ukládání do PDF 1.4 a starších nyní odmítá hodnoty
/PageLayout /TwoPageLefta/TwoPageRightkatalogu dokumentu, které vyžadují PDF 1.5 nebo novější, zatímco cíle PDF 1.5 až PDF 1.7 zachovávají požadované dvoustránkové rozvržení
Version 2.21.4
Opraveno (Fixed)
- Explicitní ukládání do PDF 1.3 nyní odmítá záznamy
/Langv katalogu dokumentu, které vyžadují PDF 1.4 nebo novější, zatímco cíle PDF 1.4 až PDF 1.7 zachovávají identifikátor jazyka
Version 2.21.3
Opraveno (Fixed)
- Explicitní ukládání do PDF 1.3 nyní odmítá stromy názvů
/EmbeddedFilesv dokumentu, které vyžadují PDF 1.4 nebo novější, aniž by odmítalo streamy vložených souborů odkazované přes starší specifikace souborů
Version 2.21.2
Opraveno (Fixed)
- Poslední verze: 2.21.4; Datum vydání:
Version 2.21.1
Opraveno (Fixed)
- Validace hybridních odkazů nyní aplikuje doplňkové položky
/XRefStmpřed zástupnými místy klasického xref ve stejné revizi, takže komprimované anotace a jiné objekty chráněné verzí již nejsou přehlédnuty, když je tabulka kompatibility označí jako volné
Version 2.21.0
Změněno (Changed)
- Všechny ukázkové prohlížeče pro Delphi, C++Builder a Lazarus umějí otevřít PDF předaný jako první argument příkazového řádku, a ukázky
MultiPageViewerpro C++Builder a Lazarus poskytují explicitní zkratky pro výběr vše a kopírování
Opraveno (Fixed)
- Poslední verze: 2.21.12; Datum vydání:
Version 2.20.0
Změněno (Changed)
- Všechny ukázkové prohlížeče pro Delphi, C++Builder a Lazarus nyní poskytují konzistentní zkratky pro otevírání, hledání, ukládání, tisk, přibližování a navigaci mezi stránkami, přičemž každá varianta
ViewerInteractionLabtaké podporuje přeskakování stránek, ověřené ruční přiblížení 10–600 %, trvalé protokoly interakce a kontroly zpětného mapování souřadnic kliknutí
Version 2.19.1
Opraveno (Fixed)
- Explicitní ověřování verze PDF nyní sleduje aktivní řetězec revizí klasického, hybridního nebo xref-stream dokumentu včetně položek komprimovaných objektů, takže nahrazené, uvolněné a neodkazované objekty již nezpůsobují falešná selhání verze funkce
Version 2.19.0
Změněno (Changed)
- Ukázky příloh, extrakce obrázků, extrakce textu, konverze stránek a rozdělení pro C++Builder a Lazarus nyní používají vyhrazené výstupní složky nebo bezpečně dokončené soubory, stabilní názvy s doplněním nulami, průběžné aktualizace průběhu a souhrny dokončení s počty chyb pro jednotlivé položky
Opraveno (Fixed)
- Ukázka
CJKTextLabpro C++Builder nyní měří text přes exportované editační funkce PDFium aMergePDFse vyhýbá nejednoznačnému přetížení zpráv VCL, čímž se obnovují čisté sestavení RAD Studio 37
Version 2.18.3
Opraveno (Fixed)
- Časové razítko dokumentu PAdES B-LTA je nyní registrováno jako zjistitelné podpisové pole — neviditelný Widget dosažitelný přes
/Annotsprvní stránky a pole AcroForm/Fields(ETSI EN 319 142-1 §5.4.3) — místo nedosažitelného osiřelého objektu, který validátory enumerující podpisová pole nemohly najít; stávající anotace a pole jsou zachovány
Version 2.18.2
Opraveno (Fixed)
- Podepisování PAdES a klasický zápis křížových odkazů nyní vyvolají jasnou chybu, pokud bajtový posun překročí pevnou šířku 10místného pole (~9,3 GB), místo tichého ponechání zástupného místa
/ByteRangenezapsaného (což by vytvořilo neplatný podpis) nebo přetečení 20bajtového řádku xref (ISO 32000-1 §7.5.4); výstup xref-stream používá 8bajtová binární pole a není to dotčeno
Version 2.18.1
Opraveno (Fixed)
- Podepisování PAdES nyní resolvuje nepřímé reference
/Annots,/AcroForma/Fieldsprvní stránky celou hlavičkou objektu (ISO 32000-1 §7.5.3) a skutečným generačním číslem reference; prostý substringový hledání dříve mohl porovnat číslo objektu uvnitř delšího (resolvující5 0 Rna15 0 obj) a pevně zakódovaná generace přehlédla objekty sgen>0, čímž došlo k poškození polí podpisových polí nebo odmítnutí platných dokumentů - Pokud katalog, první stránka,
/Annots,/AcroFormnebo/Fieldsžije uvnitř streamu objektů, podepisování nyní před selháním zkusí rozšířenou kopii místo přímého odmítnutí dokumentu
Version 2.18.0
Přidáno (Added)
ReadPdfVersionInfohlásí verzi hlavičky, efektivní základní verzi, přepsání katalogu a úroveň rozšíření vývojáře Adobe ze streamu PDF
Změněno (Changed)
- Explicitní ukládání do PDF 1.3–1.7 nyní ověřuje struktury katalogu, prostředků stránek, XFA, redakce a rozšíření pro vývojáře v kontextu vlastnícího objektu; šifrovaný explicitní výstup verze a inkrementální normalizace PDF 1.3 jsou odmítnuty pro zachování integrity dokumentu
- Ukládání do souborové cesty nyní zapisuje do sesterského dočasného souboru a nahrazuje cíl pouze po úspěšném dokončení všech kompresí, normalizací a kontrol verze
Opraveno (Fixed)
- Výstup PDF 1.3 nyní nese požadovaný plný prostředek
/ProcSeta odstraňuje klíče průhlednosti PDF 1.4, pokud pouze opakují počáteční hodnoty grafického stavu PDF 1.3 - Soubory s hybridními referencemi, xref-stream a streamy objektů již nejsou přepisovány klasickým xref kompresorem, čímž se zabraňuje ztrátě komprimovaných objektových položek
- Názvy připomínající klíče průhlednosti nebo funkce katalogu uvnitř řetězců, komentářů nebo nesouvisejících map prostředků již nezpůsobují falešná selhání cílové verze
Version 2.17.0
Přidáno (Added)
- Podpisy PAdES jsou nyní registrovány jako neviditelné anotace Widget v poli
/Annotsprvní stránky a v poli/FieldsAcroForm, přičemž jsou zachovány stávající anotace a pole formuláře
Změněno (Changed)
- Inkrementální aktualizace PDF/A, PDF/X, PDF/E, PDF/R, PDF/UA, PDF/VT a PAdES nyní zachovávají reprezentaci křížových odkazů zdrojového dokumentu: dokumenty xref-stream obdrží aktualizaci xref-stream podle ISO 32000-1 §7.5.8.1, zatímco klasické dokumenty nadále obdrží tabulku xref
- Posuny křížových odkazů,
startxref,/Prev, hodnoty ByteRange PAdES a zpracování rozsahu SHA-256 nyní používají 64bitové pozice s chunked hashováním, umožňující soubory větší než 2 GB v 64bitových sestaveních - Generované zapisovatelné pakety XMP nyní rezervují 2048 bajtů výplně před uzavírací instrukcí paketu
Version 2.16.10
Opraveno (Fixed)
- Rozbalování streamů objektů již neobnovuje zastaralé kopie objektů, které inkrementální aktualizace přesunula z objektového streamu do prosté definice (ISO 32000-1 §7.5.7); kontroly shody a injekce markerů dříve resolvovaly zastaralý katalog nebo slovník metadat u takových souborů
Version 2.16.9
Opraveno (Fixed)
- Na Free Pascalu jsou textové řetězce, jejichž vstup není platné UTF-8, rozšiřovány bajt po bajtu jako Latin-1 a zapisovány jako hexadecimální řetězce UTF-16BE; surové vysoké bajty dříve unikaly do literálního řetězce, který není platným kódováním textového řetězce PDF 1.7
- Dekódování streamu nyní rozpoznává surová deflate data bez obálky zlib RFC 1950 (běžná chyba vadných zapisovačů) a dekomprimuje je v surovém režimu, takže kontroly shody již nejsou tiše slepé na takových streamech
Version 2.16.8
Opraveno (Fixed)
- Inkrementální aktualizace zapsané cestou post-processingu ukládání nyní obnovují druhý (měnící se) element traileru
/IDpodle ISO 32000-1 §14.4; oba elementy byly dříve kopírovány doslovně, takže nástroje pro ukládání do cache a synchronizaci viděly po každé aktualizaci nezměněný identifikátor
Version 2.16.7
Opraveno (Fixed)
- Blanking těla streamu používaný kontrolami shody nyní vyžaduje, aby klíčové slovo
streambylo následováno koncem řádku (ISO 32000-1 §7.3.8.1); slovo uvnitř literálního řetězce jako(downstream)dříve blankovalo veškerou následující strukturu až do dalšíhoendstream, čímž skrývalo skutečná porušení před kontrolami na úrovni bajtů - Skenování zakázaných funkcí PDF/X a PDF/E nyní také blankuje literální řetězce a komentáře (§7.2.2), takže hodnota jako
/Title (see /JavaScript docs)nebo komentovaný token již neprodukuje falešný nálezJavaScript,AcroFormneboLZWDecode
Version 2.16.6
Opraveno (Fixed)
- Položky DPM PDF/VT jsou nyní ověřovány při zápisu podle dokumentace: názvy klíčů porušující pravidlo NMTOKEN z ISO 16612-2 §6.6 nebo pravidlo prefixu registrátora z Annexu E a duplicitní názvy jsou odmítnuty místo zapsání do slovníku DPart — název obsahující mezeru dříve byl rozdělen na chybný pár klíč/hodnota a slovník byl poškozen
Version 2.16.5
Opraveno (Fixed)
- Odstraňování položky slovníku, jejíž hodnota je hexadecimální řetězec (například
/Check <...>), nyní odstraní celou položku; injektory dříve zanechávaly za sebou osiřelou hexadecimální hodnotu, čímž vznikal syntakticky poškozený slovník - Odstraňování položky, jejíž nepřímá reference používá mezi tokeny nové řádky (ISO 32000-1 §7.3.10 povoluje jakékoli bílé znaky), již nezanechává za sebou generační číslo a klíčové slovo
R
Version 2.16.4
Opraveno (Fixed)
- Sken maximálního čísla objektu již nevyžaduje, aby hlavičky objektů začínaly na řádku (ISO 32000-1 §7.5.3 povoluje před nimi jakékoli bílé znaky nebo oddělovače), takže injektory již nemohou alokovat číslo objektu, které by kolidovalo s inline hlavičkou
N G obja tiše poškodilo soubor; čísla objektů jsou ohraničena stropem Annexu C - Streamy, jejichž
/Lengthje nepřímá reference, nyní resolvují odkazovaný celočíselný objekt a použijí jeho hodnotu, pokud odpovídá uzavíracímuendstream; dříve takové streamy byly ohraničeny vyhledáváním vzoru, který zkracoval těla legálně obsahující bajtovou sekvenciendstream— typické pro vložené PDF přílohy
Version 2.16.3
Opraveno (Fixed)
- Průchody kompresí streamů předávají dokumenty s křížovým odkazem (soubory PDF 1.5+ bez klasického klíčového slova
trailer) beze změny; cesta přestavby dříve chybně parsovalastartxrefjako umístění tabulky a syntetizovala odhadovaný trailer, což mohlo vytvořit neotvíratelný soubor - Kompresor přeskakuje streamy metadat XMP, aby dokument PDF/A zachoval svůj povinný nefiltrovaný stream metadat (ISO 19005-1 §6.7.2), a ponechává nedotčené streamy externích souborů (
/Fs/FFilter) - Přestavěná tabulka křížových odkazů skenuje kopii dokumentu se stripovanými streamy, takže binární obsah streamu již nemůže falšovat hlavičky objektů nebo nafouknout tabulku;
/Sizepřestavěného traileru nyní odráží skutečnou tabulku a čísla objektů jsou ohraničena stropem Annexu C - Lokalizace původní tabulky křížových odkazů přijímá konce řádků pouze CR (ISO 32000-1 §7.5.1) a již nemůže párovat písmena
xrefuvnitřstartxref; skenování klíčových slov streamu získalo stejnou ochranuendstream-tail, jakou používají jiná místa, a nyní postupuje přes přeskočená těla streamů
Version 2.16.2
Opraveno (Fixed)
- Parsování celých čísel napříč čtečkami PDF na úrovni bajtů nyní přijímá explicitní znaménko
+povolené ISO 32000-1 §7.3.3 a odmítá sekvence číslic, které by způsobily přetečení, takže nepřátelské nebo poškozené dokumenty již nemohou zabalit parsované délky a posuny do zavádějících hodnot
Version 2.16.1
Opraveno (Fixed)
- Injektor PDF/UA zapisuje hodnotu
/Langkatalogu jako řádný textový řetězec PDF; dříve spouštěl hodnotu přes XML escapovač, takže jazykový tag obsahující&nebo závorky vytvářel poškozenou položku a non-ASCII vstup byl zapsán jako surové UTF-8 - Položka Info
/ISO_PDFEVersionPDF/E používá sdílený kodér textového řetězce, čímž zachovává legalnost non-ASCII hodnot v PDF 1.7 - XML escapování pro pakety XMP odstraňuje řídící znaky, které jsou nelegální v XML 1.0, takže metadata zkopírovaná z poškozeného zdrojového dokumentu již nemohou učinit celý stream metadat nesprávně formátovaným
- Konverze datumů PDF-na-XMP ověřuje, že datumová pole jsou číselná, a doplňuje chybějící pole minut, čímž zabraňuje nesprávně formátovaným datumům ISO 8601 ve generovaném XMP; na platformách jiných než Windows nyní záložní časové razítko obsahuje denní dobu místo holého data
Version 2.16.0
Přidáno (Added)
- Dekódování streamů nyní rekonstruuje prediktory
/DecodeParms(prediktory PNG 10–15 a TIFF prediktor 2, ISO 32000-1 §7.4.4.4) po FlateDecode, respektuje/Colors,/BitsPerComponenta/Columns; objektové streamy komprimované s prediktorem — běžná volba zapisovačů PDF 1.5+ — dříve zobrazovaly diferencované bajty, takže přenášené objekty byly tiše neviditelné pro kontroly shody a injekci markerů
Opraveno (Fixed)
- Detekce FlateDecode nyní parsuje hodnotu
/Filterjako název nebo pole místo porovnání substringů, takže kaskádované řetězce filtrů a výskyty slova uvnitř nesouvisejících hodnot již nespouštějí chybné rozbalení; nepodporované řetězce fallbackují na surové bajty jako dříve
Version 2.15.1
Opraveno (Fixed)
- Skener slovníku nyní přeskakuje literální řetězce, hexadecimální řetězce a komentáře při vyrovnávání
<</>>(ISO 32000-1 §7.2.2), takže slovníky obsahující hodnoty jako(A >> B)nebo hexadecimální řetězec přiléhající k uzavírací oddělovači již nejsou zkracovány při parsování traileru, katalogu a skenování shody - Extrakce literálních řetězců nyní dekóduje plnou sadu escape sekvencí §7.3.4.2 Tabulka 3 —
\n \r \t \b \f, oktálové\ddd, pokračování řádků a normalizace EOL bez escape — místo kopírování escape písmene doslovně, čímž se obnovují správná porovnání/Producer,/GTS_PDFXVersiona/ISO_PDFEVersionpro zapisovače, které používají oktálové escape sekvence - Literální řetězce zapsané injektory markerů nyní escapují CR, LF a jiné řídící znaky, takže hodnoty přežijí normalizaci konce řádku na straně čtečky bajt po bajtu
Version 2.15.0
Opraveno (Fixed)
- Inkrementální aktualizace zapsané injektory markerů PDF/A, PDF/X, PDF/E, PDF/R, PDF/UA a PDF/VT a cestami podepisování PAdES a DSS nyní zachovávají trvalý identifikátor souboru zdrojového dokumentu: první element
/IDtraileru je přenesen doslovně podle ISO 32000-1 §14.4 a obnovuje se pouze druhý (měnící se) element; dříve oba elementy byly regenerovány, takže externí reference a pracovní postupy dlouhodobé validace viděly po každém uložení jiný identifikátor dokumentu - Podpisy PAdES, injekce DSS a časová razítka dokumentu B-LTA nyní přenášejí referenci
/Infozdrojového traileru (ISO 32000-1 §7.5.6), takže vlastnosti dokumentu již po podpisu nezmizí z panelů čtečky; trailer časového razítka dokumentu také získá pole/ID - Záložní metoda
/Infotraileru pro dokumenty s křížovým odkazem nyní správně lokalizuje XRef stream dictionary a zachovává generační číslo reference; dříve nikdy nepárovala na odpovídajících souborech PDF 1.5+, tiše zahazujíce/Info
Version 2.14.4
Opraveno (Fixed)
- Datum
/Mslovníku podpisu zapsanéTPdf.SignPadesaSignPadesBytesnyní nese povinnou předponuD:a indikátor UTC posunuZpožadované ISO 32000-1 §7.9.4; striktní validátory dříve odmítaly čas podpisu jako nesprávně formátovaný datumový řetězec
Version 2.14.3
Opraveno (Fixed)
- Vyhledávání klíčů slovníku ve sdílené čtečce PDF nyní páruje celé tokeny názvů (ISO 32000-1 §7.3.5); dříve stream, jehož slovník uváděl
/Length1před/Length(typické pro streamy FontFile), byl zkrácen na nesprávný počet bajtů, čímž se tiše oslepily skeny shody PDF/A, PDF/UA a jiné, které čtou streamy písem, CMap nebo metadat - Vyhledávání traileru
/Encrypt,/Root,/Sizea/Infojiž nepáruje delší klíče sdílející stejnou předponu (jako/EncryptMetadata) - Rozbalování streamů objektů již nedůvěřuje poškozeným nebo nepřátelským hodnotám
/N: non-celočíselné hodnoty nyní dávají 0 místo neinicializovaného čísla a horní hranice odvozená z/Firstzabraňuje nadměrným alokacím při skenování poškozených dokumentů
Version 2.14.2
Opraveno (Fixed)
- Injektory markerů PDF/X, PDF/VT, PDF/UA, PDF/E a PDF/R nyní kopírují šifrované zdrojové dokumenty beze změny místo připojování plaintext aktualizačních sekcí; předchozí chování produkovalo soubory, jejichž nejnovější trailer ztratil položku
/Encrypt(ISO 32000-1 §7.5.6), takže odpovídající čtečky chybně četly šifrované tělo jako plaintext TPdf.SignPades,SignPadesBytesaInjectPadesDssMarkersnyní vyvolávajíEPadesCrypto, pokud je zdrojový dokument šifrovaný, místo tichého vygenerování poškozeného nebo neověřitelného souboru; před podpisem nebo vložením materiálu DSS odstraňte šifrování
Version 2.14.1
Opraveno (Fixed)
TPdf.SignPadesaSignPadesBytesnyní zpětně vyplňují všechna čtyři pole/ByteRangeslovníku podpisu; dříve poslední tři pole zůstávala na svých nulových zástupných hodnotách, takže vytvořené podpisy deklarovaly prázdný rozsah bajtů a selhaly při ověření v odpovídajících validátorech- Slovníky časového razítka dokumentu PAdES B-LTA obdrží stejnou opravu zpětného vyplnění
/ByteRange ValidatePadesCompliancenyní přijímá standardní rozvržení podpisu, kde mezera rozsahu bajtů obsahuje hexadecimální hodnotu/Contents, a kontroluje, že druhý segment rozsahu končí přesně na konci souboru; dříve procházela kontrolou pokrytí pouze gapless rozsahy
Version 2.14.0
Přidáno (Added)
TPdf.ExportXFDFserializuje každou hodnotu pole formuláře a anotaci napříč všemi stránkami do dokumentu XFDF (ISO 19444-1), generující<fields>pro hierarchické hodnoty formuláře a<annots>pro všechny podporované podtypy anotací (text, highlight, underline, strikeout, squiggly, line, circle, square, caret, polygon, polyline, stamp, ink, freetext, fileattachment, sound, link, redact)TPdf.ImportXFDFčte dokument XFDF zpět do načteného PDF, znovu vytváří anotace na odpovídajících stránkách a aplikuje hodnoty polí na jejich widgetové anotace- Záznam
TPdfAnnotationzískal poleName(NM),Subject,ModificationDate(M),CreationDate,Icon,Opacity(CA), koncové body čar, vrcholy polygon/polyline a pole seznamu gest inkoustu, aby XFDF round-tripy zachovávaly úplná metadata anotací - Nová ukázka
XfdfLabv sadách Delphi, C++Builder a Lazarus demonstruje round-trip export/import
Version 2.13.6
Opraveno (Fixed)
ValidatePdfAnyní považuje streamy/Metadatakatalogu bez/Type /Metadatanebo/Subtype /XMLza chybějící metadata XMP prostřednictvímpvaiMissingXmpMetadata- Zprávy předletové kontroly PDF/A nyní klasifikují
pvaiMissingXmpMetadatajako Metadata a doporučují stream/Metadatakatalogu s/Type /Metadata,/Subtype /XML, nefiltrovaným XMP a markerypdfaid
Version 2.13.5
Opraveno (Fixed)
ValidatePdfAnyní hlásí widgetové anotace bez slovníku vzhledu a anotace PDF/A-2 / PDF/A-3, které vyžadují, ale postrádají/AP, prostřednictvímpvaiAnnotationApDictViolation- Zprávy předletové kontroly PDF/A nyní kategorizují
pvaiAnnotationApDictViolationjako obsah, který injekce markerů nemůže opravit
Version 2.13.4
Opraveno (Fixed)
ValidatePdfAnyní hlásí inline obrázky PDF/A-2 a PDF/A-3, jejichž hodnota/Inebo/Interpolatejetrue, prostřednictvímpvaiImageDictionaryViolation, odpovídající stávajícímu pokrytí slovníku Image XObject- Zprávy předletové kontroly PDF/A nyní kategorizují
pvaiImageDictionaryViolationjako obsah, který injekce markerů nemůže opravit
Version 2.13.3
Opraveno (Fixed)
ValidatePdfAnyní hlásí inline obrázky PDF/A-1 používající filtry/LZWDecodenebo zkrácené/LZWuvnitř content streamů prostřednictvímpvaiInlineImageLzwForbidden, odpovídající stávajícímu pokrytí inline obrázků PDF/A-2 a PDF/A-3- Skener filtrů inline obrázků nyní postupuje přes úvodní názvy prostředků jako
/GS1, čímž se vyhýbá zaseknutí při skenování širších content streamů PDF/A-1
Version 2.13.2
Přidáno (Added)
TPdf.SetFocusedFormFieldTextzapisuje text do editačního bufferu aktuálně zaostřeného pole formuláře přesFORM_ReplaceSelection, symetricky kFocusedFormFieldText. Pro textová/combo pole AcroForm se hodnota potvrdí do/Vpři ztrátě fokusu a přetrvává; pro XFA textová pole zápis přistane pouze v paměťovém bufferu (PDFium nevystavuje žádné veřejné API pro sladění hodnot XFA zpět do paketu datasets, takže nepřetrvává přes uložení)- JavaScriptová hostitelská platforma je nyní připojena vždy, když je dostupný engine V8, bez ohledu na to, zda je dokument XFA — takže vložený JavaScript AcroForm (doc-level skripty, výpočty polí,
app.alert) může také spouštět. Dříve bylm_pJsPlatformpřipojen pouze pro XFA dokumenty, přičemž JS AcroForm byl tiše deaktivován
Změněno (Changed)
- Připojení JavaScriptové platformy je nyní nezávislé na rozhodnutí XFA v
InitializeFormFill— tabulkam_pJsPlatformje sestavena vždy, když jeV8FeaturesAvailabletrue, aplikovaná po zapojení verze/callbacku XFA místo vnoření uvnitř něj
Version 2.13.1
Přidáno (Added)
- Nové hostitelské události vystavují informace, které dříve callbacky vyplnění formuláře v2.13.0 pohlcovaly:
OnXfaUriAction,OnXfaPageCountChanged,OnXfaFocusChange,OnXfaEmail,OnXfaHttpRequest,OnXfaOpenFile,OnJavaScriptBeep,OnJavaScriptPrint,OnJavaScriptMail,OnJavaScriptSubmitForm. Každá událost má výchozí chování bez operace, pokud není přiřazena, takže stávající hostitelé nejsou ovlivněni - Vlastnost
TPdf.XfaFormPacketspouze pro čtení vrací jednorázový snímek všech paketů XFA (TXfaPacketList), naplňující typyTXfaPacket/TXfaPacketListdříve deklarované, ale nepoužité - XFA-specifické kódy chyb PDFium
FPDF_ERR_XFALOAD/FPDF_ERR_XFALAYOUTjsou nyní vázány a vystaveny přesLastPdfError, nahrazující obecnou zprávu “Unknown error” při selhání načítání/rozložení XFA
Změněno (Changed)
FFI_DoURIActionWithKeyboardModifiernyní konzultujeOnXfaUriActionpřed shell-spuštěním URI z pole XFA, čímž dává hostiteli právo veta (bezpečnost: škodlivé pole XFA dříve mohlo spustit libovolné URL nepodmíněně). Nepřiřazené handlery zachovávají předchozí výchozí nastaveníShellExecuteWDecodeFormFieldTypenyní směruje typy polí XFA přesIsXfaFormFieldmísto explicitního 8-větvového case, čímž drží enum zarovnaný sFPDF_FORMFIELD_XFA_*podle ordinálního posunu
Opraveno (Fixed)
ValidatePdfAnyní hlásí nároky PDF/A-1, které používají cross-reference streamy PDF 1.5 nebo streamy objektů, s novýmpvaiPdfA1Pdf15Structure, přičemž nadále povoluje streamy objektů pro PDF/A-2 a PDF/A-3
Version 2.13.0
Přidáno (Added)
- Plná podpora runtime XFA (XML Forms Architecture):
TPdf.InitializeFormFillnyní zapojuje všech 14 callbacků verze 2FPDF_FORMFILLINFO(FFI_DisplayCaret,FFI_GotoURL,FFI_PageEvent,FFI_PopupMenu,FFI_OpenFile,FFI_EmailTo,FFI_UploadTo,FFI_GetPlatform,FFI_GetLanguage,FFI_DownloadFromURL,FFI_PostRequestURL,FFI_PutRequestURL,FFI_OnFocusChange,FFI_DoURIActionWithKeyboardModifier) a připojujeIPDF_JsPlatform, aby XFA-povolenýpdfium.dllmohl renderovat a skriptovat dynamické XFA formuláře - Nová jednotka
Lib\FPdfXfa.pasdeklarující konstanty XFA (FXFA_PAGEVIEWEVENT_*,FXFA_MENU_*,FXFA_SAVEAS_*,FPDF_FORMFIELD_XFA_*) a typyTXfaPacket/TXfaSaveFormat, které byly dříve odkazovány pouze v komentářích - Čtečka statických paketů XFA na
TPdf:GetXfaPacketCount/GetXfaPacketName/GetXfaPacketContent/GetXfaPacketByNameplusGetXfaTemplate/GetXfaDatasets/GetXfaConfigextrahují pakety XFAtemplate,datasetsaconfigjako surové XML bez potřeby XFA-povoleného runtime — užitečné pro audit shody a migraci dat - Sondy schopností: globální
XfaFeaturesAvailable, a per-documentTPdf.XfaRuntimeAvailable(zdaFPDF_LoadXFAskutečně uspělo) aTPdf.XfaStaticReadable(zda exporty čtečky paketů resolvují) TPdfFormFieldTyperozšířen ofiXfa,fiXfaCheckBox,fiXfaComboBox,fiXfaImageField,fiXfaListBox,fiXfaPushButton,fiXfaSignature,fiXfaTextField, sDecodeFormFieldTypemapujícím nové hodnotyFPDF_FORMFIELD_XFA_*- JavaScriptové hostitelské události na
TPdf:OnJavaScriptAlert,OnJavaScriptResponse,OnXfaGotoUrlaOnXfaRuntimeMissingumožňují hostiteli přizpůsobit JS dialogy a navigaci XFA nebo reagovat, když XFA dokument nemůže spustit engine - Nová ukázka
XfaLabpro Delphi demonstrujíci detekci XFA, extrakci paketů, sondování schopností a záložní cestu pro chybějící runtime
Změněno (Changed)
TPdf.LoadDocumentnyní předem skenuje vstup na markery XFA (/XFAve slovníku AcroForm nebo/NeedsRenderingkatalogu) a pokud je nalezne, automaticky vyberepdfium.v8.dllnastavenímEnableV8Engine := Truepřed prvním načtením singleton knihovny; jakmile je načten prostýpdfium.dll, proces nemůže přepnout, takžeOnXfaRuntimeMissingsignalizuje tento případTPdf.GetPageCountnyní odráží počet stránek, který XFA engine hlásí přesFFI_PageEventpo dynamickém přestránkování, místo pouze statického stromu stránek PDF- Pokud je XFA dokument otevřen, ale runtime je nedostupný,
InitializeFormFillnyní fixujeversion=1axfa_disabled=1místo vyžadování verze 2 s nepřiřazenými callbacky, což dříve riskovalo dereference špatného ukazatele callbacku
Version 2.12.2
Opraveno (Fixed)
ValidatePdfACompliancenyní hlásí použité vlastní jmenné prostory XMP bezpdfaExtension:schemas, přičemž nadále přijímá standardní metadatapdfaidbez deklarací rozšíření- Validace vložených souborů PDF/A-3 nyní vyžaduje jak položky
/F, tak/UFna nejvyšší úrovni ve slovnících filespec a ignoruje vnoření klíče streamu/EFpři kontrole těchto názvů
Version 2.12.1
Opraveno (Fixed)
ValidatePdfACompliancenyní dekóduje escapované tokeny názvů PDF před párováním zakázaných názvů JavaScript, LZWDecode, Type1 a souvisejících, takže maskované, ale sémanticky identické názvy jsou hlášeny správně- Kontroly inline obrázků PDF/A nyní odmítají hodnoty
/Filtera/Fpoužívající/LZWDecode, zkrácené/LZWnebo/Crypt, včetně forem pole a escapovaných názvů - Validace PDF/A nyní hlásí streamy metadat se zakázanými filtry streamů, ICC profily OutputIntent, jejichž počet komponent
/Nchybí nebo je nekonzistentní, a specifikace vložených souborů PDF/A-3 s chybějícím nebo neplatným/AFRelationship
Version 2.12.0
Přidáno (Added)
- HTTP požadavky TSA nyní nastavují explicitní 30s timeouty pro každou fázi (resolve/connect/send/receive) přes
WinHttpSetTimeouts, takže pomalý nebo nedosažitelný úřad časového razítka nemůže vlákno podepisování zasekávat donekonce místo spoléhání na implicitní výchozí hodnoty WinHttp - Derivace nonce pro každý požadavek pro požadavky časového razítka PAdES B-T / B-LTA, pokud volající vynechá
TPadesSignOptions.Nonce: skládání SHA-256 z monotonního čítače + hodin +GetTickCount64+ ID procesu nahrazuje předchozí pevný fallback$100000000, takže dva požadavky vydané ve stejné milisekundě již znovu nepoužívají stejný nonce proti opakování PdfInflatenyní omezuje dekomprimovaný výstup na 256 MiB, aby zabránil spotřebování paměti komprimovaným streamem zlib na nepřátelském nebo poškozeném vstupu (“zlib bomb”); limit je velkorysý pro jakýkoli skutečný stream PDF
Změněno (Changed)
- Míchání překryvů
TPdfView(zvýraznění vyhledávání, výběr textu, slovo čtení, výběr rozsahu) již nepoužívá per-pixelGetPixel/SetPixelV; obdélník je nyní míchán přes 32bpp off-screenTBitmapaScanLinev jednom průchodu, čímž se eliminují tisíce přechodů jádra GDI na malování a velké výběry jsou responzivní FPdfAsn1.TDerReader.ReadIntegernyní odmítá pole INTEGER delší než 8 bajtů (a 8bajtová záporná čísla, jejichž znaménkový bit by vyžadovalshl >= 64), vraceje 0 místo výpočtu nesprávné hodnoty přes chování undefined-shift na vstupu CMS/PAdES ASN.1ParseTimeStampRespjiž nevrací nonce požadavku jakoTPadesTimestamp.Nonce; než přistane walker TSTInfo ověřující vrácený nonce, pole zůstává 0 pro signalizaci “not verified” místo dávání volajícím falešné jistoty, že odpověď časového razítka je čerstvá
Opraveno (Fixed)
PointsToPixelsvracel vstup beze změny pro každé DPI: dělitel bylPointsPerInch(konstanta 72) místo literálu 72, čímž se vzorec zjednodušil naResult := Points. Jakýkoli externí volající dělající převod bodů na pixely zařízení přes tento helper nyní dostane správný výsledekPoints × PixelsPerInch / 72PdfMaxObjNumpodpočítal na dokumentech používajících streamy objektů (PDF 1.5+ ObjStm): objekty komprimované uvnitř/ObjStmnemají markerN 0 obj, takže sken surových bajtů je přehlédl a injektory alokujícíMaxObj+1pro nové objekty by kolodovaly se skrytými členy ObjStm a tiše poškodily soubor. Sken nyní nejdříve rozbalí streamy objektů, aby bylo každé číslo objektu viditelnéInjectPdfAMarkersjiž nevytváří falešný nárok na shodu PDF/A u šifrovaného dokumentu: PDF/A (ISO 19005-1 §7.1) zakazuje šifrování a injektor dříve kopíroval zdroj s markery, i když by ho příští validace ihned odmítla. Pokud je nastavenoHasEncrypt, zdroj je nyní předán beze změny. Normální cestaTPdf.SaveAsPdfAjiž šifrování před injekcí odstraňuje (saRemoveSecurity), takže to ovlivní pouze přímé volajícíPdfReadStreamBytesnyní odmítá/Lengthvětší než celý soubor před alokací výsledkového bufferu, čímž se uzavírá cesta časné alokace na poškozenou nebo nepřátelskou nepřímou délku
Version 2.11.0
Přidáno (Added)
- Záznam PDFium
FPDF_FILEHANDLERnyní deklaruje svých šest callbacků (Release,GetSize,ReadBlock,WriteBlock,Flush,Truncate) jako skutečná pole místo komentářů, odpovídající rozvržení C hlavičky. XFA FFI callbacky přenosu souborů (FFI_OpenFile/FFI_EmailTo/FFI_UploadTo/FFI_DownloadFromURL), které vrací nebo spotřebováváPFPDF_FILEHANDLER, jsou stále ponechány neimplementovány ve vrstvě vyplnění formuláře Pascal, ale typ je nyní strukturně správný pro jakoukoli budoucí cestu odeslání/nahrání XFA - Načítání a uvolňování knihovny PDFium (
LoadLibrary/UnloadLibrary) jsou nyní serializovány globální kritickou sekcí procesu, takže dvě vláknaTPdfFuture<T>(nebo vlákno závodící s hlavním vláknem) nemohou obě pozorovatPDFiumLibrary=0a double-bind nebo uvolnit DLL, zatímco jiné vlákno je uprostřed bindingu - Sekce
initialization/finalizationnyní voláUnloadLibrarypři uvolnění jednotky, čímž zajišťuje, žeFPDF_DestroyLibraryproběhne (připojení worker vláken, likvidace V8 isolate, teardown fontů/cache) místo spoléhání na OS při recyklaci DLL
Změněno (Changed)
TPdf.SetActivenyní pohlcuje jakoukoliv výjimku během načítání (dříve pouzeEPdfError), takže chyba streamu nebo porušení přístupu během nastavení formuláře/stránky ponecháActive=Falsemísto částečně načtené komponenty s neurčitým stavem- Konzistentní kódování znaků pro argumenty klíčů metadat PDFium:
TPdf.GetMetaTextnyní používá stejné FPCAnsiString/ DelphiUTF8Encoderozdělení jakoGetViewerPreferencea cesty načítání, místo holého přetypováníAnsiString(Tag) - Deduplikovány helpery
BytesToAnsi,AnsiToBytes,WriteBytesaWriteStr:FPdfCompressnyní importuje je zFPdfPdfCommon(jeho aliasyWriteBytesToStream/WriteAnsiToStreamjsou odstraněny) a redundantní tříargumentové přetíženíBytesToAnsivFPdfPdfaje odstraněno.FPdfAsn1si zachovává svou lokální kopii záměrně, aby kryptografická vrstva zůstala bez jednotky vrstvy shody
Opraveno (Fixed)
- Únik zdrojů v
TPdf.LoadDocument(soubor, paměť,TBytes,TMemoryStream, vlastní stream) aTPdf.CreateDocument: pokudInitializeFormFillneboReloadPagevyvolaly výjimku po úspěchuFPDF_LoadDocument/FPDF_CreateNewDocument, nativní handleFPDF_DOCUMENTbyl unikán, protožeFActivebylo stále False v tom okamžiku. Každá cesta nyní obaluje nastavení po načtení dotry/excepta při selhání zavírá dokument, přičemž komponenta je čistě neaktivní - Přátelštější diagnostika načítání DLL PDFium:
CheckLoadLibrarydetekujeERROR_BAD_EXE_FORMAT(193) a hlásí neshodu architektury 32/64-bit ukazující na odpovídající sestaveníDLLs/Win32neboDLLs/Win64, místo předávání pouze obecné chyby OS.CheckGetProcAddressnyní uvádí, že nasazenýpdfium.dllje starší než binding, pokud chybí požadovaný export, místo holého textu OS “procedure not found”
Version 2.10.1
Opraveno (Fixed)
- Standardizace sid v SignerInfo PAdES: identifikátor podepisovatele nyní používá formu
issuerAndSerialNumberpodle RFC 5652 §5.3 (issuer Name + serialNumber, obojí extrahované doslovně z DER certifikátu podepisovatele), čímž nahrazuje předchozí nestandardnísubjectKeyIdentifier+ zástupný SHA-256 s celým certifikátem, který Adobe Acrobat a další odpovídající validátory odmítaly. Nový průchod TbsCertificate DER (ExtractIssuerAndSerial) čte issuer SEQUENCE a serial INTEGER jako surové bajty TLV — sériová čísla často přesahují rozsahInt64, takže surový TLV je nezbytný. FormasubjectKeyIdentifierzůstává jako fallback pouze tehdy, když analýza DER certifikátu selže
Změněno (Changed)
TCmsSignerId.SerialNumber: Int64nahrazenSerialDer: TBytes(surové TLV serialNumber). Tvůrce CMS vkládá vyříznuté TLV doslovně doIssuerAndSerialNumber, čímž se vyhává přetečeníInt64u 20bajtových CA sériových čísel (horní mez RFC 5280 §4.1.2.2)
Version 2.10.0
Přidáno (Added)
- Dlouhodobá validace PAdES B-LT: když
TPadesSignOptions.Level >= plB_LT,SignPadesBytespřipojí přírůstkovou aktualizaci nesoucí slovník/DSSs certifikátem podepisovatele a plným zprostředkujícím řetězcem (samopodepsaný root je vyloučen podle RFC 5652 §10.2.3), plus značku/Extensions /ESICLevel 1 (EN 319 142-1 §5.4.2) - Archivační časové razítko PAdES B-LTA: když
Level >= plB_LTAa je nastavenoTsaUrl, je připojen slovník podpisu Document Time-stamp (/SubFilter /ETSI.RFC3161), jehož/ByteRangepokrývá celý soubor; značka ESIC je povýšena na Level 2. Tím se dokončují čtyři základní úrovně PAdES (B-B, B-T, B-LT, B-LTA) - Sběr řetězce certifikátů:
ResolveWinSignernyní voláCertGetCertificateChaina naplňujeTPadesResolvedSigner.ChainCertDerzprostředkujícími certifikáty CA, takže/DSS /Certsv B-LT nese každý certifikát potřebný k validaci podpisu bez externích vyhledávání.CertFreeCertificateContextje nyní vázán, čímž se uzavírá únik jednoho kontextu na podpis zaznamenaný ve v2.8.0 - Pracovní postup integrace PDF/A:
TPdf.SignPadesWithPdfAnejprve převede dokument na PDF/A (nejvyšší úroveň, kterou knihovna dnes emituje) a poté aplikuje požadovaný podpis PAdES — vzorec kontejneru dlouhodobého archivování doporučený v EN 319 142-1 Annex A.7
Version 2.9.0
Přidáno (Added)
- Důvěryhodné časové razítko PAdES B-T:
TPadesSignOptionszískává poleLevel,TsaUrlaNonce. KdyžLevel >= plB_Ta je nastavenoTsaUrl,SignPadesBytesextrahuje hodnotu podpisu ze sestaveného CMS, vyžádá si nad ním časové razítko RFC 3161 a vloží vrácený TimeStampToken jako nepodepsaný atribut SignerInfosignature-time-stamp— krok důvěryhodného času B-T (EN 319 142-1 §6.3 req o) FPdfTsa: multiplatformní klient RFC 3161 —BuildTimeStampReq(verze 1, SHA-256 messageImprint nad hodnotou podpisu, nonce, certReq=true),ParseTimeStampResp(přijímá PKIStatus 0/1, odmítá 2+, extrahuje TimeStampToken ContentInfo doslovně) aRequestTimestamp(jednorázové sestavení+POST+analýza).PadesTsaAvailablefunkci braní na platformách bez HTTP backenduFPdfTsaWin: Windows WinHttp backend, dynamicky vázán z winhttp.dll (žádná nová závislost kompilace; HTTPS vyjednán úložištěm certifikátů Windows). Zrcadlí vzorec dynamického vazbyFPdfCryptoWinFPdfCms:ExtractSignatureValueprojde sestavený CMS, aby získal surové oktety podpisu (vstup hashe TSA), aAddSignatureTimestampToCmspřestaví ContentInfo s novýmunsignedAttrs [1](0xA1) nesoucím atribut časového razítka. Validátor stage-1 rozpozná výsledek jako podpis B-T
Version 2.8.0
Přidáno (Added)
- Zásobník podepisování PAdES B-B: čtyři nové čistě Pascalové/multiplatformní stavební bloky (
FPdfSha256,FPdfAsn1,FPdfCms,FPdfCrypto) plus Windows CNG backend (FPdfCryptoWin) umožňujíTPdf.SignPades/SignPadesToStreamvytvořit podpis PAdES B-B kompletně. Certifikát podepisovatele je rozpoznán pomocí otisku SHA-1 z úložiště Current User “MY”; RSA-PSS (doporučeno), RSA PKCS#1 v1.5 a ECDSA jsou všechny podporovány přesNCryptSignHash FPdfSha256: samostatný SHA-256 FIPS 180-4 (Init/Update/Final + jednorázové pomocníky). FPC 3.2.2 nedodává žádnou jednotku SHA-2, takže knihovna vlastní jednu, aby udržela každou cestu kódu CMS na jediném typuTSHA256Digestbez větvení RTLFPdfAsn1: DER enkodér (TDerWriter) a čtečka (TDerReader) pokrývající SEQUENCE/SET/OID/INTEGER/OCTET STRING/UTCTime/GeneralizedTime/kontextové značky, s kódováním definite-length a obsluhou IMPLICIT-tag, kterou CMS vyžadujeFPdfCms: tvůrce CAdES SignedData (BuildSignedData) emitující podepsané atributy content-type, message-digest a signing-certificate-v2, které baseline PAdES ukládá, s volitelnými signing-time a commitment-type-indication. Digest signedAttrs se počítá přes formu označenou SET (0x31) a znovu emituje se značkou IMPLICIT [0] (0xA0) podle RFC 5652 §5.4FPdfCrypto+FPdfCryptoWin: abstrakce kryptografického backendu sPadesCryptoAvailable/ResolvePadesSignera implementací Windows vážící dynamicky crypt32.dll / ncrypt.dll (žádná nová závislost DLL kompilace). Podpisy ECDSA jsou rekódovány z formy Windows IEEE P1363 r¦s do podoby DERECDSA-Sig-Value, kterou CMS vyžadujeSignPadesBytes: injekce podpisu na úrovni bajtů — rezervuje štěrbinu hex/Contentss pevnou šířkou, vypočítá pokrývající/ByteRange, vytvoří digest dokumentu, sestaví a vloží CMS a připojí přírůstkovou aktualizaci. Validátor (v2.7.0) rozpozná výstup jako podpis PAdES B-B
Version 2.7.0
Přidáno (Added)
- Strukturální validátor PAdES (ETSI EN 319 142-1 V1.2.1): nová jednotka
FPdfPadesa metodaTPdf.ValidatePadeskontrolují slovníky hodnoty podpisu dosažitelné z/ByteRange, projdouSignedDataCMS uvnitř/Contentsdostatečně daleko na potvrzení tvaru CAdES detached a detekují čtyři základní úrovně (B-B, B-T, B-LT, B-LTA) plus slovníky Document Time-stamp (/SubFilter /ETSI.RFC3161) - Sada problémů PAdES na úrovni klauzulí: 26 výčtů
ppei*pokrývá přijatelnost/SubFilter(adbe.pkcs7.sha1aadbe.x509.rsa_sha1označeny jako zakázané), pokrytí souboru/ByteRange, zákaz/Cert, tvarSignedDataCMS (jeden podepisovatel, detached eContent, rozsah verzí), požadované podepsané atributy (content-type,message-digest,signing-certificate/v2), zakázané digesty (MD5, SHA-1), vzájemné vyloučení/Reasonvscommitment-type-indication(req d), požadavek na důvěryhodný čas B-T,/DSS+/Certs+ značka ESIC Level 1 pro B-LT a Document Time-stamp + značka ESIC Level 2 pro B-LTA - Injektor DSS:
TPdf.SaveAsPadesDss/SaveAsPadesDssToStreampřipojují přírůstkovou aktualizaci nesoucí slovník/DSS(s polemi streamů/Certs,/OCSPs,/CRLs) a značku/Extensions /ESIC(Level 1 nebo 2) na kopii dokumentu, přičemž zachovávají původní bajty — krok vkládání validačního materiálu B-LT/B-LTA (klauzule 5.4.2) - Multiplatformní, nezávislá fáze: validátor a injektor jsou čistě Pascalové a fungují v každém podporovaném IDE (Delphi, Lazarus, FPC, C++Builder); pro toto vydání není vyžadován žádný kryptografický backend a není zaváděna žádná nová závislost DLL
Version 2.6.0
Změněno (Changed)
- Deduplikace napříč standardy: dalších sedm duplikovaných pomocných funkcí (PdfEnclosingObjNum, PdfDictRefNum, PdfExpandObjectStreams, PdfTextStr, ExtractLiteralString, ExtractXmpAttr) bylo odstraněno z jednotlivých jednotek standardů a konsolidováno do
FPdfPdfCommon, což snižuje přibližně ~300 řádků zátěže údržby copy-paste - Kvalita PreflightReport: problémy tříd obsahu PDF/X a PDF/E, které dříve propadly do obecné kategorie “missing marker”, mají nyní přesné kategorie Content/Metadata/Security a doporučení specifická pro klauzule (přibližně 15 výčtů v obou standardech)
- Pokrytí testů PDF/E a PDF/R: dalších šest nepokrytých výčtů získalo pozitivní testy (
pveiLzwForbidden,pveiJavaScriptForbidden,pveiFormFieldsForbidden,pveiEmbeddedFilesForbidden,pvriBadHeader,pvriProhibitedInfoEntry) - Oprava sestavení Lazarus:
Tests.PdfVT(jednotka DUnitX pouze pro Delphi přidaná ve v2.5.x) je nyní vyloučena z projektu Lazarus, aby se obnovila kompilace
Version 2.5.3
Přidáno (Added)
- Úplnost OutputIntent (PDF/X-4 §6.2.4):
pvviOutputIntentSchemeoznačuje OutputIntent, jehož/Snení/GTS_PDFX;pvviOutputIntentMissingIdentifieroznačuje chybějící/OutputConditionIdentifier - Výjimka Reference XObject pro PDF/VT-2 (§6.2.2):
pvviReferenceXObjectForbiddense již nespouští pro souborPDF/VT-2, který smí legálně používat Reference XObjects na bázi X-5g/5pg - Validace znaků hranice MIME (RFC 2046 §5.1.1):
vtmviBoundaryInvalidCharoznačuje hranici, jejíž znaky spadají mimo sadu bchars nebo jejíž délka přesahuje 70
Opraveno (Fixed)
InjectPdfVTMarkersnyní zapisuje Info/CreationDatea/ModDatez voleb uložení, takže vytvořený soubor projdeValidatePdfVTCompliancebez falešnéhopvviInfoModDateMismatch(injektor dříve přepsal data XMP, ale ponechal data slovníku Info neaktuální)
Version 2.5.2
Přidáno (Added)
- Konzistence Info
/ModDate(§6.3 NOTE 2, báze PDF/X-4):pvviInfoModDateMismatchoznačuje/ModDateve slovníku Info, které po normalizaci data-PDF-na-datum-XMP se nerovnáxmp:ModifyDate - Soulad inline fragmentu PDF/VT-2s (Annex A.2): validátor MIME nyní spouští
ValidatePdfVTCompliancena každé inline částiapplication/pdfa označuje tělo mimo PDF/VT přesvtmviInlinePdfNotPdfVT
Version 2.5.1
Přidáno (Added)
- Validace dělení DParts (ISO 16612-2 §6.5 Table 4):
pvviDPartsBadChunkingoznačuje pole/DParts, jehož nekoncová dílčí pole nemají přesně 8192 položek nebo jehož poslední dílčí pole spadá mimo 1..8192 - Konzistence RecordLevel napříč streamy (Annex A.2): validátor MIME PDF/VT-2s nyní extrahuje
/RecordLevelz každého inline PDF a označuje neshodu přesvtmviRecordLevelMismatch, čímž doplňuje existující kontrolu NodeNameList - Tipy opakujících se grafických objektů (§6.7):
pvviGtsScopeInvalidValueoznačuje/GTS_Scopemimo {SingleUse, Record, File, Stream, Global, Unknown};pvviGtsScopeRecordWithoutRecordLeveloznačuje/Recordbez/RecordLevel;pvviGtsXidNotUuidoznačuje/GTS_XID, které není uuid: URI podle RFC 4122;pvviGtsEnvMissingoznačuje chybějící/GTS_Env, když/GTS_Scopeje Stream nebo Global (§6.7.4) - Detekce dopředných referencí MIME (Annex A.2):
vtmviForwardReferenceoznačuje inline PDF, které cituje název souboru (přes/EF /F) nezavedený dřívější částí přílohy ve streamu
Opraveno (Fixed)
ExtractNodeNameListFromPdfaExtractRecordLevelFromPdfvFPdfPdfvtMimevyřešily opakující se off-by-one chybu, kdy 1-based offset vrácenýAnsiFindKeybyl brán jako absolutní bajtový offset v rozbaleném PDF
Version 2.5.0
Přidáno (Added)
- Metadata části dokumentu PDF/VT (DPM, ISO 16612-2 §6.6):
TPdfVTSaveOptionszískaloDpmEntriesaDpmTarget, takže zapisovač může připojit slovník/DPMk syntetizovanému uzlu DPart, s validací názvu klíče vůči pravidlu second-class-prefix z Annex E a pravidlům NMTOKEN / jedinečnosti / tvaruGTS_Managed§6.6 na straně validátoru - Streamová výměna PDF/VT-2s (Annex A): nová jednotka
FPdfPdfvtMimeposkytujeBuildPdfVT2sStreamaValidatePdfVT2sStreampro obálku MIMEmultipart/mixednesoucí inline fragmenty PDF/VT plus přílohu ICC profilů, s pravidlem řazení hlavičkyX-PDFVT-Stream-version: 1a kontrolou konzistenceNodeNameListnapříč streamy TPdf.ValidatePdfVTnyní provádí autoritativní počítání JavaScript akcí přesFPDFDoc_GetJavaScriptActionCount, čímž doplňuje skenování názvů/JavaScriptna úrovni bajtů
Opraveno (Fixed)
- Správnost
Trappedv PDF/VT na bázi PDF/X-4: hodnota výčtuptvUnknownje odstraněna (PDF/X-4 zakazuje/Unknown),ptvUnspecifiedje normalizováno na/Falsepři zápisu (chybějící/Trappedje rovněž zakázáno) a nový problémpvviTrappedInvalidoznačuje chybějící neboUnknownhodnotu ValidatePdfVTCompliancenyní rozbaluje streamy objektů (PdfExpandObjectStreams) před skenováním, takže katalog, slovník OutputIntent nebo Metadata uložené uvnitř komprimovaného ObjStm (PDF 1.5+, typické pro producenty PDF/X-4) jsou dosažitelné vyhledáváním na úrovni bajtů
Změněno (Changed)
- PDF/VT-1 nyní dědí plné zákazy obsahu PDF/X-4:
pvviAcroFormForbidden(/AcroFormnebo/XFA),pvviAdditionalActionsForbidden(katalog/AA),pvviMissingTrimBoxapvviReferenceXObjectForbidden(Reference XObject, pouze X-5g/5pg) - Deduplikace napříč standardy:
BuildDictObj,IccComponentCount, vestavěný ICC profil sRGB (GetSrgbIccProfile),PdfTextStr,PdfEnclosingObjNum,PdfDictRefNumaPdfExpandObjectStreamsbyly povýšeny ze ztrojených lokálních kopií vFPdfPdfa/FPdfPdfx/FPdfPdfvtdo jediného kanonického domova vFPdfPdfCommon; 3144bajtový ICC literál nyní existuje v kódové základně přesně jednou
Version 2.4.0
Opraveno (Fixed)
InjectPdfUaMarkersjiž nezahazuje referenci/Infou traileru na bázi cross-reference-stream: lokálníSourceTrailerInfoRef(kterému chyběl xref-stream fallback) byl nahrazen sdílenýmPdfSourceTrailerInfoRef(převzatým z PDF/A kopie, která měla fallback od v2.0.0)- Sdílený
PdfReadStreamBytesnyní zpracovává nepřímé reference/Length N G R(přenesené z lokální kopie PDF/A), takže validátory PDF/VT, PDF/R a PDF/E již nečtou chybně ani nepřeskakují toky XMP metadat vytvořené nástroji, které používají indirect Length (Acrobat, Ghostscript)
Změněno (Changed)
- Deduplikace napříč standardy: lokální kopie
PdfReadTrailervFPdfPdfaaFPdfPdfx, lokální kopieSourceTrailerInfoRefvFPdfPdfaaFPdfPdfuaa lokálníPdfReadStreamBytesvFPdfPdfabyly smazány — sdílené verze vFPdfPdfCommonse nyní používají všude; tím se odstranilo přibližně 330 řádků duplicitního kódu a odpadá nutnost synchronizovat kopie - Pokrytí chybějících testů pro PDF/X: sedm dříve nepokrytých enumů pro content-class získalo pozitivní testy (
pvxiLzwForbidden,pvxiJavaScriptForbidden,pvxiFormFieldsForbidden,pvxiAdditionalActions,pvxiEmbeddedFilesForbidden,pvxiMissingTrimBox,pvxiTrappedNotSet)
Version 2.3.0
Změněno (Changed)
- Pokrytí chybějících testů pro PDF/A pokračuje: další tři dříve nepokryté enumy získaly pozitivní testy;
pvaiForbiddenRenderingIntent(§6.2.9) označuje nestandardní název rendering-intent v content streamu;pvaiJpeg2000Violation(§6.2.2) označuje JPXDecode obrázek s/NumComponentsmimo rozsah {1,3,4} v Part 2;pvaiInlineImageLzwForbidden(§6.1.10) označuje vložený obrázek používající filtr LZW v Part 2
Version 2.2.0
Změněno
- Regresní testy pro křížové odkazy (cross-reference stream): stávající
Validate_XrefStreamTrailer_DetectsConformancenyní také ověřuje, že odkaz na katalogové/Metadataje vyřešen a XMPpdfaid:partje načten na základě xref-stream (nikoli pouze/Root+/ID); nový testInjectPdfA_XrefStreamBase_RoundTripschrání cestu xref-stream injektoru přidanou ve verzi v2.0.0, přičemž dva testy napříč standardy (PdfE_XrefStreamBase_NotRejectedAsUnparsable,PdfR_XrefStreamBase_NotRejectedAsUnparsable) ověřují, že validátory PDF/E a PDF/R již neodmítají xref-stream PDF jako neanalyzovatelné - Uzavření testovacího dluhu pro PDF/A:
Validate_MinimalPdf_FlagsRequiredMarkerspotvrzuje, že čistě minimální PDF spouštípvaiMissingPdfAIdentifier,pvaiMissingOutputIntent,pvaiMissingIccProfile,pvaiMissingXmpMetadataapvaiMissingXmpDates— čímž se uzavírá mezera v symetrii s validátory PDF/E a PDF/X, které již měly ekvivalentní testy, přičemž dva další výčty s nulovým pokrytím (pvaiUnembeddedFontapvaiSubsetMissingCidSet) získaly pozitivní testy
Version 2.1.0
Opraveno
- PDF/E byl neúmyslně vynechán z opravy křížových odkazů (cross-reference stream) ve verzi v2.0.0: jak
InjectPdfEMarkersaValidatePdfECompliancestále volalyPdfReadTrailerbezAcceptXrefStream, takže injektor PDF/E tiše selhal u výstupu PDF 1.5+ (výchozí nastaveníSaveAsCopyv pdfium), přičemž obě místa volání nyní předávajíTrue - Sdílená záložní metoda křížových odkazů v
PdfReadTrailernyní nese ochranu/Type /XRef, kterou již měly lokální kopie PDF/A a PDF/X, takže poškozený offsetstartxrefukazující na nesouvisející slovník selže čistě, namísto toho, aby byl chybně analyzován jako trailer - Nástroj pro vyhodnocení nepřímého odkazu
/LangveValidatePdfUaCompliance(v2.0.0) byl nedostupný:PdfFindObjDictnachází pouze slovníky<<, ale řetězcový objekt/Langje(...)nebo<...>bez slovníku; nahrazeno přímým skenováním těla objektu, které vyhledá řetězcový token
Změněno
- Sedm nadbytečných stínových duplicitních pomocných funkcí (PdfStructureBytes, PdfHasName, PdfCountName, BuildStreamObj), které byly bajtově identickými kopiemi sdílených verzí z
FPdfPdfCommon, bylo odstraněno zFPdfPdfaaFPdfPdfua— sdílené verze se nyní aplikují všude prostřednictvím sekceuses
Version 2.0.0
Opraveno
- Tiché selhání napříč standardy: sdílený pomocník
PdfReadTrailer(používaný injektory a validátory značek PDF/UA, PDF/X, PDF/VT a PDF/R) nyní přijímá parametrAcceptXrefStreama v případě chybějícího klíčového slovatrailer(PDF 1.5+) se vrací ke slovníku objektů křížových odkazů (cross-reference stream); dříve výstupSaveAsCopyz pdfium (který používá křížové odkazy) způsoboval, že každý injektor značek tiše selhal — zdrojové bajty byly zkopírovány beze změny a volání přesto vrátilo úspěch, přičemž validátor PDF/R-1.0 (jehož základem PDF 2.0 je vždy křížový odkaz) byl fakticky nefunkční (no-op) a vyspělá implementace validátoru PDF/A byla přenesena do sdíleného pomocníka, což přináší výhody pro všechny standardy - Skenování slovníku traileru v
InjectPdfUaMarkersaInjectPdfAMarkersnyní používá hloubkově orientovanýPdfDictEndnamísto prostého hledání>>, takže trailer obsahující vnořený slovník (např./Encrypt << ... >>) již není předčasně ukončen před koncovou položkou/Info
Změněno
TPdf.ValidatePdfUanyní potlačuje hrubé hlášenípvuaiFontNotEmbeddedna úrovni bajtů, pokud již bylo vyvoláno přesné hlášenípvuaiPdfiumFontNotEmbeddedz objektového modelu Pdfium, takže předletová zpráva (preflight report) již neobsahuje dva téměř duplicitní řádky „embed your fonts“ pro stejný nedostatekpvuaiLangInvalidFormat(§7.2) nyní převádí nepřímý odkaz/Lang(N 0 R) na jeho řetězcový objekt a ověřuje obsah, takže nepřímo odkazovaný jazykový tag již není slepým místem
Version 1.99.0
Opraveno
pvuaiLangInvalidFormat(§7.2) již neignoruje hexadecimálně kódované řetězce `/Lang`: UTF-16BE páry (s BOM `FE FF`) a čisté ASCII hexadecimální řetězce jsou nyní dekódovány a procházejí stejnou gramatickou kontrolou BCP 47 jako doslovné řetězce `(...)`, takže je zachycen neplatný hexadecimální `/Lang`, zatímco u vyhovujícího (např. UTF-16BE `en-US`) již nehrozí neoprávněné označení
Změněno
pvuaiFontMissingToUnicode(§7.21.7) nyní vyjímá `/MacExpertEncoding` vedle `/WinAnsiEncoding` a `/MacRomanEncoding`, což odpovídá čtyřem podmínkám výjimek uvedeným v tomto ustanovení
Version 1.98.0
Přidáno
pvuaiNeedAppearancesTrue(§7.18.4) označuje AcroForm, jehož příznak `/NeedAppearances` je true, takže vzhledy ovládacích prvků (widgets) nejsou spolehlivě uzamčeny a asistivní technologie je nemohou asociovat se stromem struktury; portováno z validátoru PDF/A a podmíněno přítomností `/AcroForm` pro zúžení prohledávané oblasti
Změněno
- Regrese korpusu veraPDF: propojeny páry vyhovující+nevyhovující pro Reference-XObject podle §7.20 and páry vyhovující+nevyhovující pro podmnožinu CharSet/CIDSet podle §7.21.4.2 do `Live_Corpus_ValidatePdfUaMatchesConformance`; vzorky vyhovující pro ToUnicode-forbidden-value podle §7.21.7 a media-clip podle §7.18.6.2 byly rovněž propojeny jako ochrany proti falešně pozitivním nálezům (jejich nevyhovující vzorky používají rozvržení slovníku, která bajtová kontrola nezachytí, takže je zapojena pouze vyhovující strana)
- Seznam tvrzení o vyhovujících cestách korpusu získal 15 nových ochran proti falešně pozitivním nálezům, takže každá aktivní bajtová a strukturální kontrola `pvuai*` je nyní testována proti vyhovujícím vzorkům (dříve bylo chráněno pouze ~30 z 60 aktivních problémů); ochrana `pvuaiLangInvalidFormat` byla záměrně vynechána, protože bajtový kontrolor konzervativně označuje hexadecimálně kódované řetězce `/Lang`, které nedokáže dekódovat
Version 1.97.0
Opraveno
- Zabezpečení `ValidatePdfUaStructureElements`: průchod rodičovským řetězcem `EnclosingTable` nyní obsahuje čítač kroků (omezený počtem prvků), takže chybný cyklus `ParentIndex` v syntetickém poli strukturálních prvků již nemůže zablokovat volajícího; alokace pole ID označeného obsahu (marked-content-ID) ve `ValidatePdfUaPageContentTagging` je nyní omezena na jeden milion položek, což zabraňuje vícegigabajtové alokaci u poškozeného nebo škodlivého `MarkedContentID`
Změněno
- Dokumentační komentář výčtu `pvuaiOrderedListMissingListNumbering` nyní přesně popisuje, co kontrola dělá: označuje prvek `L`, jehož hodnota `ListNumbering` leží mimo sadu tabulky 347 normy ISO 32000-1 (chybějící atribut není označen); předchozí komentář naznačoval, že detekuje také uspořádané seznamy postrádající tento atribut, což implementace nedělá
- Dva vzorky nevyhovující na nesoulad WMode `7.21.3.3-t02` jsou nyní propojeny do `Live_Corpus_ValidatePdfUaMatchesConformance` — od verze v1.95.0 je stream CMap dekomprimován pomocí FlateDecode, takže porovnání slovníku a obsahu nyní probíhá na čitelné straně; zastaralý komentář „not wired“ byl odstraněn
Version 1.96.0
Přidáno
- Konzistence mezi standardy: `TPdf.ValidatePdfUa` získává dvě kontroly portované z validátoru PDF/A; `pvuaiAnnotationFlagsViolation` (§7.18.1) označuje nevyjmutou anotaci nesoucí příznak Hidden / Invisible / NoView, což narušuje plynulost čtení asistivní technologie; `pvuaiActionTargetMissing` (§7.18.5) označuje akci GoToR / URI / SubmitForm, které chybí požadovaný cílový klíč (/F+/D, /URI, /F), což činí odkaz nepoužitelným pro asistivní technologie
Opraveno
- Sloučení stromu struktury napříč stránkami: akumulační smyčka `AllElems` v `TPdf.ValidatePdfUa` nyní převádí `ParentIndex` každého prvku z lokálního pole stránky na sloučené pole; bez toho si podřízené prvky na stránce 2 zachovávaly lokální index stránky ukazující do oblasti stránky 1, což skrytě znehodnocovalo každou kontrolu závislou na ParentIndex (struktura tabulky/seznamu, §7.4.4 počet podřízených prvků H, EnclosingTable)
- Analýza RoleMap: `PdfReadRoleMapPairs` již neukončuje celý sken klíčů/hodnot, pokud je hodnota nepřímým odkazem (`N 0 R`) nebo polem (`[...]`) — což jsou obě platné formy RoleMap podle ISO 32000-1 14.8.5.1; nyní pouze přeskakuje tento záznam (`Continue`) namísto přerušení (`Break`), což eliminuje falešně pozitivní nálezy `pvuaiRoleMapUnresolved` u typů mapovaných po nepřímém odkazu či poli
Změněno
- `FPdfPreflightReport`: 18 aktivních hodnot `TPdfUaValidationIssue`, které dříve spadaly do obecné kategorie „missing marker“ a doporučení, nyní nesou přesné kategorie (Structure / Content / Metadata / Security) a doporučení specifická pro konkrétní ustanovení; opraven byl také překlep `puaNone / pua1` → `pucNone / puc1` v `PDFSpecComplianceMatrix.md`
Version 1.95.0
Změněno
- Kontrola funkčnosti a správnosti `TPdf.ValidatePdfUa`: kontrola `pvuaiCMapWModeMismatch` podle §7.21.3.3 a kontrola `pvuaiToUnicodeForbiddenValue` podle §7.21.7 nyní před skenováním dekomprimují streamy CMap / ToUnicode komprimované pomocí `FlateDecode` (dříve byly posuzovány pouze nekomprimované streamy, což byla známá falešná negativita); sdílení pomocníci `PdfInflate` / `PdfReadAndDecodeStream` byli povýšeni z `FPdfPdfa` / `FPdfPdfx` do `FPdfPdfCommon`, takže všechny jednotky shody nyní sdílejí jednu kopii
Přidáno
- `pvuaiSubsetCharSetEmpty` (§7.21.4.2) označuje `FontDescriptor` podmnožiny Type 1, který nese klíč `/CharSet`, jehož řetězcová hodnota je prázdná — stávající `pvuaiSubsetMissingCharSet` zachycoval pouze chybějící klíč; prázdný `/CIDSet` není označen, protože písmo bez CID může legitimně nést prázdnou bitmapu
Version 1.94.0
Přidáno
- Druhý audit `TPdf.ValidatePdfUa` uzavřel šest mezer normy ISO 14289-1 odhalených podrobným přezkoumáním a opětovným skenováním nativních rozhraní API Pdfium, která byla sice obalena, ale nepoužita cestou PDF/UA; `pvuaiHeadingFormatInvalid` (§7.4.3) označuje uživatelsky definované tagy nadpisů, které začínají na H, ale obsahují oddělovače, mezery nebo římské číslice namísto čistých arabských číslic; `pvuaiMissingDocumentOutline` (§7.17, měl by) označuje vícestránkový dokument, který neobsahuje osnovu záložek (jednostránkové dokumenty jsou vyjmuty); `pvuaiStructElementLangInvalid` (§7.2) označuje hodnotu `/Lang` strukturálního prvku, která není platným tagem BCP 47; `pvuaiWidgetMissingPrintField` (§7.14 / §7.18.4) označuje strukturální prvek Widget postrádající vlastníka atributu PrintField; `pvuaiLinkNotInStructureTree` (§7.18.5) označuje dokument, jehož anotace `/Subtype /Link` nejsou vystaveny jako strukturální prvky Link; `pvuaiPdfiumAnnotationMissingContents` a `pvuaiPdfiumLinkMissingContents` (§7.18.1 / §7.18.5) přidávají přesný sken anotací objektového modelu Pdfium, který vyjímá skryté anotace, anotace mimo crop-box, Popup a Widget — čímž se eliminují falešně pozitivní nálezy bajtové heuristiky, která nedokáže číst příznaky `/F` nebo `/Rect`
Version 1.93.0
Přidáno
- `TPdf.ValidatePdfUa` nyní vrství kontrolu objektového modelu Pdfium nad bajtový inspektor, což zrcadlí architekturu PDF/A round-7: prochází textové objekty každé stránky pomocí `FPDFTextObj_GetFont` → `FPDFFont_GetIsEmbedded` (`pvuaiPdfiumFontNotEmbedded`, §7.21.4) and skenuje každý znak pomocí `FPDFText_HasUnicodeMapError` (`pvuaiPdfiumUnicodeMapError`, §7.21.7) a `FPDFText_GetUnicode` (`pvuaiPdfiumNotDefGlyph`, §7.21.8) — což je přesnější než bajtová heuristika, která se aktivuje pouze tehdy, když nejsou přítomny žádné programy písem nebo se vůbec neobjeví `/ToUnicode`; průchod se přerušuje na třech úrovních: smyčka stránek se ukončí, když jsou již nastaveny všechny tři problémy vrstvy Pdfium, smyčka objektů se ukončí při prvním nevloženém písmu a sken znaků přeskočí průchod `.notdef`, pokud již došlo k zásahu `UnicodeMapError`; PDF/UA byl posledním validátorem standardu PDF bez vrstvy objektového modelu Pdfium
Version 1.92.0
Přidáno
- Vytvořen soubor `Tests.PdfR` — první testovací soubor pro validátor PDF/R-1 (`FPdfPdfr`), který pokrývá validaci hlavičky, zákaz ObjStm, detekci rastrových značek a ochranu čistého souboru bez falešně pozitivních nálezů; všech šest testovacích sad standardů PDF má nyní vyhrazené testovací soubory: PdfA(80), PdfUa(101), PdfX(7), PdfE(5), PdfVT(15), PdfR(4) = celkem 212 testů
Version 1.91.0
Přidáno
- `ValidatePdfE` a `ValidatePdfVT` získaly kontroly na úrovni obsahu, které byly dříve dostupné pouze ve validátorech PDF/A, PDF/UA a PDF/X: `pveiLzwForbidden`, `pveiJavaScriptForbidden`, `pveiFormFieldsForbidden` (pouze PDF/E), `pveiEmbeddedFilesForbidden` (pouze PDF/E), `pveiOpiForbidden`, `pvviLzwForbidden`, `pvviJavaScriptForbidden`, `pvviEmbeddedFilesForbidden`, `pvviOpiForbidden`; `TPdf.ValidatePdfE` a `TPdf.ValidatePdfVT` získávají také vrstvu objektového modelu Pdfium (`pveiPdfiumFontNotEmbedded` / `pvviPdfiumFontNotEmbedded`), která prochází textové objekty stránky pomocí `FPDFFont_GetIsEmbedded` a přerušuje se při prvním nevloženém písmu
Version 1.90.0
Přidáno
- `TPdf.ValidatePdfX` nyní vrství kontrolu objektového modelu Pdfium nad bajtový inspektor: prochází textové objekty každé stránky pomocí `FPDFTextObj_GetFont` → `FPDFFont_GetIsEmbedded` a hlásí nevložené písmo jako `pvxiPdfiumFontNotEmbedded` — což je přesnější než bajtová heuristika, která se aktivuje pouze tehdy, když nejsou přítomny žádné programy písem; průchod se přerušuje při prvním nalezeném nevloženém písmu
Změněno
- Průchod stromem struktury `TPdf.ValidatePdfUa`: volání `ValidatePdfUaPageContentTagging` na každou stránku (které sestavuje mapu nároků na ID označeného obsahu a křížově kontroluje každý objekt textu či obrázku) se nyní na dalších stránkách vynechá, jakmile je nalezen `pvuaiUntaggedContent` — prvky struktury se stále shromažďují pro kontroly napříč stránkami (unikátní ID poznámky, sekvence nadpisů), ale náročný průchod označováním obsahu na stránku se zastaví dříve
Version 1.89.0
Změněno
- Výkon vrstvy objektového modelu Pdfium v `TPdf.ValidatePdfA`: průchod stránkami a objekty se nyní přerušuje na třech úrovních — smyčka stránek skončí, když jsou nalezeny všechny použitelné problémy vrstvy Pdfium, smyčka pro jednotlivé objekty skončí, když jsou nastaveny oba problémy na objekt (vložení písma + průhlednost), a sken znaků textové stránky přeskočí průchod `.notdef`, pokud již došlo k zásahu `UnicodeMapError`; kontroly dostupnosti API pomocí `Assigned()` a příznaky shody jsou před smyčkou jednou uloženy do lokálních booleovských hodnot namísto opakovaného vyhodnocování pro každou stránku, objekt či znak; u velkého nevyhovujícího dokumentu se průchod může zastavit po první stránce namísto prohledávání všech stránek; u vyhovujícího dokumentu je režie na stránku nižší (žádná opakovaná volání `Assigned`)
Version 1.88.0
Přidáno
- `ValidatePdfX` získal osm nových hodnot `TPdfXValidationIssue` na úrovni obsahu, které pokrývají omezení tiskové výměny (print-exchange), jež PDF/X ukládá nad rámec značek formátu souboru: `pvxiLzwForbidden` (`/LZWDecode`), `pvxiJavaScriptForbidden` (`/JavaScript`), `pvxiFormFieldsForbidden` (`/AcroForm` / `/XFA`), `pvxiAdditionalActions` (`/AA`), `pvxiEmbeddedFilesForbidden` (`/EmbeddedFiles` / `/FileAttachment`), `pvxiOpiForbidden` (`/OPI` / `/Alternates`), `pvxiMissingTrimBox` (chybějící `/TrimBox` na jakékoli stránce) a `pvxiTrappedNotSet` (chybějící nebo `/Unknown` parametr `/Trapped`); validátor PDF/X dříve kontroloval pouze značky XMP/OutputIntent; toto je jeho první průchod na úrovni obsahu; do `FPdfPdfCommon` byli přidáni sdílení pomocníci `PdfStructureBytes` / `PdfHasName` / `PdfCountName`, aby je mohly používat všechny jednotky shody
Version 1.87.0
Přidáno
- Validace PDF/UA nyní pokrývá pravidla kompozitních písem dle ISO 14289-1 §7.21.3:
pvuaiCidSystemInfoMismatchoznačí písma Type0, jejichž vložená mapa CMap a podřazená CIDFont se neshodují v parametrechRegistry/Ordering, nebo jejichžSupplementCIDFont překračuje hodnotu ve CMap;pvuaiCMapNotEmbeddedoznačí CMaps odkazované názvem (jakoEncodingneboUseCMap), které nejsou předem definovanými CMaps dle ISO 32000-1 tabulky 118; apvuaiCMapWModeMismatchoznačí vložené CMaps, jejichž slovníkový parametrWModese liší od WMode v obsahu jejich streamu
Opraveno
- Kontrola
pvuaiCidFontMissingCidToGidMapdle §7.21.3.2 přehlédla slovníky CIDFontType2, jejichž klíč/hodnotaSubtypejsou odděleny novým řádkem; nyní rovněž označuje hodnotu jménaCIDToGIDMapjinou nežIdentity
Version 1.86.0
Přidáno
- Validace PDF/UA nyní pokrývá pravidla kódování TrueType dle ISO 14289-1 §7.21.6:
pvuaiTrueTypeEncodingInvalidoznačí nesymbolická písma TrueType, jejichž parametrEncodingchybí nebo není aniMacRomanEncodinganiWinAnsiEncoding(přímo ani přesBaseEncoding); apvuaiSymbolicTrueTypeEncodingoznačí symbolická písma TrueType, která nesou nestandardní názevEncoding
Version 1.85.1
Změněno
- Kontrola pořadí záložek
pvuaiMissingTabsOrderdle ISO 14289-1 §7.18.3 nyní probíhá po jednotlivých stránkách: každá stránka s anotacemi musí ve svém vlastním slovníku stránky deklarovat/Tabs /S, takže vyhovující sousední stránka již nemaskuje stránku, která tuto deklaraci postrádá
Version 1.85.0
Přidáno
- Validace PDF/UA nyní rozlišuje dynamické a statické formuláře XFA dle ISO 14289-1 §7.15:
pvuaiXfaDynamicoznačí formuláře, jejichž konfigurace XFA nastavujedynamicRenderna hodnoturequired
Změněno
- Dřívější příznak pro libovolný kandidát XFA
pvuaiXfaPresentje vyřazen a nadále se nevyvolává (statické XFA odpovídá §7.15); hodnota výčtu zůstává zachována kvůli kompatibilitě API
Version 1.84.0
Přidáno
- Validace PDF/UA nyní detekuje neoznačený skutečný obsah požadovaný ISO 14289-1 §7.1:
pvuaiUntaggedContentoznačí vykreslené objekty textu a obrázků, které nejsou zahrnuty ve stromové struktuře stránky (prostřednictvím jejich ID označeného obsahu) ani označeny jako Artifact - Nové pomocné funkce na úrovni stránek
GetPageContentMarkInfosaValidatePdfUaPageContentTaggingse záznamemTPdfPageContentMarkInfopro přímé použití
Version 1.83.0
Přidáno
- Validace PDF/UA nyní vynucuje model nadpisů dle ISO 14289-1 §7.4.4:
pvuaiHeadingModelMixedoznačí dokumenty, které mísí generický tagHs číslovanými nadpisyH1..Hn, apvuaiHeadingMultipleInNodeoznačí uzly struktury obsahující více než jeden podřízený nadpisH
Version 1.82.0
Přidáno
- Validace PDF/UA nyní zpracovává RoleMap požadovaný dle ISO 14289-1 §7.1:
pvuaiRoleMapRemapsStandardoznačí záznamy RoleMap, které předefinovávají standardní typ struktury, apvuaiRoleMapUnresolvedoznačí používané nestandardní typy struktury, jejichž řetěz RoleMap chybí, je přerušený nebo cyklický — nepřímé řetězy dosahující standardního typu jsou přijaty a nepoužívané záznamy RoleMap nejsou nikdy posuzovány - Nové pomocné funkce
PdfUaIsStandardStructType,PdfReadRoleMapPairs(s dekódováním PDF úniků jmen#hh) aValidatePdfUaRoleMapUsagepro přímé použití
Version 1.81.0
Přidáno
- Validace PDF/UA nyní pokrývá označování seznamů dle ISO 32000-1 vyžadované ISO 14289-1 §7.6:
pvuaiListStructureInvalidoznačí položky LI mimo kontejner L a části Lbl/LBody mimo položku LI, přičemž jsou povoleny vnořené seznamy a legitimní použití Lbl uvnitř prvků Note a BibEntry
Version 1.80.0
Přidáno
- Validace PDF/UA nyní pokrývá označování tabulek dle ISO 32000-1 vyžadované ISO 14289-1 §7.5:
pvuaiTableStructureInvalidoznačí buňky TH/TD mimo řádek TR a řádky nebo skupiny řádků mimo jejich kontejner Table;pvuaiTableHeaderMissingScopeoznačí buňky záhlaví, jejichž vztah nelze určit ani pomocí atributu Scope ani přiřazením Headers/ID; apvuaiTableHeadersUndefinedIdoznačí odkazy Headers v dokumentech, které nedefinují žádná ID prvků struktury TPdfStructureElementzpřístupňuje atributy tabulkyScope,HasHeaders,HeadersIds,ColSpanaRowSpan, vyřešené při procházení stromové struktury
Změněno
- Procházení stromové struktury nyní čte všechny atributy rozvržení a tabulky v jediném průchodu přes slovníky atributů každého prvku místo jednoho průchodu na atribut
Version 1.79.1
Přidáno
- Byl přenesen ukázkový kód
AnnotationsLabdo prostředí Lazarus a C++Builder a byl připojen k existující konzolové ukázce v Delphi
Opraveno
TPdf.CreateAnnotationmohlo vyvolat výjimku “Cannot set attachment points” pro anotační značky, které využívají body čtyřúhelníků (Highlight, Underline, StrikeOut, Squiggly), protože nová anotace zatím neměla vyhrazeno místo k nahrazení; nyní se místo toho připojí první čtyřúhelník
Version 1.79.0
Přidáno
- Nová konzolová ukázka v Delphi
AnnotationsLab: vytváří Text, Highlight, Square a Circle anotace, zapisuje je do PDF, poté soubor znovu načte a provede výčet anotačního seznamu na stránce
Version 1.78.0
Přidáno
- Nové metody
TPdf.MeasureTextaTPdf.MeasureTextWidth: zaměří šířku a výšku řetězce při vykreslování pro zadané písmo a velikost (v uživatelských jednotkách PDF, 1 jednotka = 1/72 palce) bez přidání obsahu na stránku, což usnadňuje logiku rozvržení a zalamování slov pro metoduAddText; poskytováno jako pomocná třída v samostatné jednotceFPdfMeasure - Nová metoda
TPdf.WrapText: nenásytné zalamování slov založené naMeasureTextWidth, které text rozděluje v mezerách a umisťuje slova na řádky nepřekračující danou šířku (uživatelské jednotky PDF); příliš dlouhé slovo bude samostatně na vlastním řádku (bez dělení uvnitř slov) a vrátí zabalené řádky jako pole
Version 1.77.0
Přidáno
ValidatePdfAzískal tři nové hodnotyTPdfAValidationIssuepokrývající klauzule dříve ohodnocené jako “NO” nebo “reader behaviour” z předchozí analýzy mezer (přidány ordinální hodnoty, stávající ponechány):pvaiPdfiumNotDefGlyph(PDF/A-2 6.2.11.8 — znak odpovídající Unicode 0 bez chyby zobrazení, chování symbolu při odkazu na.notdefglyf; detekováno na objektové vrstvě Pdfium),pvaiWordBreakMissing(Level A 6.8.3.2 — řetězec znaků s textovým obsahem delší než 20 znaků bez mezery je pravděpodobně porušením sloučených slov; hrubá heuristika vyhýbající se CJK falešným pozitivům), apvaiLinkActionMissingTarget(6.6.3 — akce GoToR/URI/SubmitForm, které chybí cílový klíč zobrazení, a nelze tak představit jej v prohlížeči)
Version 1.76.0
Přidáno (Added)
ValidatePdfAzískala tři nové hodnotyTPdfAValidationIssue(připojená pořadová čísla, stávající hodnoty se nemění):pvaiNameNotValidUtf8(PDF/A-2/3 6.1.8 — token/BaseFontnebo/FontNameobsahující bajty ≥ 0x80, které netvoří platné kódování UTF-8),pvaiInlineImageLzwForbidden(PDF/A-2/3 6.1.10 — vložený obrázek (inline image) v toku obsahu stránky používá filtr LZW nebo Crypt) apvaiTrueTypeDifferencesForbidden(6.3.7 Cor.2 — ne-symbolické písmo TrueType, jehož slovník Encoding nese/Differences)
Version 1.75.0
Přidáno (Added)
ValidatePdfAzískala tři nové hodnotyTPdfAValidationIssue(přidané na konec, existující hodnoty beze změny):pvaiIntegerImplementationLimit(PDF/A-2/3 6.1.13 — číselný token překračující limit 32bitového celého čísla se znaménkem 2 147 483 647),pvaiBlendModeNotWhitelisted(PDF/A-2/3 6.2.10 — hodnota/BMmimo standardní sadu režimů prolnutí ISO 32000-1 §11.3.5; doplňujepvaiTransparentColorSpacez PDF/A-1, který povoluje pouze Normal/Compatible) apvaiHexStringOddDigits(6.1.6 — hexadecimální řetězec<...>s lichým počtem hexadecimálních číslic)
Version 1.74.0
Přidáno (Added)
ValidatePdfAzískala tři nové hodnotyTPdfAValidationIssue(přidané na konec, existující hodnoty beze změny):pvaiPermissionsViolation(6.1.12 — slovník/Permsobsahující/DigestLocation,/DigestMethodnebo/DigestValuespolečně s/DocMDP),pvaiTransActionForbidden(PDF/A-2 6.5.1 — přechodová akce Trans, detekovaná pomocí vzoru akčního slovníku/S /Trans, aby se předešlo falešným shodám s/Transparency) apvaiPdfiumObjectTransparency(PDF/A-1 6.4 — objekt stránky obsahuje skutečnou průhlednost podleFPDFPageObj_HasTransparency, což rozšiřuje vrstvu objektového modelu Pdfium představenou ve verzi 1.73.0 pro zachycení efektů režimů prolnutí/jemných masek, které skenování názvů na úrovni bajtů může minout)
Version 1.73.0
Přidáno (Added)
TPdf.ValidatePdfAnyní přidává průchod objektového modelu Pdfium nad inspektorem na úrovni bajtů: prochází textové objekty každé stránky pomocíFPDFPage_GetObject→FPDFTextObj_GetFont→FPDFFont_GetIsEmbeddeda hlásí nevestavěné vykreslené písmo jakopvaiPdfiumFontNotEmbedded(ISO 19005 6.3.4), a načítá každou textovou stránku pro skenováníFPDFText_HasUnicodeMapErrora hlásí porušené mapování Unicode jakopvaiPdfiumUnicodeMapError(6.3.8). Tyto kontroly inspektor na úrovni bajtů provést nemůže — vidí pouze tokeny názvů, nikoliv vyřešené handlery písem nebo stav mapování jednotlivých znaků — a jsou sloučeny do výsledku na úrovni bajtů. Samostatná funkce na úrovni bajtůValidatePdfACompliancese nemění
Version 1.72.0
Přidáno (Added)
ValidatePdfAzískala pět nových hodnotTPdfAValidationIssue(přidaných na konec, existující hodnoty beze změny):pvaiNeedsRenderingPresent(PDF/A-2 6.4.2 — katalog nesmí obsahovat/NeedsRendering),pvaiDestOutputProfileRef(PDF/A-3 6.2.3 — OutputIntent nesmí obsahovat/DestOutputProfileRef),pvaiEmbeddedFileMissingUF(PDF/A-3 6.8 — specifikace souboru s/EFmusí obsahovat také/UF),pvaiXmpPacketBytesAttr(6.7.5 — hlavička XMP paketu nesmí obsahovat zastaralý atributbytes=neboencoding=) apvaiAnnotationToggleNoView(PDF/A-2 6.3.2 — anotace/Fs bitem ToggleNoView, hodnota 512, je zakázána)
Version 1.71.0
Změněno (Změněno (Changed))
ValidatePdfUanyní vyvolávápvuaiOrderedListMissingListNumbering(ISO 14289-1 7.6): průchod stromem struktury vyhodnocuje atribut rozloženíListNumberingu každého prvkuLprostřednictvím atributového API Pdfium a označuje jakoukoli hodnotu mimo množinu tabulky 347 z ISO 32000-1 (Decimal,UpperRoman,LowerRoman,UpperAlpha,LowerAlpha,None,Circle,Disc,Square). Chybějící atribut se neoznačuje, protože seznam může být neuspořádaný; tím se uzavírá poslední zbývající nedostatek v ISO 14289-1 zaznamenaný na konci 5. kola
Version 1.70.0
Přidáno (Přidáno (Added))
ValidatePdfUazískala čtyři nové hodnotyTPdfUaValidationIssue(přidané na konec, existující hodnoty beze změny):pvuaiSubsetMissingCidSet(ISO 14289-1 7.21.4.2 —FontDescriptorpro CID podsadu musí deklarovat/CIDSet),pvuaiToUnicodeForbiddenValue(7.21.7 — ToUnicode CMap nesmí mapovat žádný kód naU+FEFFneboU+FFFE; nekomprimované proudy jsou skenovány na výstupní formy<FEFF>/<FFFE>),pvuaiLangInvalidFormat(7.2 —/Langmusí být platná značka RFC 1766 / BCP 47; tolerantní gramatika přijímáen,en-US,zh-Hans,es-419a označuje zjevně nevyhovující hodnoty) apvuaiOrderedListMissingListNumbering(7.6 — zachováno pro úplnost API; validátor zatím nevyvolává, protože spolehlivé rozlišení uspořádaných a neuspořádaných seznamů vyžaduje hodnotu atributuListNumbering, kterou průchod stromem struktury nezpřístupňuje)
Version 1.69.0
Přidáno (Přidáno (Added))
ValidatePdfUazískala dvě nové hodnotyTPdfUaValidationIssue(přidané na konec, existující hodnoty beze změny):pvuaiWidgetOutsideForm(ISO 14289-1 7.18.4 — strukturní prvek Widget musí být vnořen do prvkuForm; průchod stromem struktury nyní ověřuje typ přímého rodiče každého Widgetu) apvuaiSubsetMissingCharSet(7.21.4.2 —FontDescriptorpro Type 1 podsadu musí deklarovat/CharSet, identifikovaný šestipísmenným prefixem podsady+v/FontName)
Version 1.68.0
Přidáno (Přidáno (Added))
ValidatePdfUazískala dvě nové hodnotyTPdfUaValidationIssue(přidané na konec, existující hodnoty beze změny):pvuaiUriActionIsMap(ISO 14289-1 7.18.5 — slovník URI akce nesmí obsahovat/IsMaps hodnotoutrue, protože to zakazuje přístupný cíl odkazu) apvuaiHeadingSequenceViolation(7.4.2 — číslované nadpisy musí začínat naH1a sestupná posloupnost nesmí přeskočit mezilehlou úroveň, např.H1→H3je porušení). Kontrola nadpisů je prvním pravidlem PDF/UA na úrovni stromu struktury ve validátoru:ValidatePdfUaStructureElementsnyní prochází seznam typovaných prvků a ověřuje posloupnostH1…H6(aH7+podle 7.4.3) v pořadí dokumentu
Version 1.67.0
Přidáno (Přidáno (Added))
ValidatePdfUazískala pět nových hodnotTPdfUaValidationIssue(přidaných na konec, existující hodnoty beze změny):pvuaiLinkMissingContents(ISO 14289-1 7.18.5 — anotace Link musí obsahovat alternativní popis pomocí/Contents),pvuaiAnnotationMissingContents(7.18.1 — jakákoliv nevyjmutá anotace bez/Contentsmusí mít alternativní popis; Popup a Widget jsou vyjmuty),pvuaiEmbeddedFileMissingName(7.11 — slovník specifikace souboru musí obsahovat/Fa/UF),pvuaiMediaClipMissingAlt(7.18.6.2 — datový slovník mediálního klipu musí obsahovat/CTa/Alt) apvuaiCidFontMissingCidToGidMap(7.21.3.2 — vložený Type 2 CIDFont musí obsahovat/CIDToGIDMap)
Version 1.66.0
Přidáno (Přidáno (Added))
ValidatePdfUazískala pět nových hodnotTPdfUaValidationIssue(přidaných na konec, existující hodnoty beze změny):pvuaiRoleMapMissing(ISO 14289-1 7.1 — tagovaný dokument s nestandardními typy struktur musí obsahovat/RoleMap),pvuaiOptionalContentAsKey(7.10 — konfigurační slovník volitelného obsahu nesmí obsahovat klíč automatického stavu/AS),pvuaiXfaPresent(7.15 — přítomnost/XFAv AcroForm je označena, protože dynamické XFA je zakázáno),pvuaiTrapNetAnnotation(7.18.2 — anotace/TrapNetjsou zakázány) apvuaiReferenceXObject(7.20 — Reference XObjects, identifikované podle značky/Ref, jsou zakázány)
Opraveno (Opraveno (Fixed))
ValidatePdfUajiž falešně nehlásípvuaiEncryptionPresentu každého šifrovaného souboru: PDF/UA povoluje šifrování za předpokladu, že klíč/Pv šifrovacím slovníku má nastaven bit na pozici 10 (hodnota 1024), což uděluje přístup asistenčním technologiím (7.16). Přesné porušení je nyní hlášeno pomocí novéhopvuaiEncryptionPBitMissing;pvuaiEncryptionPresentje zachováno ve výčtu pro kompatibilitu API, ale validátor na úrovni bajtů jej již nevyvolává
Version 1.65.0
Přidáno (Přidáno (Added))
ValidatePdfAzískala pět nových hodnotTPdfAValidationIssue(přidaných na konec, existující hodnoty beze změny):pvaiCidFontMissingCidToGidMap(ISO 19005-1 6.3.3.2 Cor.2 — vložený Type 2 CIDFont musí obsahovat/CIDToGIDMap),pvaiSubsetMissingCharSet(6.3.5 —FontDescriptorpro Type 1 podsadu musí obsahovat/CharSet),pvaiSubsetMissingCidSet(6.3.5 —FontDescriptorpro CID podsadu musí obsahovat/CIDSet),pvaiWidgetActionForbidden(6.6.1 — anotace Widget nesmí obsahovat/Aani/AA) apvaiOptionalContentAsKey(ISO 19005-2 6.9 — konfigurační slovník volitelného obsahu nesmí obsahovat klíč automatického stavu/AS, což je nově relevantní, protože PDF/A-2 povoluje volitelný obsah)
Version 1.64.0
Přidáno (Přidáno (Added))
ValidatePdfAzískala osm nových hodnotTPdfAValidationIssue(přidaných na konec, existující hodnoty beze změny):pvaiHeaderBinaryMarkerMissing(ISO 19005-1 6.1.2 — za hlavičkou%PDF-x.ymusí následovat komentář%s alespoň čtyřmi bajty většími než 127),pvaiExternalStreamRef(6.1.7 — slovník proudu nesmí obsahovat/F,/FFilterani/FDecodeParms),pvaiOutputIntentScheme(6.2.2 — OutputIntent/Smusí být/GTS_PDFA1),pvaiInfoXmpDateMismatch(6.7.3 —CreationDate/ModDatez Info se musí rovněž objevit jakoxmp:CreateDate/xmp:ModifyDate),pvaiMarkInfoMissing(6.8.2.2 — Úroveň A vyžaduje/MarkInfos/Marked true),pvaiAnnotationApDictViolation(6.5.3 Cor.2 — slovník anotace/APsmí obsahovat pouze/N),pvaiEmbeddedFileMissingAFRelationship(ISO 19005-3 Annex E.2 — každá přidružená specifikace souboru musí obsahovat/AFRelationship) apvaiJpeg2000Violation(ISO 19005-2 6.2.8.3 — obrázek JPEG2000 musí deklarovat 1, 3 nebo 4 komponenty)
Opraveno (Opraveno (Fixed))
ValidatePdfAjiž falešně nehlásípvaiAnnotationFlagsViolationu dokumentů, které používají jednopísmenný název zdroje písma, jako je/Font << /F 5 0 R >>; skenování příznaku/Fje nyní omezeno na kontext anotace (/Subtypetypu anotace), což odpovídá dokumentovanému chování (6.5.3)ValidatePdfAnyní hlásí požadavek na přidružený soubor pro PDF/A-3 na úrovni jednotlivých souborů: dokument je označen pouze tehdy, když vloženému/Type /Filespec, který odkazuje na vložený proud pomocí/EF, chybí/AFRelationship, namísto předchozí kontroly pro celý dokument (vše nebo nic) (ISO 19005-3 Annex E.2)- Přidána zastaralá akce
/SetStatedo množiny zakázaných akcí vedle/SetOCGState, takže název akce z PDF Reference je zachycen přímo (6.6.1)
Version 1.63.0
Přidáno (Přidáno (Přidáno (Added)))
- Přidány
TPdf.MeasureTextaTPdf.MeasureTextWidth: měří vykreslenou šířku a výšku textu pro zadané písmo a velikost bez přidání obsahu na stránku (v uživatelských jednotkách PDF, 1 jednotka = 1/72 palce), což umožňuje výpočty rozložení a automatické zalámování řádků nadAddText; poskytován samostatnou jednotkouFPdfMeasurejako class helper
Změněno (Změněno (Změněno (Changed)))
Demo\Delphi\MergePDF,Demo\CBuilder\MergePDFaDemo\Lazarus\MergePDFvylepšeny pro všechna tři IDE: výběr rozsahu stránek pro každý soubor, volitelná výstupní cesta, odstranění duplikátů, protokol spuštění, tlačítko zrušit a souhrnnou zprávu o slučování; záložky a metadata se importují z prvního zdroje- Ukázky
CreatePDFpro všechna tři IDE nyní obsahují možnost „Evropský text" pro psaní textu s diakritikou v češtině, francouzštině, němčině, španělštině, portugalštině, polštině a turečtině za účelem ověření výběru písma a zpracování Unicode (dřívější ukázkaEuropeanTextbyla integrována) - Odebrány ukázky
ExtractTextPagesaEuropeanText: funkce extrakce textu stránku po stránce vExtractTextPagesje nyní pokryta možnostmi rozsahu stránek a oddělování stránek vExtractText; vícejazyčné vykreslováníEuropeanTextbylo integrováno doCreatePDF
Version 1.62.2
Opraveno
- Byly znovu vygenerovány hlavičky C++Builderu (
.hpp) pro každou verzi a platformu RAD Studia (Win32/Win64/Win64x); odchýlily se od zdrojů v Pascalu a zanechaly zastaralé signatury funkcí i chybějící jednotky, které se ke uživatelům C++Builderu dostaly přes zdrojovou distribuci
Version 1.62.1
Opraveno
- Obnovená kompilace zdrojů v RAD Studio 12 Athens a starších: přiřazení
TArray<Byte>v cestě validace PDF/UA používalo implicitní převod pole dostupný jen v Delphi 13, který se ve starších IDE nezkompiloval
Version 1.62.0
Přidáno (Přidáno (Přidáno (Added)))
TPdf.RenderPageThumbnailvykreslí libovolnou stránku podle indexu do bitmapy přizpůsobené poměru stran, aniž změní aktuální stránku dokumentu, načtenou stránku nebo vyvoláOnPageChange
Opraveno (Opraveno (Opraveno (Fixed)))
TPdfThumbnailViewuž při vykreslování neřídíPageNumberhostitelského dokumentu; dříve každé překreslení znovu načetlo stránky, vyvolaloOnPageChangea zahodilo textovou stránku, což mohlo narušit propojenýTPdfViewa spustit smyčky překreslování. Miniatury se nyní vykreslují přesRenderPageThumbnailbez těchto vedlejších účinků- Validace shody PDF/X nyní kontroluje dokumenty s cross-reference streamy (PDF 1.6, typické pro PDF/X-4) i objekty uložené v komprimovaných object streamech, místo aby takové soubory plošně hlásila jako nevyhovující; značka
GTS_PDFXVersionse čte jak z elementové formy, tak z formy atributu RDF v XMP - Validace PDF/R nyní hlásí
pvriInfoXmpMismatch, když se Info dictionary a XMP neshodují v hodnotách Producer nebo Creator; problém byl dříve deklarován, ale nikdy se nevyvolal - Časovače form-fill se sledují po jednotlivých požadavcích, takže dokument, který současně používá více časovačů (například interval JavaScriptu vedle blikání kurzoru pole), je zachová všechny místo toho, aby ztratil každý kromě nejnovějšího
- Vykreslování
TPdfViewi jeho veřejné metodyRenderPage/RenderTilenyní drží zámek vykreslování dokumentu a serializují se vůči vykreslování stejnéhoTPdfve worker threadu (PDFium není thread-safe) - Ne-ASCII text zapisovaný do metadat PDF/X, PDF/R a PDF/VT (názvy podmínek OutputIntent, Creator, Producer) se nyní kóduje jako řetězec UTF-16BE podle ISO 32000-1 §7.9.2.2 místo syrového UTF-8, které by vyhovující čtečky četly chybně
- Pomocné funkce pro shodu správně čtou vložené streamy metadat, jejichž
/Lengthje nepřímá reference, načítají zdrojové bajty přesReadBuffer(takže krátké čtení selže čistě) a odmítají záporný offsetstartxrefmísto rizika čtení mimo rozsah
Version 1.61.0
Změněno
- Opravy deklarací FFI/ABI, které mohou vyžadovat překompilování kódu implementujícího dotčené callbacky: callback form-fill
FFI_OpenFilenyní používácdecl(Win32 stack convention) a parametrvalueuFPDFAnnot_SetStringValueaFPDFAttachment_SetStringValueje nyníFPDF_WIDESTRING(UTF-16LE) tak, aby odpovídal hlavičkám PDFium - Callbacky progresivního načítání
FX_FILEAVAIL.IsDataAvailaFX_DOWNLOADHINTS.AddSegmentnyní používají posunysize_t, přičemžsize_tmá na Free Pascal / Lazarus Win64 šířku ukazatele (dříve se zkracoval na 32 bitů), což opravuje volání API pro dostupnost dat ioutsize_tna FPC Win64
Opraveno
- Bezpečnost paměti: use-after-free časovače form-fill při zničení
TPdfs aktivním kurzorem AcroForm; dvojitéFPDF_CloseDocumentna chybové cestěImportNPagesToOne; výjimky Pascalu unikající přes callbackyFPDF_FILEWRITE/FPDF_FILEACCESSpřes hranici C během uložení a vložení JPEG; a přetečení celého čísla při extrakci textu při čtení od počátečního indexu do konce stránky TPdfFuture<T>nyní spolehlivě doručuje svůj callback výsledku; odpověď se dříve téměř vždy ztratila (a mohla sáhnout na uvolněné vlákno), protože si pracovník uvolnil sám sebe před zpracováním zařazené odpovědi- Výstup PDF/A, PDF/X, PDF/E, PDF/R, PDF/VT a PDF/UA nyní zapisuje cross-reference položky přesně o velikosti 20 bajtů, jak vyžaduje ISO 32000-1 §7.5.4
- Vkládání standardních markerů už neničí slovník, když odstraněný klíč (například
/Trapped) byl poslední položkou, což dříve spolklo závěrečné>>a vytvořilo poškozený objekt - Streamy ICC profilu OutputIntent nyní deklarují požadovaný počet komponent
/Npro PDF/X a PDF/VT (už dříve pro PDF/A); šifrované zdrojové dokumenty se před vložením markerů PDF/X, PDF/E, PDF/R, PDF/VT a PDF/UA dešifrují, takže je výstup platný místo tichého poškození - UTF-8 BOM xpacket v generovaném XMP se nyní zapisuje jako přesné bajty, což opravuje poškození na instalacích Delphi, jejichž ANSI code page není Latin-1; trailer přírůstkové aktualizace nyní zachovávají odkaz
/Infodokumentu SaveAss kompresí už neusekává streamy, jejichž/Lengthje nepřímá reference, a znovu sestavené cross-reference tabulky nyní používají 20bajtové položky, skutečná čísla generací a zahazují zastaralý ukazatel/Prev- Validace shody nyní čte XMP značky verze ve formátu atributů pro PDF/E a PDF/X (takže jsou rozpoznány soubory PDF/X-4 serializované atributy), vyžaduje přesný identifikátor
PDF/E-1, správně čte metadata streamy s nepřímým/Lengtha už nespojuje chybně klíč/IDnebo/StructTreeRootelementu struktury při kontrole traileru PDF/UA; poškozený offsetstartxrefuž nevyhazuje chybu rozsahu TPdfThumbnailView: na poslední stránku je nyní možné se dostat pomocí posuvníku, po vykreslení miniatur se obnoví aktuální stránka hostitelského dokumentu a standardní zpracování odchodu myši se znovu spouští- Bitmapy šedotónových stránek a obrázků se už nevykreslují se špatnou paletou;
TPdfViewuž nezůstane s visícím odkazem, když se jehoTPdfuvolní jako první - Reporty preflightu: HTML se ukládá jako UTF-8, aby odpovídalo deklarovanému charsetu, a escapování JSON řetězců na Free Pascalu vytváří správné sekvence
\upro ne-ASCII znaky - Trial sestavení: dialog s připomínkou trialu se nyní skutečně zobrazí místo toho, aby byl potlačen dřív, než se mohl ukázat
TPdfStreamAdapternyní odmítá streamy větší než 4 GiB s jasnou chybou místo tichého zkracování délky předané PDFium
Version 1.60.1
Změněno
- Ukázky AccessibilityReader pro Delphi, Lazarus a C++Builder nyní spouští předčítání přes
TPdfReadingSession: každá stránka se sestaví do jednoho spoken chunk pomocíBuildSpokenTextFromWords, pozice slov ze SAPI se předávají doFeedSpokenPositiona relace posouvá stránky a řídí kurzor slov v pohledu, čímž nahrazuje ručně psanou orchestrace, kterou každá ukázka dříve obsahovala - Sledování karaoke na úrovni slov v ukázkách nyní funguje i když je speech engine NVDA:
EstimatePacingurčuje tempo čtecího kurzoru podle uplynulého času mluvení, zatímco NVDA dříve předčítala bez jakéhokoli sledování slov - Pause a Resume v ukázkách nyní fungují i s NVDA:
ResumeRestartsChunkpři Resume znovu přečte aktuální stránku od začátku, zatímco SAPI si ponechává nativní pauzu a pokračování na místě
Version 1.60.0
Přidáno
- Živé vykreslování pro slabozraké v
TPdfView: nové volby vykresleníreInvertareNightDuotonepřebarví každou vykreslenou dlaždici stránky (úplná inverze barev nebo noční duotónová paleta) ještě před vykreslením překryvů pro hledání, výběr, čtení a kurzor slova, takže se stávající barevné transformace bitmap přenášejí i do interaktivního prohlížeče v rozložení jedné stránky i dvoustrany; přepnutí voleb obsah okamžitě překreslí NightDuotoneInkaNightDuotonePapernastavují noční paletu, výchozí je jantarový text na černé stránce; při současném nastavení má přednostreInvert
Version 1.59.0
Přidáno
TPdfReadingSession: koordinační komponenta pro předčítání nezávislá na řečovém enginu. Udržuje kurzor bloků, kurzor slov a stav přehrávání (Play/PlayFrom/Pause/Resume/Stop), postupuje načtenými blokyTPdfSpokenTextve chvíli, kdy host přesTickoznámí nečinnost enginu, převádí offsety mluveného textu zpět na znaky stránky a automaticky řídí slovní kurzor připojenéhoTPdfView; host připojuje libovolný speech engine přesOnSpeaka události požadavků na cancel / pause / resume, takže knihovna sama nepropojuje žádné speech APIFeedSpokenPositionzpracovává pozice slov z enginu (například SAPIStatus.InputWordPosition);EstimatePacingsEstimatedWordsPerMinuteudává tempo engineům bez signálu o poloze;ResumeRestartsChunkznovu přečte aktuální blok u enginů bez nativního pozastaveníOnChunkChange,OnWordChangeaOnFinishedse vyvolají jen při skutečné změně a uvolněný připojený prohlížeč se automaticky odpojí, takže kód hostitele zůstává bez blikání a bez pádů
Version 1.58.0
Přidáno
EstimateSpokenWordIndexodhaduje, které slovo právě speech engine vyslovuje, z uplynulého času a rychlosti slov za minutu, přičemž delším slovům přiděluje poměrně více času, takže i enginy bez hlášení pozice slova (například klient NVDA controller) mohou stále řídit kurzor čtení po slovech; volající dodává uplynulý čas, takže rutina zůstává bez vlastních hodin a dobře testovatelná
Version 1.57.0
Přidáno
- Sestavování mluveného textu s mapováním mezi dvěma doménami pro sledování předčítání:
BuildSpokenTextFromWordsaSpokenTextAppendskládají řetězec předávaný text-to-speech enginu z word boxů stránky a současně zapisují tabulku rozsahů, zatímcoSpokenToPageCharpřevádí offset mluveného textu hlášený enginem (například SAPIStatus.InputWordPosition) zpět na index znaku stránky, takže zvýraznění po slovech zůstává správné i tehdy, když mluvený text není totožný s celým textem stránky (vynechané oblasti, čtení po jednotkách, přepisy výslovnosti) - Typy
TPdfSpokenTextaTPdfSpokenSpannesou mluvený řetězec i zdrojové rozsahy stránek, ze kterých vznikl; offsety na vložených oddělovačích se vyhodnotí na další namapované slovo a offsety za namapovanými běhy nevrátí shodu
Version 1.56.9
Přidáno
Demo\Delphi\PreflightReportpřidává náhled Action Plan, který shrnuje nevyhovující standardy, priority, další kroky, kódy problémů a doporučení do kontrolního seznamu nápravyDemo\Delphi\PreflightReportClipřijímáplan/actionplanjako výstupní formát pro běhy nad jedním souborem i dávkou a zapisuje stejný kontrolní seznam nápravy do textového souboru
Změněno
- Obě dema Delphi PreflightReport nyní zobrazují počty stavů pass / action / review vedle celkového počtu standardů a problémů
Version 1.56.8
Změněno
ViewerInteractionLabnyní zahrnuje ovládání pro skok na stránku, ruční ovládání zoomu, logování souřadnicDeviceToPage/PageToDevicezaložené na kliknutí a přehlednější interakční log pro kontroly výběru, hledání, rotace a navigace- Stránky readme pro
ViewerInteractionLabnyní popisují přidaný interakční postup napříč lokalizovanou sadou demo readme
Version 1.56.7
Přidáno
AccessibilityWorkbenchClimapuje každý vyvolaný nález na příslušná Success Criteria ve WCAG 2.1 a oblast ustanovení ISO 14289-1 (PDF/UA-1) a v reportech zobrazuje sekci pokrytí standardůAccessibilityWorkbenchClipočítá zdokumentované skóre přístupnosti 0-100 se zveřejněnou penalizační stupnicí a pásmy excellent / good / needs work / poor, zobrazované pro každý soubor i jako dávkový průměrAccessibilityWorkbenchClipřijímáfailscore=N, aby běh selhal (exit code 2), pokud některý soubor získá skóre pod NAccessibilityWorkbenchClizapisuje log SARIF 2.1.0, když název dávkového souhrnu končí na.sarif, s jedním pravidlem pro každý druh nálezu nesoucím štítky WCAG 2.1 a PDF/UA pro ingest do CI a code-scanning nástrojůAccessibilityWorkbenchClipřidává příkazversion, který vypisuje připojenou verzi PDFiumPas
Version 1.56.6
Přidáno
IntakeWorkbenchClipočítá forenzní hash SHA-256 pro každý vstupní soubor (snížený naunavailablena kompilátorech bezSystem.Hash) a uvádí jej ve všech formátechIntakeWorkbenchClipřijímápasswords=file.txtpro zkušební odemykání dokumentů vyžadujících heslo ze seznamu kandidátů a zaznamenává index odpovídajícího kandidáta, aniž by kdy logoval samotný text heslaIntakeWorkbenchClipřijímácopyto=dirpro směrování každého auditovaného souboru do podsložky podle úrovně rizika, čímž se auditor mění i na třídič příjmuIntakeWorkbenchClizapisuje log SARIF 2.1.0, když název dávkového souhrnu končí na.sarif, s jedním pravidlem pro každý rizikový příznak a jedním výsledkem pro každý označený soubor pro ingest do CI a code-scanning nástrojůIntakeWorkbenchClipřidává příkazversion, který vypisuje připojenou verzi PDFiumPas
Version 1.56.5
Přidáno
IntakeWorkbenchClinyní odvozuje doporučené kroky po příjmu, například accept, request-password, manual-review, quarantine a deduplicate, a zveřejňuje počty akcí v dávkových souhrnechAccessibilityWorkbenchClinyní odvozuje doporučené kroky nápravy, například pass-through, remediate-tags, run-ocr, remediate-semantics a manual-review, s odpovídajícími počty akcí v dávce
Změněno
- Obě CLI dema ve stylu nástrojů zobrazují doporučenou akci ve výstupech console, text, HTML, JSON a CSV, takže dávkoví operátoři mohou soubory směrovat bez následného zpracování polí rizika nebo stavu
Version 1.56.4
Opraveno
- Při čtení anotací, záložek nebo link anotací ve smyčce už nedochází k prosakování textových řetězců z předchozí položky: výsledkové záznamy
TPdfAnnotation,TBookmarkaTLinkAnnotationse nyní čistí inicializací respektující spravované typy místo surového nulování paměti, takže dokumenty s velmi vysokým počtem anotací nesoucích text už po dobu běhu aplikace nenafukují procesní paměť - Zničení instance
TPdf, která měla registrovaný handlerOnUnsupportedFeature, ji nyní odpojí od procesově globálního callbacku PDFium, takže pozdější načtení dokumentu z jiné instanceTPdfbez vlastního handleru už nemůže volat do uvolněné komponenty (use-after-free)
Version 1.56.3
Opraveno
AccessibilityWorkbenchCliuž nepočítá prázdné stránky jako heuristické stránky pořadí čtení, takže tagované dokumenty s prázdnými oddělovacími stránkami si zachovávají správný stav přístupnosti; stránky bez čitelného obsahu se nyní vykazují samostatně- Detekce hlaviček tabulek v
AccessibilityWorkbenchCliuž nepřipisuje vnější tabulce buňkyTH, které patří vnořené tabulce, a názvy formulářových polí i fontů se porovnávají s rozlišením velikosti písmen, takže se různé položky neslučují - Inventáře hostitelů URL v
IntakeWorkbenchClinyní odstraňují části userinfo, query a fragment, takže podvržený odkaz jakotrusted.example@evil.exampleje přiřazen skutečnému hostiteli a cílemailto:přispívají svou doménou místo toho, aby zůstaly neviditelné - Markdown reporty v
IntakeWorkbenchCliescapují zpětné apostrofy v útočníkem řízených cestách, hostitelích a názvech příloh, takže formát reportu nelze rozbít z dokumentu samotného
Změněno
AccessibilityWorkbenchClivykazuje selhání skenu fontů a skenu formulářových polí jako samostatná počítadla, označuje nevestavěné fonty, které současně mají i vestavěné instance, a dlouhé seznamy fontů ukončuje explicitní značkou zkrácení- Dávkové souhrny v
IntakeWorkbenchClipřidávají sloupec s počtem attachment annotations a sčítání anotací na stránce je omezeno na 20000 anotací na stránku, přičemž omezení je hlášeno ve všech formátech
Version 1.56.2
Přidáno
AccessibilityWorkbenchClinyní audituje vkládání fontů, tooltipy formulářových polí, zdroj pořadí čtení, osnovu dokumentu, strukturu tabulek a seznamů, podezřelý alternativní text a bohatší podrobnosti kontroly po stránkách, takže dávkové reporty přístupnosti identifikují více cílů nápravyIntakeWorkbenchClinyní vykazuje limity skenu stránek, akce launch a remote-go-to, inventáře hostitelů URI, počty anotací, nepodporované funkce PDFium, duplicitní identifikátory dokumentů a rozšířené rizikové příznaky pro automatizované intake review
Změněno
IntakeWorkbenchClipřijímámaxpages=Nv režimu jednoho souboru i dávky, aby omezil sken stránek na dokument, a přitom stále dokončil metadata, přílohy, skripty, XFA, podpisy a reporting rizik
Version 1.56.1
Opraveno
- Načtení staršího
pdfium.dll, kterému chybí novější export, nyní selže čistě: chybová větev resetuje všechny navázané vstupní body API, takže kontrolyAssigned()(například naFPDF_GetLastErrorneboFPDF_GetSecurityHandlerRevision) hlásí knihovnu jako nenačtenou místo toho, aby volaly do již odpojeného modulu a padaly na access violation UnloadLibrarynyní čistí všechna navázání PDFium API namísto pouhých volitelných pomocníků V8, takže po uvolnění DLL nepřežijí žádné zastaralé ukazatele na funkce
Version 1.56.0
Přidáno
- Kurzor čtení po slovech v režimu karaoke v
TPdfView:TrackReadingWordAtmapuje znakový offset aktuálního slova text-to-speech enginu (například SAPIStatus.InputWordPosition) na word boxy stránky, zvýrazní slovo, které jej obsahuje, jako samostatný překryv nad blokem čtení, posune je do zorného pole a vrátí index slova, takže vyslovované slovo se rozsvítí spolu s postupem hlasu SetReadingWordaClearReadingWordnastavují nebo mažou zvýrazněné slovo přímo zTPdfWordBox; opětovné nastavení stejného slova je no-op, takže sledování po slovech nikdy nerozbliká prohlížečReadingWordColoraReadingWordFollowřídí barvu kurzoru slova a to, zda prohlížeč automaticky posune vyslovované slovo do zorného pole
Version 1.55.2
Opraveno
- ViewerInteractionLab nyní dává řádkům panelu nástrojů více svislého prostoru, takže ovládací prvky Open PDF, Create Sample, navigace, hledání a výběru se při škálovaných fontech nepřekrývají
Version 1.55.1
Opraveno
- ViewerInteractionLab nyní umisťuje Prev, Next a Rotate na druhý řádek panelu nástrojů, čímž se vyhne překryvu při spuštění s Open PDF a Create Sample
Version 1.55.0
Přidáno
- Propojení slovo-výběr pro čtení typu "přečti to a vyber to":
TPdfView.SelectWordBoxaSelectWordSpanvybírají jeden word box nebo rozsah word boxů na stejné stránce (zPageWordBoxes) podle jejich znakových rozsahů, takže lze právě čtené slovo nebo řádek také vybrat a zkopírovat WordBoxIndexAtCharIndexmapuje index znaku zpět na word box, který jej obsahuje, a tím pohání zvýraznění po slovech při postupu TTS kurzoru čtení
Version 1.54.0
Přidáno
- Přístupory pro hlasové vyplňování formulářů, které čtou zaostřené pole přímo z logického kurzoru:
FocusedFormFieldValue,FocusedFormFieldNameaFocusedFormFieldDetailsnaTPdfaTPdfViewvracejí hodnotu aktuálního pole, lidsky čitelný název (/TUtooltip, s fallbackem na/T) a plnýTPdfFormFieldInfo(type, flags, options) — vše, co hlasové UI potřebuje oznámit při procházení formuláře
Opraveno
FocusedFormFieldValuečte pole podleFocusedFormFieldIndexnamísto interaktivního fokusování pdfium, takže hlasově řízený vyplňovač formulářů získá správnou hodnotu i bez caret na obrazovce (stávajícíFocusedFormFieldTextnadále odráží fokus pdfium a beze změny zůstává)
Version 1.53.0
Přidáno
- Podpora zvýraznění po slovech:
TPdf.PageWordBoxesaTPdfView.PageWordBoxesrozdělují stránku do záznamůTPdfWordBox, z nichž každý nese text slova, jeho znakový rozsah a obdélník ohraničení v prostoru stránky, takže čtečka přístupnosti může postupně zvýrazňovat každé vyslovené slovo (čtení typu "karaoke") předáním obdélníku doSetReadingHighlight BuildWordBoxeszpřístupňuje samotný krok tokenizace a převádí text stránky na word boxy se znakovými rozsahy
Version 1.52.0
Přidáno
- Pomocníci vykreslování pro slabozraké
InvertPdfBitmap,GrayscalePdfBitmapaDuotonePdfBitmapprovádějí in-place barevné transformace vykreslené 32bitové bitmapy, takže čtečka přístupnosti může stránky zobrazovat invertovaně / v dark mode, ve stupních šedi nebo ve vlastním dvoubarevném schématu (například tmavé pozadí se světlým textem) pro slabozraké uživatele - Transformace běží po pixelech a chovají se shodně ve VCL i Lazarus/LCL, přičemž rozměry bitmapy zůstávají nedotčené
Version 1.51.0
Přidáno
- Jednotky čtení po větách pro asistivní poslechové čtení:
TPdf.ReadingUnits,TPdf.DocumentReadingUnitsaTPdfView.ReadingUnitslinearizují proud čitelného obsahu do uspořádaných záznamůTPdfReadingUnito velikosti věty — každý nese text k přečtení, jeho sémantický druh, stránku, zvýrazňovací obdélníky a jazykový tag, takže aplikace screen readeru může procházet stránku nebo celý dokument po jedné vyslovené jednotce - Sémantická navigace s
NextReadingUnitOfKindumožňuje hlasovému rozhraní přeskočit na další nebo předchozí nadpis, obrázek, položku seznamu či buňku tabulky bez ručního procházení streamu BuildReadingUnitspřevádí libovolnéTPdfContentFragmentspřímo na jednotky čtení: nadpisy a popisy figure/alt zůstávají pohromadě, zatímco odstavce se dělí na hranicích vět, desetinné tečky jsou zachovány a kurzor čtení je obyčejný index vlastněný volajícím
Version 1.50.0
Přidáno
ValidatePdfAnyní umí kontrolovat dokumenty PDF 1.5+, které ukládají catalog, OutputIntent nebo jiné slovníky uvnitř komprimovaných object streams (/Type /ObjStm). Object streams se dekomprimují a objekty, které nesou, se vyřeší, takže se takové dokumenty validují podle skutečného obsahu namísto toho, aby byly hlášeny jako dokumenty s chybějícími PDF/A markery
Version 1.49.5
Opraveno
ValidatePdfAuž nehlásí chybějící popispdfaExtension:schemasjako problém. Schéma identifikátoru PDF/A (pdfaid) je dobře známé, takže ani veraPDF, ani PDF/A-2/-3 pro něj nevyžadují popis extension schema, a označování jeho absence chybně vykazovalo každý konformní PDF/A třetích stran. Dokumenty vytvořené samotnou knihovnou tento popis stále obsahují
Version 1.49.4
Opraveno
ValidatePdfAnyní rozpozná úroveň konformity i tehdy, když je identifikátor PDF/A zapsán jako atributy XML (pdfaid:part="2") namísto jako podřízené elementy, takže dokumenty v atributové podobě už nejsou hlášeny s neznámou úrovní. Tím se zároveň opravuje kaskáda, v níž neodhalená úroveň způsobila, že kontroly specifické pro danou část spadly zpět na přísná pravidla PDF/A-1 a chybně označovaly vložené soubory a průhlednost, které PDF/A-2 a PDF/A-3 povolují
Version 1.49.3
Opraveno
ValidatePdfAnyní kontroluje dokumenty PDF 1.5+, jejichž cross-reference data tvoří cross-reference stream (soubory bez klíčového slovatrailer). Úroveň konformity, trailer/IDi další markery se čtou ze slovníku cross-reference stream, takže se takové dokumenty validují podle své podstaty namísto toho, aby byly hlášeny jako zcela nekonformní
Version 1.49.2
Opraveno
ValidatePdfAuž nehlásí falešný problém s nevestavěným fontem u dokumentů, které všechny své fonty vkládají. Předchozí heuristika porovnávala počet tokenů/FontDescriptors počtem vestavěných fontových programů, ale každý vestavěný font přispívá dvěma tokeny/FontDescriptor(odkaz ze slovníku fontu a samotný descriptor object), takže každý soubor s vestavěnými fonty byl chybně označen. Kontrola nyní hlásí jen dokument, který na fonty odkazuje, ale nevkládá vůbec žádný fontový program, v souladu s odpovídající opravouValidatePdfUa
Version 1.49.1
Opraveno
- Výstup PDF/A se nyní s veraPDF validuje jako konformní PDF/A-1b a PDF/A-1a: stream vestavěného sRGB OutputIntent ICC profilu (odkazovaný přes
/DestOutputProfile) nyní deklaruje požadovaný počet komponent/N(3 pro vestavěný RGB profil), jak vyžaduje ISO 19005-1 6.2.3.2. Dokumenty vytvořené pomocíSaveAsPdfAdříve neprocházely přísnou validací PDF/A-1, protože stream cílového profilu/Nvynechával; hodnota se nyní odvozuje z hlavičky ICC profilu, takže i volajícím dodaný profil CMYK nebo Gray dostane správný počet
Version 1.49.0
Opraveno
ValidatePdfUauž nehlásí falešně chybějící identifikaci XMP u konformních tagovaných PDF — identifikátor PDF/UA (pdfuaid:part),dc:title, data XMP a trailer/IDse nyní čtou z původních bajtů dokumentu namísto znovu uložené kopie, která vynechává XMP stream/Metadataa u souborů s cross-reference stream i trailer/ID- Kontrola vkládání fontů v
ValidatePdfUabyla opravena, takže dokument, který všechny své fonty vkládá, už není hlášen jako dokument s nevestavěnými fonty; nyní označí jen dokument, který na fonty odkazuje, ale nevkládá vůbec žádný fontový program ValidatePdfUanyní přijímá element strukturyFormula, jehož alternativní text je dodán přesActualTextmísto přes položkuAlt(ISO 14289-1 §7.7), v souladu se stávajícím pravidlem proFigure
Version 1.48.0
Přidáno
- Programový výběr textu v
TPdfView:SelectTextRange(podle stránky a rozsahu znaků) aSetSelection(podle explicitních rozsahů po stránkách) vybírají text z kódu — například pro čtení a zvýraznění pasáže; obě metody překreslují a vyvolajíOnSelectionChange, když se výběr změní.SelectionRangesčte aktuální výběr jako znakové rozsahy po stránkách aSelectionRectanglesvrací jeho obdélníky v souřadnicích stránky pro vlastní zvýraznění nebo scroll-to
Version 1.47.0
Přidáno
- Navigace formulářovými poli pro hlasově řízené vyplňování, na
TPdfiTPdfView:FormFieldTabOrder,FocusedFormFieldIndex,FocusFormField,FocusNextFormField,FocusPreviousFormField,ClearFormFieldFocusaFocusedFormFieldText. Tyto funkce posouvají logický kurzor polí přes widget fields stránky v pořadí tabulátoru (s přechodem na začátku a konci), takže asistenční čtečka může formulářem procházet, oznamovat každé pole přesFormFieldInfo[Index].AlternateName(tooltip /TU) a vyplňovat jej přesFormField[Index] - Událost
TPdfView.OnFormFieldFocusChange, vyvolaná při přesunu kurzoru pole (nese nový index pole, nebo -1 při vymazání)
Version 1.46.0
Přidáno
- Proud čitelného obsahu pro asistivní poslechové čtení:
TPdf.ReadableContent,TPdf.ReadablePageContent,TPdf.DocumentReadableContentaTPdfView.ReadableContentvracejí uspořádaný seznam sémantických položekTPdfContentFragment, z nichž každá nese text ke čtení nahlas (skutečné glyfy neboActualText/Alt pro obrázky), druh fragmentu (heading with level, paragraph, figure, list item, table cell, link, plain), jazyk, 1-based stránku a blokové i řádkové zvýrazňovací obdélníky. Tagovaná PDF se linearizují v logickém pořadí čtení podle structure tree; netagované stránky padají zpět na render order, takže lze nahlas číst jakýkoli dokument - Synchronizované zvýraznění čtení v
TPdfView:SetReadingHighlight,ClearReadingHighlighta publikovaná vlastnostReadingHighlightColorzvýrazňují právě čtený blok nad překryvy hledání a výběru - Nové veřejné typy
TPdfContentFragment,TPdfContentFragments,TPdfReadableContent,TPdfContentFragmentKindaTPdfReadingOrderSourcea nový helperClassifyStructType
Version 1.45.0
Přidáno
ValidatePdfUanyní kromě markerů na úrovni souboru prochází i živý tagovaný structure tree a hlásí tři vysoce spolehlivá porušení obsahu, která byte-level scanning nezachytí: elementFigurebez položky Alt i bez ActualText (ISO 14289-1, 7.3), elementFormulabez atributu Alt (7.7) a elementNotebez jedinečného ID (7.9). Na povrch to vyvádějí tři nové hodnotyTPdfUaValidationIssue:pvuaiFigureMissingAlt,pvuaiFormulaMissingAltapvuaiNoteMissingId. U netagovaných dokumentů se průchod stromem přeskočí- Nový veřejný helper
ValidatePdfUaStructureElementsaplikuje tato pravidla structure tree na plochý seznam elementů (vracený zTPdf.StructureElements), takže kontroly lze spouštět nebo unit-testovat bez načtení celého dokumentu
Version 1.44.5
Opraveno
- Kontrola vkládání fontů v
ValidatePdfA(pvaiFontNotEmbedded, ISO 19005-1, 6.3.4) nyní zachytí i nevestavěné simple fonts bez/FontDescriptor, především 14 standardních Type 1 fontů (Helvetica, Times, Courier atd.), které PDF/A vyžaduje vkládat bez výjimky. Dříve takový font procházel bez povšimnutí; kontrola nyní započítává i slovníky simple fontů (/Type1,/TrueType,/MMType1) proti vestavěným fontovým programům, stejně jako oprava PDF/UA ve verzi 1.44.3
Version 1.44.4
Opraveno
ValidatePdfVTnyní odmítá chybně utvořené DPart stromy podle ISO 16612-2 §6.5, kde je/DPartsploché pole referencí místo požadovaného pole polí, nebo kde listový DPart opakuje svou stránku/Startjako/End, přestože rozsah obsahuje jen jednu stránkuValidatePdfVTnyní ověřuje názvy/NodeNameListjako hodnoty XML NMTOKEN po rozvinutí escape sekvencí PDF name#xx, takže neplatné názvy úrovní hierarchie jsou hlášeny přespvviMissingDPartRootnamísto toho, aby byly přijaty jako použitelná DPart struktura
Version 1.44.3
Opraveno
- Kontrola vkládání fontů v
ValidatePdfUa(pvuaiFontNotEmbedded, ISO 14289-1, 7.21.4) nyní zachytí i nevestavěné simple fonts bez/FontDescriptor, především 14 standardních Type 1 fontů (Helvetica, Times, Courier atd.), pro které PDF/UA neposkytuje žádnou výjimku z vkládání. Dříve takový font zůstal nepovšimnut a dokument, který jej používal, mohl být hlášen jako konformní; kontrola nyní započítává i slovníky simple fontů (/Type1,/TrueType,/MMType1) proti vestavěným fontovým programům
Version 1.44.2
Opraveno
ValidatePdfVTnyní ponechává přítomný, ale nerozpoznaný markerpdfvtid:GTS_PDFVTVersionjakopvcUnknownnamísto jeho snížení napvcNone. Díky tomu lze neplatné řetězce na úrovni souboru, jako jePDF/VT-2s, odlišit od dokumentů bez markeru PDF/VT; PDF/VT-2s je identifikováno hlavičkou MIME streamu v ISO 16612-2 Annex A, nikoli XMP markerem PDF souboru- Kontrola
/DPartRootnyní přísněji ověřuje sémantiku stromu podle ISO 16612-2 §6.5:/DPartRootNodea/NodeNameListmusí popisovat skutečnou hloubku DPart, parent odkazy DPart musí tvořit strom,/Starta/DPartsse vzájemně vylučují a každé stránkové/DPartmusí ukazovat na pokrývající listový DPart ve stejném depth-first pořadí jako strom stránek
Version 1.44.1
Opraveno
SaveAsPdfVTnyní zapisuje minimální Document Part Hierarchy podle ISO 16612-2 §6.5, když zdrojové PDF postrádá použitelné/DPartRoot. Vygenerovaný strom propojí každou stránku přes/DPart, zachová existující platnou hierarchii a ponechá bohatší metadata recipient/DPM na volajícím workflowValidatePdfVTnyní ověřuje použitelnou strukturu DPart, čte hodnoty XMP PDF/VT z atributů RDF i z textu elementů a vynucuje přesné párování PDF/VT se základem PDF/X: PDF/VT-1 vyžaduje PDF/X-4, zatímco PDF/VT-2 vyžaduje PDF/X-4p, PDF/X-5g nebo PDF/X-5pgTPdfVTSaveOptions.Conformance = pvc2už nezapisuje neplatné markery jednosouborového PDF/VT-2. Jednosouborový zapisovač normalizuje výstup na PDF/VT-1, protože PDF/VT-2 vyžaduje sémantiku sady souborů
Version 1.44.0
Přidáno
ValidatePdfUanyní kromě markerů formátu souboru hlásí i obsahová porušení PDF/UA zjistitelná z bajtů: nevestavěný fontový program (ISO 14289-1, 7.21.4), font bez CMap/ToUnicode, pokud není přítomno osvobozené kódování simple fontu (7.21.7), a dokument s anotacemi, který neuvádí pořadí tabulátoru stránky/Tabs /S(7.18.3)- Tři nové hodnoty
TPdfUaValidationIssue—pvuaiFontNotEmbedded,pvuaiFontMissingToUnicodeapvuaiMissingTabsOrder— vracíValidatePdfUai preflight report. Jde o hrubé heuristiky určené jako preflight nápověda, nikoli o úplné ověření ISO 14289-1
Version 1.43.1
Opraveno
SaveAsPdfUanyní vynucuje povinné položky katalogu z ISO 14289-1, 7.1:/ViewerPreferences/DisplayDocTitle truea/MarkInfo/Marked true/Suspects false, i když zdrojový dokument tyto slovníky už obsahuje, ale s chybějícími nebo protichůdnými hodnotami. Dříve se markery vkládaly jen tehdy, když slovníky zcela chyběly, takže zdroj s/ViewerPreferencesbezDisplayDocTitlenebo s/MarkInfoobsahujícím/Marked falsemohl být po round-tripu nekonformní- Existující klíče v už přítomném slovníku
/ViewerPreferencesnebo/MarkInfose zachovávají a slovník dodaný jako nepřímý odkaz se před aplikací povinných klíčů nejprve vyřeší
Version 1.43.0
Přidáno
ValidatePdfAnyní uplatňuje pravidla PDF/A-2 / PDF/A-3 pro vložené a přidružené soubory a pro text Level U. Vložené soubory jsou nadále zakázány pro PDF/A-1; u PDF/A-3 je označen vložený soubor bez povinného klíče/AFRelationship(ISO 19005-3 Annex E), zatímco přílohy PDF/A-2 jsou povoleny (jejich vlastní konformita se nerekurzivně neověřuje). Nový problémpvaiUnicodeMappingMissinghlásí dokument PDF/A-2u nebo PDF/A-3u, jehož fonty nemají mapování/ToUnicode(ISO 19005-2 6.2.11.7). Průhlednost a optional content zůstávají hlášeny pouze pro PDF/A-1
Version 1.42.0
Přidáno
- PDF/A-2 (ISO 19005-2) a PDF/A-3 (ISO 19005-3) jsou nyní podporovány na všech třech úrovních konformity — a, b a u — pomocí
SaveAsPdfA,ValidatePdfAa vlastnostiPdfAConformance. VýčetTPdfAConformancezískávápac2a,pac2u,pac3aapac3u(PDF/A-1 úroveň u nemá). Ukládání zapisuje odpovídajícípdfaid:part(2 nebo 3) apdfaid:conformance(A, B nebo U) a zachovává subtype OutputIntentGTS_PDFA1, který ISO 19005-2 drží kvůli kompatibilitě. Požadavek na Level A se stále sníží na odpovídající Level B (pro libovolnou část), pokud dokument postrádá tagovanou strukturu, kterou tato úroveň vyžaduje
Version 1.41.0
Přidáno
ValidatePdfAnyní kromě dříve hlášených strukturálních markerů odhaluje i obsahová porušení PDF/A, která nelze opravit pouhým vložením markerů: JavaScript a další zakázané akce, additional-actions (/AA), vložené soubory,LZWDecode, průhlednost (soft masks a transparency groups), optional content (/OCProperties), zakázané podtypy anotací (FileAttachment, Sound, Movie, 3D, Screen), AcroForm/NeedAppearances truea/XFA, fonty, jejichž descriptory neobsahují vestavěný fontový program, a tvrzení o Level A bez tagované struktury požadované ISO 19005-1 6.8. Kontroly průhlednosti, optional content a vložených souborů platí jen pro PDF/A-1 (v PDF/A-2 a PDF/A-3 jsou tyto prvky povoleny). Nové hodnotyTPdfAValidationIssuezpřístupňují každý případ; stávající hodnoty zůstávají beze změny
Version 1.40.3
Opraveno
SaveAsPdfAnyní před vytvářením výstupu PDF/A odstraňuje jakékoli šifrování zdrojového dokumentu. ISO 19005-1 6.1.3 zakazuje klíč traileru/Encrypt, ale cesta ukládání dříve zachovávala security handler zdroje, takže uložení zašifrovaného dokumentu jako PDF/A vytvořilo zašifrovaný nekonformní soubor. Uložení PDF/A nyní dokument nejprve dešifruje. Nezašifrované dokumenty to neovlivní
Version 1.40.2
Opraveno
- Bylo zabráněno tomu, aby
SaveAsPdfAemitovalo falešné tvrzení o konformitě PDF/A Level A. Když je požadován Level A (pac1a), ale zdrojový dokument postrádá markery tagované struktury vyžadované ISO 19005-1 6.8 —/StructTreeRootv katalogu a slovník/MarkInfos/Marked true— identifikuje se uložený soubor nyní jako odpovídající Level B (pdfaid:conformance=B) místo toho, aby tvrdil Level A. Čistě vizuální výstup PDF/A-1b zůstává beze změny
Version 1.40.1
Opraveno
- Byla zpřísněna validace souladu s verzí PDF tak, aby akce
SetOCGState(set-optional-content-group-state) byla rozpoznána jako funkce PDF 1.5. Uložení do cíle PDF 1.2, 1.3 nebo 1.4, který obsahuje akciSetOCGState, je nyní odmítnuto v souladu s ISO 32000-1 (Table 198); dříve mohla taková akce projít do výstupu nižší verze. Samostatná zastaralá akce PDF 1.2SetStateje stále přijímána od PDF 1.2 výše
Version 1.40.0
Přidáno
- Bylo navázáno upstream API
FPDFPageObj_AddExistingMark(), které připojuje existující content mark k page objectu. Když po sobě jdoucí page objecty sdílejí stejnou mark, uložené PDF je sloučí do jediné značky pokrývající všechny; nesousedící objekty dostanou samostatné kopie - Bylo navázáno upstream API
FPDFTextObj_SetFontSize()pro změnu velikosti písma existujícího textového objektu v bodech, jako doplněk ke stávajícímu navázáníFPDFTextObj_GetFontSize()
Změněno
- Přibalené runtime DLL PDFium (Win32 a Win64, standardní i V8 sestavení) byly obnoveny na upstream snapshot z 2026-06-02
Version 1.39.53
Změněno
- Dema Delphi
PDFViewer,SplitViewaMultiPageViewerbyla změněna tak, aby dokumenty ve výchozím stavu otevírala v režimuZoom to Page - Počáteční vykreslení nyní přizpůsobí celou stránku ploše prohlížeče ještě předtím, než uživatel zvolí ruční úroveň zoomu
- Aktualizovány
TPdf.AboutInfo, metadata balíčku Lazarus a metadata verze instalátoru tak, aby uváděly 1.39.53
Version 1.39.52
Změněno
- Bylo rozšířeno
Demo\Lazarus\CreatePDF, takže úvodní ukázka nyní generuje dvoustránkové PDF s vektorovými cestami, obsahem tabulky, vloženým obrázkem, textovou anotací, otočeným textem a přehlednějším průvodcem sestavením dokumentu - Pro každou složku dem Delphi, C++Builder a Lazarus byly přidány uhlazené stránky
README.html, které nahrazují poslední textové demo README průvodcem čitelným v prohlížeči - Aktualizovány
TPdf.AboutInfo, metadata balíčku Lazarus a metadata verze instalátoru tak, aby uváděly 1.39.52
Version 1.39.51
- Dávkové souhrny v
Demo\Delphi\PreflightReportClibyly rozšířeny o součty stavů standardů pro výsledky Pass, Action required a Review napříč vybranými standardy - Řádky po jednotlivých souborech nyní v souhrnech TXT / HTML / JSON / CSV obsahují počty action-required a review, takže se artefakty CI dají kontrolovat bez otevírání každého vygenerovaného reportu
- Aktualizovány
TPdf.AboutInfo, metadata balíčku Lazarus a metadata verze instalátoru tak, aby uváděly 1.39.51
Version 1.39.50
- Dávkový režim adresářů v
Demo\Delphi\PreflightReportClibyl vylepšen tak, žebatchdir=foldershromáždí nalezené cesty k PDF, seřadí je a teprve potom generuje reporty ve stabilním pořadí - Rekurzivní skeny adresářů nyní vytvářejí reprodukovatelné pořadí reportů a řádků souhrnu, zatímco explicitní zpracování
batch=list.txtnadále zachovává pořadí ze souboru seznamu - Aktualizovány
TPdf.AboutInfo, metadata balíčku Lazarus a metadata verze instalátoru tak, aby uváděly 1.39.50
Version 1.39.49
- Dávkové souhrny v
Demo\Delphi\PreflightReportClibyly rozšířeny tak, aby zaznamenávaly nastavení běhu: druh zdroje, cestu ke zdroji, stav rekurze, výstupní adresář, formát reportu, vybrané standardy a režimfailon= - Souhrny JSON nyní obsahují objekt
run, souhrny TXT a HTML zobrazují sekci nastavení běhu a řádky CSV opakují stejné auditní sloupce pro tabulkové a CI pipeline - Aktualizovány
TPdf.AboutInfo, metadata balíčku Lazarus a metadata verze instalátoru tak, aby uváděly 1.39.49
Version 1.39.48
- Bylo vylepšeno pojmenování dávkových výstupů v
Demo\Delphi\PreflightReportCli, takže duplicitní názvy vstupních souborů sdílející jednooutdir=už navzájem nepřepisují své vygenerované reporty - Dávkové běhy nyní přidávají přípony
-2,-3a další, když byla stejná cesta reportu už v tomtéž běhu přidělena, a souhrny zaznamenávají konečnou kolizně bezpečnou cestu reportu - Aktualizovány
TPdf.AboutInfo, metadata balíčku Lazarus a metadata verze instalátoru tak, aby uváděly 1.39.48
Version 1.39.47
- Dávkové souhrny v
Demo\Delphi\PreflightReportClibyly rozšířeny tak, že výstupy TXT a JSON nyní obsahují agregované součty pro total files, processed files, failed files, issues a shody pravidlafailon= - Souhrny CSV zůstávají čistou tabulkou řádků pro stávající odběratele, zatímco souhrny HTML nadále zobrazují stejné agregované metriky v hlavičce dashboardu
- Aktualizovány
TPdf.AboutInfo, metadata balíčku Lazarus a metadata verze instalátoru tak, aby uváděly 1.39.47
Version 1.39.46
Demo\Delphi\PreflightReportClibylo rozšířeno osummary=batch.html/.htm, takže dávkové běhy mohou vedle manifestů TXT / CSV / JSON generovat i dashboard čitelný v prohlížeči- Souhrny HTML ukazují metriky total, processed, failed, issue a shod
failon=a poté vypisují každý vstup s odkazy na reporty, stavem, počty a textem chyby - Aktualizovány
TPdf.AboutInfo, metadata balíčku Lazarus a metadata verze instalátoru tak, aby uváděly 1.39.46
Version 1.39.45
Demo\Delphi\PreflightReportClibylo rozšířeno obatchdir=folderarecursive, takže skripty mohou procházet složky PDF přímo bez předchozího vytváření souboru seznamu- Adresářový dávkový režim znovu používá chování
outdir=,summary=,standards=afailon=z režimu dávky založené na seznamu, přičemž nerekurzivní režim skenuje jen vybranou složku arecursivezahrnuje podsložky - Aktualizovány
TPdf.AboutInfo, metadata balíčku Lazarus a metadata verze instalátoru tak, aby uváděly 1.39.45
Version 1.39.44
Demo\Delphi\PreflightReportClibylo rozšířeno osummary=batch.csv|json|txt, takže dávkové běhy mohou vedle reportů po jednotlivých souborech vydat i strojově čitelný manifest- Dávkové souhrny obsahují pro úlohy CI a externí skripty každou vstupní cestu, cestu k reportu, stav, počet standardů, počet passed, počet issues, stav shody
failon=a text chyby - Aktualizovány
TPdf.AboutInfo, metadata balíčku Lazarus a metadata verze instalátoru tak, aby uváděly 1.39.44
Version 1.39.43
Demo\Delphi\PreflightReportClibylo rozšířeno obatch=list.txtaoutdir=reports, takže skripty mohou v jednom běhu generovat preflight reporty pro seznam souborů PDF- Dávkový režim přeskočí prázdné řádky a komentáře
#, odvodí každý název reportu.preflight.<ext>ze vstupního PDF, pokračuje po chybách jednotlivých souborů a před návratem shrne zpracované a selhané soubory - Aktualizovány
TPdf.AboutInfo, metadata balíčku Lazarus a metadata verze instalátoru tak, aby uváděly 1.39.43
Version 1.39.42
Demo\Delphi\PreflightReportClibylo rozšířeno ofailon=none|issues|action|review, takže úlohy CI mohou převést vygenerované výsledky preflightu na deterministické exit codes- CLI nyní vrací exit code 2, když se po vygenerování souboru reportu a volitelného připojeného PDF reportu shodne vybrané pravidlo
failon=, zatímco runtime chyby nadále vracejí exit code 1 - Aktualizovány
TPdf.AboutInfo, metadata balíčku Lazarus a metadata verze instalátoru tak, aby uváděly 1.39.42
Version 1.39.41
Demo\Delphi\PreflightReportClibylo rozšířeno oattach=output.pdf, takže vygenerovaný preflight report lze vložit jako přílohu na úrovni dokumentu do nové kopie PDF- CLI ponechává vygenerovaný soubor reportu TXT / HTML / Markdown / JSON / CSV na disku a odmítá jej připojit zpět do původní vstupní cesty PDF, čímž snižuje riziko náhodného přepsání
- Aktualizovány
TPdf.AboutInfo, metadata balíčku Lazarus a metadata verze instalátoru tak, aby uváděly 1.39.41
Version 1.39.40
- Bylo přidáno
Demo\Delphi\PreflightReportCli, konzolové demo Delphi pro skriptovatelné generováníFPdfPreflightReportbez otevření prohlížeče - CLI podporuje vytvoření ukázky bez argumentů, vstupní / výstupní argumenty, volitelné heslo, výstupní formáty
text/html/md/json/csva filtrovánístandards=pro PDF/A, PDF/UA, PDF/E, PDF/X, PDF/R a PDF/VT - Aktualizovány
TPdf.AboutInfo, metadata balíčku Lazarus a metadata verze instalátoru tak, aby uváděly 1.39.40
Version 1.39.39
FPdfPreflightReportbylo rozšířeno oTPdfPreflightReport.ToMarkdownaSaveMarkdownToFile, takže preflight reporty lze exportovat jako Markdown vhodný pro issue tracker- Aktualizovány ukázky
PreflightReportpro Delphi, C++Builder a Lazarus o přepínání náhledu Markdownu a akce Save MD vedle stávajícího workflow TXT / HTML / JSON / CSV - Aktualizovány
TPdf.AboutInfo, metadata balíčku Lazarus a metadata verze instalátoru tak, aby uváděly 1.39.39
Version 1.39.38
- Ukázky
SecurityAuditpro Delphi, C++Builder a Lazarus byly rozšířeny o export auditu do JSON vedle stávajícího workflow ukládání / kopírování TXT - JSON report obsahuje
format,generatedAt,summary,findingCounta strukturované řádkyfindingss poli severity, area a detail - Aktualizovány
TPdf.AboutInfo, metadata balíčku Lazarus a metadata verze instalátoru tak, aby uváděly 1.39.38
Version 1.39.37
- Rozšířen
FPdfPreflightReportoTPdfPreflightReport.ToCsvaSaveCsvToFile, takže preflight reporty lze exportovat jako CSV vhodné pro tabulkové procesory - Aktualizovány ukázky
PreflightReportpro Delphi, C++Builder a Lazarus o přepínání náhledu CSV a akce Save CSV vedle stávajícího workflow TXT / HTML / JSON - Aktualizováno
TPdf.AboutInfo, metadata balíčku Lazarus a metadata verze instalátoru na 1.39.37
Version 1.39.36
- Rozšířen
FPdfPreflightReportoTPdfPreflightReport.IssueCategoryCountsa znovupoužitelné typyTPdfPreflightIssueCategoryCountaTPdfPreflightIssueCategoryCountspro seskupování markerových problémů podle kategorií - Aktualizovány
TPdfPreflightReport.ToText,ToHtmlaToJson, takže generovaný výstup PreflightReport nyní obsahuje souhrny počtů kategorií problémů vedle řádků pro jednotlivé standardy a podrobných doporučení k nápravě - Aktualizováno
TPdf.AboutInfo, metadata balíčku Lazarus a metadata verze instalátoru na 1.39.36
Version 1.39.35
- Přejmenována rozšířená ukázka
PrintDialognaPrintPreferencesnapříč Delphi, C++Builderem a Lazarusem, aby název ukázky odpovídal pracovnímu postupu tiskových preferencí autora PDF, N-up tisku, filtrování lichých / sudých stránek, odstínů šedi, okrajů buněk a mapování duplexu - Aktualizovány
TPdf.AboutInfo, metadata balíčku Lazarus a metadata verze instalátoru tak, aby uváděly 1.39.35
Version 1.39.34
- Rozšířena
Demo\Delphi\PrintPDFo načítání PDF pomocí přetažení a zdokumentován existující pracovní postupDemo\CBuilder\PrintPDFvedle ukázek PrintPDF pro Delphi a Lazarus - Aktualizovány
TPdf.AboutInfo, metadata balíčku Lazarus a metadata verze instalátoru tak, aby uváděly 1.39.34
Version 1.39.33
- Přidána
Demo\CBuilder\SplitView, čímž se dokončila matice ukázek SplitView pro Delphi, C++Builder a Lazarus - Aktualizovány
TPdf.AboutInfo, metadata balíčku Lazarus a metadata verze instalátoru tak, aby uváděly 1.39.33
Version 1.39.32
- Přidána
Demo\Lazarus\SplitView, která přináší porovnávání PDF vedle sebe do Lazarusu s rozložením na dva nebo tři panely, navigací v aktivním zobrazení, synchronizovanými příkazy, předvolbami zoomu a rotací - Aktualizovány
TPdf.AboutInfo, metadata balíčku Lazarus a metadata verze instalátoru tak, aby uváděly 1.39.32
Version 1.39.31
- Přidána
Demo\Lazarus\PrintPDF, která přináší standardní pracovní postup tisku PDF do Lazarusu s navigací náhledu, rozsahy stránek, počtem kopií, režimem kolace, průběhem a možností zrušení - Aktualizovány
TPdf.AboutInfo, metadata balíčku Lazarus a metadata verze instalátoru tak, aby uváděly 1.39.31
Version 1.39.30
- Přidána
Demo\Lazarus\FontProperties, čímž se dokončila matice ukázek FontProperties pro Delphi, C++Builder a Lazarus - Aktualizovány
TPdf.AboutInfo, metadata balíčku Lazarus a metadata verze instalátoru tak, aby uváděly 1.39.30
Version 1.39.29
- Přidána
Demo\CBuilder\FontProperties, která přináší zkoumání indexovaných metadat znaků a fontů do C++Builderu vedle Delphi ukázky - Aktualizovány
TPdf.AboutInfo, metadata balíčku Lazarus a metadata verze instalátoru tak, aby uváděly 1.39.29
Version 1.39.28
- Přidána
Demo\Delphi\ExtractTextPages, čímž se dokončila matice ukázek extrakce textu po stránkách pro Delphi, C++Builder a Lazarus - Aktualizovány
TPdf.AboutInfo, metadata balíčku Lazarus a metadata verze instalátoru tak, aby uváděly 1.39.28
Version 1.39.27
- Přidána
Demo\Lazarus\PrintDialog, čímž se dokončila matice ukázek PrintDialog pro Delphi, C++Builder a Lazarus - Aktualizovány
TPdf.AboutInfo, metadata balíčku Lazarus a metadata verze instalátoru tak, aby uváděly 1.39.27
Version 1.39.26
- Přidána
Demo\CBuilder\PrintDialog, která přináší pracovní postup N-up tisku a tiskových preferencí autora PDF do C++Builderu vedle Delphi ukázky - Aktualizovány
TPdf.AboutInfo, metadata balíčku Lazarus a metadata verze instalátoru tak, aby uváděly 1.39.26
Version 1.39.25
- Přidána
Demo\CBuilder\ViewerInteractionLab, čímž se dokončila matice ukázek ViewerInteractionLab pro Delphi, C++Builder a Lazarus - Byl upraven build workflow knihovny a výstupy balíčku Win64 C++Builder tak, aby se metody interakce prohlížeče
TPdfViewsprávně linkovaly v demech Win64 - Aktualizovány
TPdf.AboutInfo, metadata balíčku Lazarus a metadata verze instalátoru tak, aby uváděly 1.39.25
Version 1.39.24
- Přidána
Demo\Lazarus\ViewerInteractionLab, která přináší zaměřený pracovní postup interakce s prohlížečem do Lazarusu vedle Delphi ukázky - Aktualizovány
TPdf.AboutInfo, metadata balíčku Lazarus a metadata verze instalátoru tak, aby uváděly 1.39.24
Version 1.39.23
- Přidána
Demo\Lazarus\SearchAndSelect, čímž se dokončila matice ukázek SearchAndSelect pro Delphi, C++Builder a Lazarus - Aktualizovány
TPdf.AboutInfo, metadata balíčku Lazarus a metadata verze instalátoru tak, aby uváděly 1.39.23
Version 1.39.22
- Přidána
Demo\CBuilder\ContentExtractionLabaDemo\Lazarus\ContentExtractionLab, které přinášejí pracovní postup vícekategoriální extrakce obsahu do všech podporovaných demo IDE - Aktualizovány
TPdf.AboutInfo, metadata balíčku Lazarus a metadata verze instalátoru tak, aby uváděly 1.39.22
Version 1.39.21
- Rozšířeny
Demo\Delphi\PreflightReport,Demo\Lazarus\PreflightReportaDemo\CBuilder\PreflightReporto volič formátu náhledu, aby si uživatelé mohli před uložením reportů prohlédnout textový nebo JSON výstup - Aktualizovány
TPdf.AboutInfo, metadata balíčku Lazarus a metadata verze instalátoru tak, aby uváděly 1.39.21
Version 1.39.20
- Do
FPdfPreflightReportbyl přidán export JSON přesTPdfPreflightReport.ToJsonaSaveJsonToFile, který vytváří strojově čitelné souhrny, stav / prioritu po standardech, další kroky a podrobnosti o problémech - Aktualizovány
Demo\Delphi\PreflightReport,Demo\Lazarus\PreflightReportaDemo\CBuilder\PreflightReporto akce Save JSON vedle exportu TXT / HTML - Aktualizovány
TPdf.AboutInfo, metadata balíčku Lazarus a metadata verze instalátoru tak, aby uváděly 1.39.20
Version 1.39.19
FPdfPreflightReportbylo rozšířeno oTPdfPreflightStatus, kategorie problémů, prioritu po standardech a doporučení dalších kroků v reportech TXT / HTMLDemo\Delphi\PreflightReport,Demo\Lazarus\PreflightReportaDemo\CBuilder\PreflightReportbyly aktualizovány tak, aby v souhrnné mřížce zobrazovaly status, prioritu, počet problémů a další krok- Aktualizovány
TPdf.AboutInfo, metadata balíčku Lazarus a metadata verze instalátoru tak, aby uváděly 1.39.19
Version 1.39.18
- Bylo přidáno
Demo\Lazarus\SecurityAudit, čímž se uzavírá matice dem Delphi, C++Builder a Lazarus pro workflow read-only auditu rizikové plochy PDF - Ukázka pro Lazarus vypisuje oprávnění, přílohy, JavaScript actions, URI / Launch link annotations, web links, signatures, stav XFA, dostupnost pomocníků V8 / XFA a callbacky unsupported-feature, a pak seznam nálezů uloží nebo zkopíruje jako report TXT
- Aktualizovány
TPdf.AboutInfo, metadata balíčku Lazarus a metadata verze instalátoru tak, aby uváděly 1.39.18
Version 1.39.17
- Bylo přidáno
Demo\CBuilder\SecurityAudit, které přináší workflow read-only auditu rizikové plochy PDF do C++Builderu vedle existující ukázky Delphi - Ukázka pro C++Builder vypisuje oprávnění, přílohy, JavaScript actions, URI / Launch link annotations, web links, signatures, stav XFA, dostupnost pomocníků V8 / XFA a callbacky unsupported-feature, a pak seznam nálezů uloží nebo zkopíruje jako report TXT
- Aktualizovány
TPdf.AboutInfo, metadata balíčku Lazarus a metadata verze instalátoru tak, aby uváděly 1.39.17
Version 1.39.16
- Bylo přidáno
Demo\CBuilder\SearchAndSelect, které přináší samostatný viewer workflow SearchAndSelect do C++Builderu vedle existující ukázky Delphi - Ukázka pro C++Builder vytváří nebo otevírá PDF, vypisuje shody napříč všemi stránkami s náhledy čísla stránky / indexu znaku, podporuje navigaci Previous / Next a dvojklikem a zvýrazňuje shody na aktuální stránce pomocí
HighlightSearchText - Současně zpřístupňuje
AllowUserTextSelection,SelectedText,SelectAll,CopySelectionToClipboard,ClearSelection,OnSelectionChangea možnosti spreadDisplayMode; metadata verze nyní uvádějí 1.39.16
Version 1.39.15
- Bylo přidáno
Demo\CBuilder\WatermarkStamp, čímž se uzavírá matice dem Delphi, Lazarus a C++Builder pro workflow znovupoužitelných vodoznaků a razítek Form XObject - Ukázka pro C++Builder vytváří cílová i razítková PDF, znovu používá stránku razítka přes
CreateXObjectFromPage, aplikuje transformaceTPdfMatrixa ukládá vystředěné vodoznaky, rohová razítka a štítky čísel stránek - Aktualizovány
TPdf.AboutInfo, metadata balíčku Lazarus a metadata verze instalátoru tak, aby uváděly 1.39.15
Version 1.39.14
- Bylo přidáno
Demo\Lazarus\WatermarkStamp, které přináší workflow znovupoužitelných vodoznaků a razítek Form XObject do Lazarusu - Ukázka pro Lazarus vytváří cílová i razítková PDF, znovu používá stránku razítka přes
CreateXObjectFromPage, aplikuje transformaceTPdfMatrixa ukládá vystředěné vodoznaky, rohová razítka a štítky čísel stránek - Aktualizovány
TPdf.AboutInfo, metadata balíčku Lazarus a metadata verze instalátoru tak, aby uváděly 1.39.14
Version 1.39.13
- Bylo přidáno
Demo\CBuilder\PreflightReport, čímž se uzavírá matice dem Delphi, Lazarus a C++Builder pro znovupoužitelný workflowFPdfPreflightReport - Ukázka C++Builderu používá
FPdfPreflightReport.hppk vytváření souhrnů standardů, náhledů TXT reportů, souborů TXT / HTML reportů a chování Open Last Report - Aktualizovány
TPdf.AboutInfo, metadata balíčku Lazarus a metadata verze instalátoru tak, aby uváděly 1.39.13
Version 1.39.12
- Bylo přidáno
Demo\Lazarus\PreflightReport, které přináší workflow preflight reportů PDF/A, PDF/UA, PDF/E, PDF/X, PDF/R a PDF/VT do Lazarusu - Ukázka pro Lazarus umí otevřít nebo vytvořit PDF, vybrat cílové standardy, zobrazit náhled souhrnných řádků a výstupu reportu TXT, uložit reporty TXT / HTML a otevřít naposledy uložený report
- Aktualizovány
TPdf.AboutInfo, metadata balíčku Lazarus a metadata verze instalátoru tak, aby uváděly 1.39.12
Version 1.39.11
Demo\Delphi\SearchAndSelectbylo rozšířeno o seznam výsledků hledání napříč všemi stránkami, který zaznamenává číslo stránky, index znaku a textový náhled- Byla přidána navigace Previous / Next mezi shodami a skok na výsledek dvojklikem při zachování stávajícího chování
HighlightSearchTextna aktuální stránce - Aktualizovány
TPdf.AboutInfo, metadata balíčku Lazarus a metadata verze instalátoru tak, aby uváděly 1.39.11
Version 1.39.10
Demo\Delphi\SecurityAuditbylo rozšířeno o akce Save Report a Copy Report, které exportují aktuální souhrn a řádky nálezů jako TXT audit report- Demo nyní při resetu auditního panelu čistí stav exportu reportu, takže zkopírované nebo uložené reporty zůstávají v souladu s viditelnými nálezy
- Aktualizovány
TPdf.AboutInfo, metadata balíčku Lazarus a metadata verze instalátoru tak, aby uváděly 1.39.10
Version 1.39.9
Demo\Delphi\ContentExtractionLabbylo rozšířeno o uložení zdrojového PDF, kopírování reportu do schránky a akce pro výběr všech / žádných kategorií- Demo nyní zneplatní aktuální report při změně výběru kategorií, takže exporty TXT / JSON odrážejí viditelný rozsah extrakce
- Aktualizovány
TPdf.AboutInfo, metadata balíčku Lazarus a metadata verze instalátoru tak, aby uváděly 1.39.9
Version 1.39.8
- Bylo přidáno
Demo\Delphi\ContentExtractionLab, sjednocená ukázka workflow extrakce obsahu pro metadata dokumentu, text stránky, page objecty, obrázky, přílohy, odkazy, anotace, záložky a metriky fontů / znaků - Ukázka umí otevřít existující PDF nebo vytvořit syntetické PDF s obsahem textu, obrázku, přílohy a anotace a poté vygenerovat souhrnné řádky a podrobné reporty TXT / JSON
- Aktualizovány
TPdf.AboutInfo, metadata balíčku Lazarus a metadata verze instalátoru tak, aby uváděly 1.39.8
Version 1.39.7
- Byl přidán
Lib\FPdfPreflightReport.pas, znovupoužitelný pomocník pro reporty, který balíValidatePdfA,ValidatePdfUa,ValidatePdfE,ValidatePdfX,ValidatePdfRaValidatePdfVTdo jediného objektuTPdfPreflightReport - Bylo přidáno
Demo\Delphi\PreflightReport, ukázka workflow, která otevře nebo vytvoří PDF, vybere cílové standardy, zobrazí náhled souhrnných řádků a doporučení k problémům a uloží reporty TXT nebo HTML - Generované reporty výslovně popisují hranici vestavěné validace na úrovni markerů, aby je aplikace mohly v případě potřeby spárovat se specializovanými nástroji pro preflight na úrovni obsahu
- Byly aktualizovány
TPdf.AboutInfo, metadata balíčku Lazarus, seznamy souborů projektů balíčků a metadata verze instalátoru tak, aby uváděly 1.39.7
Version 1.39.6
- Bylo přidáno
Demo\Delphi\SearchAndSelect, zaměřená ukázka workflow prohlížeče pro zvýraznění hledání, výběr textu, náhled vybraného textu, kopírování, vymazání a režimy zobrazení spread - Ukázka předvádí
HighlightSearchText, volby match-case / whole-word,AllowUserTextSelection,SelectedText,SelectAll,CopySelectionToClipboardaClearSelection, aniž by přidávala nové API knihovny - Aktualizovány
TPdf.AboutInfo, metadata balíčku Lazarus a metadata verze instalátoru tak, aby uváděly 1.39.6
Version 1.39.5
Demo\Delphi\ViewerInteractionLabbylo rozšířeno do ukázky viewer UX ve stylu SearchAndSelect sHighlightSearchText, volbami match-case / whole-word, náhledem vybraného textu a stávajícími ovládacími prvky výběru / schránkyDemo\Delphi\PrintDialogbylo rozšířeno tak, aby zkoumalo autorská tisková nastavení PDF:PrintCopies,PrintPageRanges,PrintScaling,PrintPaperHandlinga viditelné mapování duplexuSetPdfPrintPaperHandlingDevMode- Bylo přidáno
Demo\Delphi\SecurityAudit, ukázka read-only rizikové plochy, která vypisuje oprávnění, přílohy, JavaScript dokumentu, odkazy URI / Launch, web links, podpisy, stav XFA a dostupnost pomocníků V8 / XFA - Aktualizovány
TPdf.AboutInfo, metadata balíčku Lazarus a metadata verze instalátoru tak, aby uváděly 1.39.5
Version 1.39.4
- Byla přidána
Demo\CBuilder\ImageToPDFaDemo\Lazarus\ImageToPDF, čímž se uzavírá matice ukázek ImageToPDF pro Delphi, C++Builder a Lazarus - Nové ukázky předvádějí výběr více obrázků, náhled vybraného obrázku, jednu stránku PDF na obrázek, velikost stránky A4 na výšku / na šířku, vystředěné škálování obrázku, průběh po obrázcích a otevření vygenerovaného PDF po uložení
- Aktualizovány
TPdf.AboutInfo, metadata balíčku Lazarus a metadata verze instalátoru tak, aby uváděly 1.39.4
Version 1.39.3
- Bylo přidáno
Demo\CBuilder\BatchExport, které přináší workflow exportu více souborů PDF do JPG do C++Builderu vedle existujících ukázek Delphi a Lazarus - Ukázka předvádí
LoadCustomDocument,IPdfCancellationTokenSource, streamovaný vstupTFileStream, průběh po souborech a stránkách, obsluhu zrušení, vstupy DPI / quality / password a otevření výstupní složky po dokončení - Aktualizovány
TPdf.AboutInfo, metadata balíčku Lazarus a metadata verze instalátoru tak, aby uváděly 1.39.3
Version 1.39.2
- Bylo přidáno
Demo\Delphi\WatermarkStamp, spustitelná ukázka workflow Form XObject, která vytváří cílové PDF a znovupoužitelné razítkové PDF a poté aplikuje vystředěné vodoznaky, pravé horní razítko a štítky čísel stránek na všechny stránky - Ukázka předvádí
CreateXObjectFromPage,InsertFormObjectFromXObject,TPdfMatrixaFPDFPageObj_SetMatrix, aniž by přidávala nové API knihovny Docs\en-us\Examples.htmlbylo aktualizováno tak, aby používalo aktuální vzorTPdfMatrix.Handlepři předávání matic doFPDFPageObj_SetMatrix- Aktualizovány
TPdf.AboutInfo, metadata balíčku Lazarus a metadata verze instalátoru tak, aby uváděly 1.39.2
Version 1.39.1
- Bylo přidáno
Demo\Delphi\ViewerInteractionLab, zaměřená ukázkaTPdfViewpro display modes, fit modes, barvy stránek, rotaci, uživatelský výběr textu, akce schránky a zpětnou vazbu souřadnicDeviceToPage - Byla přidána
Demo\CBuilder\StandardsLab/Demo\Lazarus\StandardsLab, aby uživatelé Lazarusu mohli spouštět workflow validace a marker output pro PDF/A, PDF/UA, PDF/E, PDF/X, PDF/R a PDF/VT - Jednotky standardů byly zapsány do
Lib\37.0\PDFiumPas.dprojaLib\FPC\PDFiumLaz.lpka build dema DelphiSplitViewbyl opraven odstraněním duplicitního importuWinapi.ShellAPI - Byly odstraněny blokátory dávkového buildu dem Delphi v
BatchExport,PDFViewer,MultiPageVieweraSplitViewbez změny jejich runtime chování - Byla opravena kompatibilita dávkového buildu dem C++Builder v
PDFVieweraMultiPageViewernahrazenímnullptrzaNULLpro aktuální režim projektu - Aktualizovány
TPdf.AboutInfo, metadata balíčku Lazarus a metadata verze instalátoru tak, aby uváděly 1.39.1
Version 1.39.0
- Bylo přidáno
Demo\Delphi\StandardsLab, spustitelná ukázka workflow standardů, která načte nebo vytvoří PDF, spustíValidatePdfA,ValidatePdfUa,ValidatePdfE,ValidatePdfX,ValidatePdfRaValidatePdfVTa v jedné mřížce zobrazí zjištěnou konformitu, stav pass/fail a počty problémů - Tlačítka ukládání ve StandardsLab volají
SaveAsPdfA,SaveAsPdfUa,SaveAsPdfE,SaveAsPdfX,SaveAsPdfRaSaveAsPdfVT, takže je výstup markerů standardů PDF viditelný bez psaní vlastního harnessu - Aktualizovány
TPdf.AboutInfo, metadata balíčku Lazarus a metadata verze instalátoru tak, aby uváděly 1.39.0
Version 1.38.0
- Překryvy hledání a výběru textu v
TPdfViewnyní používají skutečné alpha blending místo malování logickou maskou, takže se pod zvýrazněním zachová obsah stránky - Byla přidána funkce
SetPdfPrintPaperHandlingDevMode, která mapujeTPrintPaperHandlingna hodnoty WindowsDEVMODE.dmDuplex:DMDUP_SIMPLEX,DMDUP_HORIZONTALaDMDUP_VERTICAL TPdfView.SmoothScrollnyní animuje příkazy line/page scrollbar v segmentech řízených časovačem; sledování thumb zůstává okamžité- Aktualizovány
TPdf.AboutInfoa metadata verze instalátoru tak, aby uváděly 1.38.0
Version 1.37.0
TPdfnyní vlastní render lock po instanci, který serializuje cestyRenderPage,RenderTile,RenderPageProgressive, reload stránky a unload dokumentu. Renderování řízené workery přes sdílenou komponentu je tak prakticky použitelné, zatímco koordinace mutací a životnosti dokumentu zůstává na aplikaci- Zero-copy obal bitmapy byl opraven tak, aby odmítal bottom-up rozložení DIB v
TBitmapa před kopírováním ven se vrátil k bufferu vlastněnému PDFium, čímž se odstranily chyby stride-corruption / access-violation ve VCL render testech - Chování výběru v
TPdfViewbylo zpřísněno:AllowUserTextSelectionřídí jen uživatelský vstup, API pro výběr z kódu dál kreslí, aSelectAllse řídí skutečně viditelným spreadem, takže cover page už nevybírá stránku 2. Testy Delphi, Lazarus a C++Builder byly odpovídajícím způsobem rozšířeny - Aktualizovány
TPdf.AboutInfoa metadata verze instalátoru tak, aby uváděly 1.37.0
Version 1.36.0
- Aktivována možnost uživatelského výběru textu v
TPdfView— vlastnostAllowUserTextSelection, vyhrazená ve v1.17.0, nyní řídí kompletní řetězec tažení pro výběr. Kliknutí levým tlačítkem na znak textu přepne do režimu výběru (hit-test auto); kliknutí levým tlačítkem na prázdnou oblast dál posouvá zobrazení jako dosud. Widget form-fill si zachovává přednost, takže kliknutí na pole formuláře stále aktivuje pole místo spuštění výběru - Dvojklik vybere slovo, trojitý klik vybere řádek,
Ctrl+Avybere aktuální stránku (obě stránky ve zobrazení na dvě stránky) aCtrl+Czkopíruje výběr do schránky Windows jakoCF_UNICODETEXT Shift+Left/Shift+Rightrozšiřuje výběr po jednom znaku (s přesahem na sousední stránku ve zobrazení na dvě stránky);Shift+Home/Shift+Endjej rozšiřuje k vizuálnímu okraji řádku a používá výšku rámečku počátečního znaku jako toleranci shlukování řádku, takže řádky s různou velikostí písma zůstávají správně seskupené- Přejetí nad textem změní kurzor na
crIBeam; přejetí mimo text vrátí výchozí kurzor. Během tažení výběru textu se při přesunu do 20pixelové mrtvé zóny u kteréhokoli okraje zobrazovací oblasti stránka automaticky posouvá (tick 50 ms, 16 px / tick, omezeno stejnými mezemi, jaké používá cesta posunu), takže výběr může pokračovat za aktuální zobrazený výřez i bez uvolnění myši - Výběr přes hranice stránek funguje v režimech zobrazení na dvě stránky (
dmTwoPageContinuous,dmTwoPageContinuousWithCover): tažení začaté na levé stránce a ukončené na pravé stránce vybere souvislý rozsah přes obě.SelectedTextspojuje úseky z jednotlivých stránek pomocí CR/LF, takže vrácený text se čte jako běžný vícerádkový obsah - Nová publikovaná vlastnost
SelectionColor(výchozíclHighlight, systémová barva výběru ve Windows) — nezávislá naHighlightColor, která barví výsledky hledání žlutě. Zvýraznění hledání i živý výběr tažením lze zobrazit současně bez barevného konfliktu - Nová publikovaná událost
OnSelectionChangese spouští pokaždé, když se skutečně změní materializované rozsahy výběru — nikdy při stejném opakovaném přiřazení, takže hostitelské aplikace ji mohou přímo napojit na text stavového řádku nebo stav povolení tlačítek bez potřeby odrušování opakovaných událostí - Nové veřejné API na
TPdfView:HasSelection,SelectionCharCount,SelectedText,ClearSelection,SelectAll,CopySelectionToClipboard. To jsou vstupní body na úrovni kódu a fungují vždy bez ohledu naAllowUserTextSelection— příznak omezuje jen uživatelský vstup (myš, Ctrl+C, Ctrl+A, Shift+arrows), takže kioskové hostitelské aplikace mohou vypnout výběr řízený uživatelem a přitom stále vytvářet tlačítka panelu nástrojů "Select All / Copy", která volají stejné API - Výchozí kontextová nabídka
Copy/复制po kliknutí pravým tlačítkem se automaticky připojí, když hostitel nepřiřadil vlastníPopupMenu— běžný postup "vybrat text, kliknout pravým tlačítkem, kopírovat" funguje ihned. Popisek se volí mezi angličtinou a čínštinou podleSysLocale.PriLangID; hostitelé, kteří potřebují plnou lokalizaci (nebo bohatší nabídku), jen přiřadí vlastníPopupMenua výchozí nabídka se potlačí - Výběr se automaticky zruší při
SetPdf,SetPageNumber,SetActive(False)a při přechodechDisplayMode, přičemžOnSelectionChangese spustí právě jednou, když byl předchozí výběr neprázdný. Podsystém form-fill si zachovává přednost — zatímco se upravuje pole formuláře, všechny klávesové zkratky pro výběr ustupují, aby pole dostaloCtrl+C/Ctrl+A/Shift+arrowspro vlastní výběr - Rozšířeny regresní sady Delphi a Lazarus na 202 případů každá a sada C++Builderu na 159 případů, pokrývající výchozí hodnoty, zpětné načtení, chování veřejného API, zrušení při změně stavu, tažení myší (hit-text / hit-blank), kliknutí proti tažení, přepínání kurzoru IBeam, dvojklik na slovo, trojitý klik na řádek, klávesové zkratky, výchozí připojení, potlačení a popisek kontextové nabídky a výběr přes hranice stránek ve zobrazení na dvě stránky — včetně kontroly přenosu CR/LF přes schránku
Version 1.35.0
- Byla přidána podpora vkládání markerů PDF/VT (ISO 16612-2:2010): TPdf.SaveAsPdfVT povyšuje aktuální dokument na soubor konformní s PDF/VT-1 nebo PDF/VT-2 (podmnožina PDF pro variabilní a transakční tisk). PDF/VT stojí na PDF/X-4 — ISO 16612-2 §6.2.1 vyžaduje, aby každý soubor PDF/VT-1 současně vyhovoval PDF/X-4 — takže injektor zapisuje celou sadu markerů PDF/X-4 (XMP
pdfxid:GTS_PDFXVersion = "PDF/X-4", Info/GTS_PDFXVersion (PDF/X-4)a/Trapped, katalogové/OutputIntentsodkazující na slovník OutputIntent s vloženým ICC profilem) spolu s vlastnostmi specifickými pro PDF/VT - Vkládání specifické pro PDF/VT pokrývá XMP
pdfvtid:GTS_PDFVTVersion(= "PDF/VT-1" nebo "PDF/VT-2" podle §6.3 Table 2) apdfvtid:GTS_PDFVTModDate(udržované v synchronizaci sxmp:ModifyDatepodle §6.3 NOTE 1), plus popis pdfaExtension:schemas deklarující jmenné prostory pdfxid i pdfvtid (URI NPEShttp://www.npes.org/pdfx/ns/id/ahttp://www.npes.org/pdfvt/ns/id/). Trailer nese pole/ID - Bylo přidáno TPdf.SaveAsPdfVTToStream pro výstup PDF/VT v paměti a zkratka s výchozími volbami
TPdf.SaveAsPdfVT(FileName), která vytváří PDF/VT-1 s přibaleným OutputIntent sRGB IEC61966-2.1 (3144 bytes, stejný profil jako SaveAsPdfA / SaveAsPdfX) a/Trapped /False - Bylo přidáno TPdf.ValidatePdfVT: kontroluje otevřené PDF na markery souladu s PDF/VT (přítomnost XMP
pdfvtid:GTS_PDFVTVersionaGTS_PDFVTModDate, shodu mezipdfvtid:GTS_PDFVTModDateaxmp:ModifyDate, přítomnost základního identifikátorupdfxid:GTS_PDFXVersion, přítomnost/DPartRootv katalogu podle §6.5,/OutputIntentss/DestOutputProfile, trailer /ID, stav šifrování a přítomnostxmp:CreateDate/ModifyDate) a vrací TPdfVTValidationResult se zjištěnou úrovní konformity a sadou nalezených problémů - Byla přidána vlastnost TPdf.PdfVTConformance: vrací úroveň konformity aktuálně otevřeného dokumentu (pvc1, pvc2, pvcNone nebo pvcUnknown), aniž by bylo nutné explicitně volat ValidatePdfVT
- V nové jednotce FPdfPdfvt byly exportovány nové typy: TPdfVTConformance (pvcUnknown/None/1/2), TPdfVTTrappedState (ptvUnspecified/True/False/Unknown), TPdfVTValidationResult, TPdfVTValidationIssue a TPdfVTSaveOptions
- Document Part Hierarchy (
DPartRoot/ stromDPartpodle §6.5) je struktura na aplikační úrovni, která závisí na mapování recipient / page-range ve workflow variabilního tisku. SaveAsPdfVT strom DPart NESYNTETIZUJE — ValidatePdfVT zveřejní chybějící/DPartRootjakopvviMissingDPartRoot, aby volající mohli směrovat soubory PDF/VT do samostatného kroku sestavení DPart. Požadavky PDF/X-4 na úrovni obsahu (vkládání fontů, průhlednost, správa barev ICC, zákazy OPI / JavaScript / Reference XObject atd.) zůstávají odpovědností autora dokumentu a renderovací pipeline PDFium - Řetězec TPdf.AboutInfo byl aktualizován tak, aby uváděl aktuální verzi produktu
Version 1.34.0
- Byla přidána podpora vkládání markerů PDF/R-1 (ISO 23504-1:2020): TPdf.SaveAsPdfR povyšuje aktuální dokument na soubor konformní s PDF/R-1 (podmnožina PDF pro přenos rastrových obrazů používaná u skenovaných dokumentů). Injektáž pokrývá požadavky na úrovni formátu souboru, které lze připojit následným zpracováním — jedinečný komentář identifikace verze
%PDF-raster-1.0zapsaný mezi trailer dictionary a klíčové slovo startxref (§5), katalogový slovník ořezaný na white list z §6.3 (zůstávají pouze Version / ViewerPreferences / PageLayout / PageMode / AcroForm / Metadata), Document Information Dictionary ořezaný na white list z §6.4.3 (pouze Creator / Producer / CreationDate / ModDate), XMP stream v /Metadata nesoucí čtyři položky z §6.4.4 Table 1 (xmp:CreatorTool / pdf:Producer / xmp:CreateDate / xmp:ModifyDate) a pole /ID v traileru - Bylo přidáno TPdf.SaveAsPdfRToStream pro výstup PDF/R v paměti a zkratka s výchozími volbami
TPdf.SaveAsPdfR(FileName)pro běžný případ - Bylo přidáno TPdf.ValidatePdfR: kontroluje otevřené PDF na markery souladu s PDF/R-1 (komentář v patičce
%PDF-raster-x.y, verzi hlavičky, nepřítomnost /Type /ObjStm, soulad katalogu s white listem, soulad Info dictionary s white listem, přítomnost XMP metadata streamu a trailer /ID) a vrací TPdfRValidationResult se zjištěnou úrovní konformity a sadou nalezených problémů - Byla přidána vlastnost TPdf.PdfRConformance: vrací úroveň konformity aktuálně otevřeného dokumentu (prc1, prcNone nebo prcUnknown), aniž by bylo nutné explicitně volat ValidatePdfR
- V nové jednotce FPdfPdfr byly exportovány nové typy: TPdfRConformance, TPdfRValidationResult, TPdfRValidationIssue a TPdfRSaveOptions.
TPdfRSaveOptions.Defaultnastavuje StripInfoOptionalEntries a StripCatalogOptionalEntries na True, takže injektor ve výchozím stavu vytváří katalog a Info dictionary vyhovující §6.3 / §6.4.3; volající je mohou nastavit na False, aby zachovali položky zdroje (výstup pak tyto klauzule PDF/R nesplní, ale ostatní markery zůstanou připojené) - Požadavky na úrovni obsahu zůstávají odpovědností zdrojového PDF: struktura Contents po stránkách (§6.5.1), tvar MediaBox
[0 0 w h](§6.5.3), omezení filtrů (§6.2.2 — pouze FlateDecode, bitonální CCITTFaxDecode a DCTDecode pro 8bit gray/RGB), nepřítomnost object streams (§6.2.4) a strip layout podle §6.6. To nelze vynutit post-processingem — PDF/R je strukturálně mnohem přísnější podmnožina než ostatní standardy PDF/x a vyžaduje správné generování zdrojových bajtů. ValidatePdfR zveřejňuje problémy formátu souboru, které tato jednotka umí zjistit; pro plné kontroly na úrovni obsahu jej spárujte s validátorem PDF/R od TWAIN Working Group - Řetězec TPdf.AboutInfo byl aktualizován tak, aby uváděl aktuální verzi produktu
Version 1.33.0
- Byla přidána podpora vkládání markerů PDF/X (rodina ISO 15930): TPdf.SaveAsPdfX povyšuje aktuální dokument na soubor konformní s PDF/X-1a:2001, PDF/X-3:2002 nebo PDF/X-4 post-processingem základního PDF pomocí inkrementální aktualizace. Injektáž pokrývá požadavky na úrovni formátu souboru, které lze připojit následným zpracováním — XMP metadata stream nesoucí
pdfxid:GTS_PDFXVersion(apdfxid:GTS_PDFXConformancepro PDF/X-1a / PDF/X-3) plus odpovídající popis pdfaExtension:schemas, přepsaný Document Information Dictionary s položkami/GTS_PDFXVersion,/GTS_PDFXConformancea/Trapped, aktualizovaný katalog s/OutputIntents [N 0 R]odkazující na slovník OutputIntent s/S /GTS_PDFXa vloženým ICC profilem a pole/IDv traileru - Bylo přidáno TPdf.SaveAsPdfXToStream pro výstup PDF/X v paměti a zkratka s výchozími volbami
TPdf.SaveAsPdfX(FileName), která vytváří PDF/X-4 s vestavěným OutputIntent sRGB IEC61966-2.1 (3144 bytes, totožný profil jako v SaveAsPdfA) - Bylo přidáno TPdf.ValidatePdfX: kontroluje otevřené PDF na markery souladu s PDF/X (identifikátor XMP pdfxid a jeho shodu s hodnotou v Info dictionary, popis rozšiřujícího schématu pdfxid, pole /OutputIntents s /DestOutputProfile, přítomnost Title, trailer /ID, stav šifrování a přítomnost xmp:CreateDate / xmp:ModifyDate) a vrací TPdfXValidationResult se zjištěnou úrovní a sadou nalezených problémů
- Byla přidána vlastnost TPdf.PdfXConformance: vrací úroveň konformity aktuálně otevřeného dokumentu (pxc1a, pxc3, pxc4, pxcNone nebo pxcUnknown), aniž by bylo nutné explicitně volat ValidatePdfX. Řetězec verze v XMP se parsuje, aby bylo možné rozlišit tři úrovně konformity
- V nové jednotce FPdfPdfx byly exportovány nové typy: TPdfXConformance (pxcUnknown/None/1a/3/4), TPdfXTrappedState (ptUnspecified/True/False/Unknown), TPdfXValidationResult, TPdfXValidationIssue a TPdfXSaveOptions.
TPdfXSaveOptions.Defaultcílí na PDF/X-4 se sRGB OutputIntent a/Trapped /False; volající mohou přepsatConformance, dodat blobIccProfileDatas CMYK profilem pro komerční tisk nebo změnitOutputCondition/OutputConditionIdentifier/RegistryNametak, aby ukazovaly na konkrétní položku registru charakterizace ICC (například FOGRA39 nebo GRACoL2006_Coated1v2) - Požadavky na úrovni obsahu (všechny fonty vložené, žádný JavaScript, žádné viditelné anotace, zákaz OPI, pravidla průhlednosti pro PDF/X-1a / PDF/X-3 atd.) zůstávají odpovědností autora dokumentu a renderovací pipeline PDFium. Pro úplné ověření konformity spárujte ValidatePdfX s preflight nástrojem, jako je callas pdfaPilot nebo Ghent PDF Workgroup Output Suite
- Řetězec TPdf.AboutInfo byl aktualizován tak, aby uváděl aktuální verzi produktu
Version 1.32.0
- Byla přidána podpora vkládání markerů PDF/E-1 (ISO 24517-1:2008): TPdf.SaveAsPdfE povyšuje aktuální dokument na soubor konformní s PDF/E-1 post-processingem základního PDF pomocí inkrementální aktualizace. Injektáž pokrývá požadavky na úrovni formátu souboru, které lze připojit následným zpracováním — XMP metadata stream nesoucí
pdfe:ISO_PDFEVersion = "PDF/E-1"plus odpovídající popis pdfaExtension:schemas, přepsaný Document Information Dictionary s povinnou položkou/ISO_PDFEVersion (PDF/E-1)vyžadovanou §5, bloky propojení Info-XMP zděděné z ISO 19005-1 §6.7 přes §13.1 (dc:title / dc:creator / dc:description / pdf:Producer / pdf:Keywords / xmp:CreateDate / xmp:ModifyDate / xmp:MetadataDate / xmp:CreatorTool) a pole/IDv traileru požadované §6.2 - Bylo přidáno TPdf.SaveAsPdfEToStream pro výstup PDF/E v paměti a zkratka s výchozími volbami
TPdf.SaveAsPdfE(FileName)pro běžný případ - Bylo přidáno TPdf.ValidatePdfE: kontroluje otevřené PDF na markery souladu s PDF/E-1 (přítomnost XMP pdfe:ISO_PDFEVersion a její shodu s hodnotou v Info dictionary, popis schématu pdfe extension, položku /ISO_PDFEVersion v Info dictionary, trailer /ID a přítomnost xmp:CreateDate / xmp:ModifyDate) a vrací strukturovaný výsledek se zjištěnou úrovní konformity a sadou nalezených problémů
- Byla přidána vlastnost TPdf.PdfEConformance: vrací úroveň konformity aktuálně otevřeného dokumentu (pec1, pecNone nebo pecUnknown), aniž by bylo nutné explicitně volat ValidatePdfE
- V nové jednotce FPdfPdfe byly exportovány nové typy: TPdfEConformance, TPdfEValidationResult, TPdfEValidationIssue a TPdfESaveOptions
- Přepis Info dictionary je pro cestu PDF/x post-processing v PDFiumPas první svého druhu — přepisuje existující objekt Info se stejným číslem objektu (takže podsekce xref i odkaz /Info v traileru zůstávají platné) a vytváří novou Info dictionary, když trailer zdroje žádnou položku /Info nemá. Samotné PDFium emituje Info dictionary v každém výstupu SaveAs, takže běžným případem je cesta přepisu
- Požadavky na úrovni obsahu (vkládání fontů, CMap ToUnicode, zakázané klíče XObjects / ExtGState / formuláře XFA atd.) zůstávají odpovědností autora dokumentu — SaveAsPdfE připojuje markery formátu souboru, ale nemění obsah stránek ani neodstraňuje zakázané prvky
- Řetězec TPdf.AboutInfo byl aktualizován tak, aby uváděl aktuální verzi produktu
Version 1.31.0
- Byla přidána podpora vkládání markerů PDF/UA-1 (ISO 14289-1:2014): TPdf.SaveAsPdfUa povyšuje aktuální dokument na soubor konformní s PDF/UA-1 post-processingem základního PDF pomocí inkrementální aktualizace. Injektáž pokrývá požadavky na úrovni formátu souboru, které lze vynutit následným zpracováním — XMP metadata stream nesoucí
pdfuaid:part = 1plus odpovídající popis pdfaExtension:schemas, povinnédc:title, katalogové/MarkInfo << /Marked true /Suspects false >>a/ViewerPreferences << /DisplayDocTitle true >>(jen pokud je zdroj vůbec nemá), katalogové/Lang(když volající dodá tag BCP 47) a pole/IDv traileru - Bylo přidáno TPdf.SaveAsPdfUaToStream pro výstup PDF/UA v paměti a zkratka s výchozími volbami
TPdf.SaveAsPdfUa(FileName)pro běžný případ - Bylo přidáno TPdf.ValidatePdfUa: kontroluje otevřené PDF na markery souladu s PDF/UA-1 (existenci StructTreeRoot, /Lang, /MarkInfo /Marked true s /Suspects = false, /ViewerPreferences /DisplayDocTitle true, identifikátor XMP pdfuaid:part, přítomnost dc:title, trailer /ID a stav šifrování) a vrací strukturovaný výsledek se zjištěnou úrovní konformity a sadou nalezených problémů
- Byla přidána vlastnost TPdf.PdfUaConformance: vrací úroveň konformity aktuálně otevřeného dokumentu (puc1, pucNone nebo pucUnknown), aniž by bylo nutné explicitně volat ValidatePdfUa
- V nové jednotce FPdfPdfua byly exportovány nové typy: TPdfUaConformance, TPdfUaValidationResult, TPdfUaValidationIssue a TPdfUaSaveOptions
- Pole Title / Author / Subject / Keywords / Creator / Producer / CreationDate / ModDate / DocumentId / InstanceId ponechaná v TPdfUaSaveOptions prázdná se automaticky doplňují z FPDF_GetMetaText / FPDF_GetFileIdentifier / FPDFCatalog_GetLanguage, takže stávající volající mohou ukládat jediným řádkem
- Požadavky na úrovni obsahu (úplnost tagování StructTreeRoot, alternativní text Figure, CMap ToUnicode, vkládání fontů atd.) zůstávají odpovědností autora dokumentu — SaveAsPdfUa připojuje markery formátu souboru, ale nemění obsah stránek ani nevymýšlí tagy. ValidatePdfUa zveřejňuje chybějící StructTreeRoot jako
pvuaiMissingStructTreeRoot, aby volající mohli netagované dokumenty směrovat do samostatné tagovací pipeline - Řetězec TPdf.AboutInfo byl aktualizován tak, aby uváděl aktuální verzi produktu
Version 1.30.0
- Výstup PDF/A-1b nyní splňuje požadavky ISO 19005-1 (s Cor.1:2007) na ekvivalenci Document Information Dictionary / XMP: každá položka Info dictionary, kterou PDFium zapisuje do základního PDF, se zrcadlí i do balíčku XMP, včetně Title (dc:title), Author (dc:creator), Subject (dc:description podle Cor.1), Keywords (pdf:Keywords), Creator (xmp:CreatorTool), Producer (pdf:Producer), CreationDate (xmp:CreateDate) a ModDate (xmp:ModifyDate). Emituje se i xmp:MetadataDate
- Trailer dokumentu PDF/A nyní vždy obsahuje pole /ID (tvrdý požadavek ISO 19005-1 6.1.3). Když TPdf.SaveAsPdfA zpracovává dokument, jehož zdroj už identifikátor souboru má, znovu se použijí existující 16byte permanent a changing ID; jinak se ze zdrojových bajtů odvodí deterministické náhradní 16byte ID
- Vložené XMP nyní obsahuje popis rozšiřujícího schématu pdfaid vyžadovaný ISO 19005-1 6.7.8 (nahrazený Cor.1) — pdfaid se vzhledem k XMP Specification 2004 považuje za extension schema, takže všechny konformní soubory musí deklarovat jeho názvy vlastností, typy hodnot a kategorie v kontejneru pdfaExtension:schemas
- TPdfASaveOptions získal pět nových volitelných polí: Producer, CreationDate, ModDate (řetězce data PDF ve tvaru “D:YYYYMMDDHHmmSSOHH'mm'”), DocumentId a InstanceId (16byte řetězce bajtů pro pole /ID v traileru). TPdf.SaveAsPdfA / SaveAsPdfAToStream automaticky doplňují chybějící pole z FPDF_GetMetaText a FPDF_GetFileIdentifier, takže stávající volající fungují bez změn
- TPdf.ValidatePdfA / TPdf.PdfAConformance nyní hlásí tři další problémy: pvaiMissingTrailerId (v traileru chybí /ID), pvaiMissingXmpDates (chybí xmp:CreateDate nebo xmp:ModifyDate) a pvaiMissingExtensionSchema (chybí popis rozšiřujícího schématu pdfaid)
- Znaky mimo ASCII v Title, Author, Subject, Keywords, Creator a Producer se nyní v balíčku XMP kódují jako UTF-8 (XMP Specification UTF-8 vyžaduje), takže se při round-tripu přes SaveAsPdfA zachovávají vícejazyčná metadata
- Řetězec TPdf.AboutInfo byl aktualizován tak, aby uváděl aktuální verzi produktu
Version 1.29.0
- Přibalené DLL PDFium (Win32 a Win64, standardní i V8 sestavení) byly obnoveny na upstream snapshot z 2026-05-22, který přináší upstream opravy pádových cest FPDFText_SetText / FPDFText_SetCharcodes a další interní zpevnění z projektu PDFium
- Ve FPdfPageOps.pas byl zpřístupněn nový save flag FPDF_SUBSET_NEW_FONTS z PDFium, takže volající FPDF_SaveAsCopy mohou požádat o automatické subsetování vložených fontových souborů pro nově přidané textové objekty. Stávající konstanty FPDF_INCREMENTAL, FPDF_NO_INCREMENTAL a FPDF_REMOVE_SECURITY jsou nyní definovány pomocí upstream podoby bit-shift (historická číselná hodnota 3 zůstává zachována jako FPDF_REMOVE_SECURITY_DEPRECATED kvůli binární kompatibilitě)
- Byl přidán enum FPDF_FONT_BACKEND_TYPE (FREETYPE / FONTATIONS) a odpovídající pole m_FontLibraryType v FPDF_LIBRARY_CONFIG ve FPdfView.pas, takže aplikace inicializující PDFium se Skia rendererem mohou nyní při startu vybrat backend fontů
- Signatura TFPDFPage_InsertObject byla upravena tak, aby odpovídala upstreamu: funkce v C nyní vrací FPDF_BOOL (TRUE při úspěchu, FALSE pokud je page_object NULL nebo selže předání vlastnictví) místo typu void. Stávající volající PDFiumPas se kompilují beze změny, protože Delphi / FPC dovolují návratovou hodnotu funkce ignorovat
- Řetězec TPdf.AboutInfo byl opraven tak, aby uváděl aktuální verzi produktu (od dokumentační-only verze v1.28.0 byl zastaralý na v1.27.0)
Version 1.28.0
- Vnitrostránková dokumentace v celém API reference byla výrazně rozšířena: každá položka property, method, event a global function nyní obsahuje tříodstavcový Description, seznam Remarks, víceřádkový příklad v Delphi a bohatší blok See Also — pokrývá 200+ dříve stručných stránek včetně všech čítačů TPdf, getterů metadat, accessorů fontů a znaků, vlastností na úrovni stránky, indexovaných záznamů, metod na úrovni dokumentu a celého povrchu stavů / zobrazení / událostí TPdfView
- Rozložení nápovědy bylo doladěno podle vizuálního základu losLab použitého v referenci HotXLS: byly sladěny velikosti h1/h2, styly navigační mřížky API byly sjednoceny do sdíleného StyleSheet a z Navigation.html byly odstraněny per-page inline CSS overrides
- Součástí dokumentace je nyní pomocný skript (Docs\Build-Expand-Entries.ps1), který z jediné datové tabulky znovu generuje enrichování entry pages pro opakovatelnou údržbu
Version 1.27.0
- Byla přidána podpora vytváření PDF/A-1b: TPdf.SaveAsPdfA ukládá jakýkoli otevřený dokument jako soubor konformní s PDF/A-1b post-processingem základního PDF pomocí inkrementální aktualizace, která vloží XMP metadata stream, sRGB ICC OutputIntent a aktualizovaný katalog dokumentu — to vše bez potřeby dalších DLL API. Funguje na všech platformách podporovaných PDFiumPas
- Bylo přidáno TPdf.SaveAsPdfAToStream pro výstup PDF/A v paměti
- Bylo přidáno TPdf.ValidatePdfA: kontroluje otevřené PDF na soulad s PDF/A (markery XMP pdfaid, OutputIntent s vloženým ICC profilem, šifrování) a vrací strukturovaný výsledek se zjištěnou úrovní konformity a sadou konkrétních nalezených problémů
- Byla přidána vlastnost TPdf.PdfAConformance: vrací úroveň konformity aktuálně otevřeného dokumentu (pac1b, pac1a, pac2b, pac3b, pacNone nebo pacUnknown), aniž by bylo nutné explicitně volat ValidatePdfA
- Byly exportovány nové typy: TPdfAConformance, TPdfAValidationResult, TPdfAValidationIssue a TPdfASaveOptions (v nové jednotce FPdfPdfa.pas)
- SaveAsPdfA podporuje vlastní ICC profil přes TPdfASaveOptions.IccProfileData; pokud zůstane prázdné, automaticky se použije vestavěný profil sRGB IEC61966-2.1 (HP/Microsoft, 3144 bytes)
- Monolitický HTML reference byl nahrazen přestrukturovaným webovým help systémem: 302 samostatných API entry pages (jedna pro každou property, method, event a global function) pokrývajících TPdf i TPdfView, každá s úplným popisem, tabulkou parametrů, příkladem kódu v Delphi a odkazy See Also
- Byl přidán Navigation.html: ucelený jednostránkový navigační index API uspořádaný do šesti sekcí (properties/methods/events pro TPdf, properties/methods/events pro TPdfView, global functions) s 5sloupcovou flex mřížkou pro rychlé procházení
- TPdf.html a TPdfView.html byly přebudovány jako kompaktní overview pages komponent, které zachovávají sekce odkazů na typy (Types, Constants, Global Variables) a odkazují na jednotlivé entry pages pro všechny členy
- Bylo přidáno full-text search poháněné Search.js s inkrementálním klientským párováním napříč všemi 312 indexovanými stránkami
- Všechny navigační lišty v celém webu byly aktualizovány tak, aby ukazovaly na Navigation.html
Version 1.26.0
- Bylo přidáno Demo/Lazarus/BatchExport, LCL port dema Delphi BatchExport z verze v1.14.0. Stejná sada funkcí: export více souborů PDF do JPG s celkovým průběhem po souborech, aktuálním průběhem po stránkách, vstupy DPI / quality / password a kooperativně rušitelnou dávkou postavenou na IPdfCancellationToken. Po úspěšném dokončení extrakce se výstupní složka otevře ve správci souborů platformy
Version 1.25.0
- Do TPdf bylo přidáno znovupoužití stránek Form XObject, které umožňuje workflow vodoznaků, překryvů šablon a scénářů “otiskni jednu stránku na mnoho dalších”: CreateXObjectFromPage vytvoří z libovolné stránky jiného dokumentu znovupoužitelný handle a InsertFormObjectFromXObject vloží JEDNU kopii zabalené stránky do aktuální stránky. Vrací vložený FPDF_PAGEOBJECT, takže jej volající může umístit / škálovat / otočit pomocí FPDFPageObj_SetMatrix a helperů TPdfMatrix z verze v1.9.0
- Nová třída Pascalu TPdfXObject obaluje handle FPDF_XOBJECT z PDFium a v destruktoru jej automaticky zavírá, takže odpadá ruční obřad FPDF_CloseXObject
- Regresní sady Delphi a Lazarus byly rozšířeny na 147 případů každá a sada C++Builder na 123 případů, s pokrytím kontraktů vytváření handle a vkládání page objectů
Version 1.24.0
- Bylo přidáno TPdf.RenderPageProgressive — rušitelná varianta RenderPage, která řídí progresivní renderovací smyčku PDFium a mezi iteracemi dotazuje IPdfCancellationToken z verze v1.7.0, takže dlouhé rendery s vysokým DPI lze přerušit uprostřed stránky místo blokování volajícího až do dokončení
- Vrací hodnotu TPdfProgressiveStatus: prsDone, prsCancelled nebo prsFailed. Při předání AToken = nil se renderuje až do konce bez jakéhokoli pozastavení (bez možnosti prsCancelled)
- Používá stejnou zero-copy rychlou cestu zavedenou ve verzi v1.21.0 — PDFium renderuje přímo do DIB cílového TBitmap. Stejný starší fallback se použije, pokud DIB nelze obalit
- Regresní sady Delphi a Lazarus byly rozšířeny na 145 případů každá a sada C++Builder na 121 případů, s pokrytím nil-token (dokončí se), předem zrušeného tokenu (prsCancelled) a ekvivalence pixelů se synchronním RenderPage při živém tokenu
Version 1.23.0
- Přidáno šest nových metod TPdfView, které aplikacím zpřístupňují výběr textu a Undo / Redo ve formulářových widgech PDFium: GetSelectedFormText vrací aktuálně vybraný text ve fokusovaném formulářovém widgetu; SelectAllFormText vybere každý znak; FormUndo / FormRedo / FormCanUndo / FormCanRedo řídí historii úprav fokusovaného widgetu. Podkladová PDFium API už byla navázána, ale neměla vysokou úrověň vstupu. Všech šest metod se bezpečně ukončí, když je prohlížeč neaktivní nebo dokument nemá fokusovaný widget AcroForm
- Regresní sady Delphi a Lazarus byly rozšířeny na 142 případů každá a sada C++Builder na 119 případů, s pokrytím kontraktu no-form-no-focus pro každou novou metodu
Version 1.22.0
- Přidány obaly pro skládání stránek do TPdf: ImportPagesByIndex bere pole indexů od nuly a kopíruje konkrétní stránky ze zdrojového dokumentu; ImportNPagesToOne vrací zcela nový TPdf, jehož stránky jsou kompozity N-up tohoto dokumentu; MovePages přeuspořádá stránky na místě. Podkladová PDFium API už byla navázána, ale neměla pascalovský vstupní bod
- ImportPagesByIndex přijímá prázdné pole pro import všech zdrojových stránek (ekvivalent předání nil na úrovni C ABI)
- Regresní sady Delphi a Lazarus byly rozšířeny na 136 případů každá a sada C++Builder na 115 případů, s pokrytím importu podmnožiny, importu celého dokumentu, přeuspořádání stránek a kompozice N-up
Version 1.21.0
- Výkon renderování byl zlepšen přepnutím TPdf.RenderPage / TPdf.RenderTile (a odpovídajících helperů TPdfView) na zero-copy výstupní cestu. PDFium nyní zapisuje přímo do DIB bufferu cílového TBitmap místo do interního bufferu, který se pak po řádcích kopíroval, čímž se při každém renderu ušetří jedna kopie paměti o velikosti width x height x 4 bytes. Zlepšení je nejvýraznější při vysokém DPI (panely náhledů, export v tiskové kvalitě, dávkový export)
- Původní cesta po jednotlivých scanline zůstává jako bezpečnostní fallback pro nepravděpodobný případ, kdy cílový DIB nelze obalit (extrémní rozměry, neobvyklý stride, OOM). Chování je mezi oběma cestami bajtově shodné, jen je fallback pomalejší
- Regresní sady Delphi a Lazarus byly rozšířeny na 132 případů každá a sada C++Builder na 112 případů, s pokrytím přepnutí caller-bitmap na pf32bit, round-tripu rozměrů a sanity testu stride u velké bitmapy
Version 1.20.0
- Do TPdfView bylo přidáno zvýraznění výsledků hledání: HighlightSearchText(Text, MatchCase, MatchWholeWord) prohledá aktuální stránku v prohlížeči a vrátí počet nalezených shod, přičemž při každém překreslení nad každou shodu vykreslí masku HighlightColor. ClearHighlight zvýraznění odstraní; přepnutí prohlížeče na jinou stránku je maže automaticky, protože shody jsou specifické pro stránku
- HighlightColor má výchozí hodnotu clYellow a je publikovaná, takže aplikace mohou barvu zvýraznění přizpůsobit své paletě UI
- Regresní sady Delphi a Lazarus byly rozšířeny na 129 případů každá a sada C++Builder na 109 případů, s pokrytím výchozí barvy, round-tripu barvy, “skutečných shod slov ve fixture” proti řetězci sample.pdf a kontraktu “chybějící slovo vrátí nula shod”
Version 1.19.0
- Do TPdfView byla přidána vlastnost FitMode se čtyřmi hodnotami: pfmNone (ruční zoom), pfmActualSize (100%), pfmFitPage (celá stránka se vejde do viewportu) a pfmFitWidth (šířka stránky odpovídá šířce viewportu). Aktivní režim přizpůsobení se automaticky znovu aplikuje při Resize a při změně aktuální stránky, takže dlouhé dokumenty se smíšenými velikostmi stránek zůstávají perfektně zarámované
- Přímé nastavení Zoom ruší aktivní režim přizpůsobení (FitMode se vrací na pfmNone), což odpovídá standardní konvenci PDF prohlížečů, kdy ruční zadání zoomu opouští Fit Page / Fit Width
- Výchozí hodnota je pfmNone, takže stávající aplikace si zachovávají své chování s explicitním zoomem
- Regresní sady Delphi a Lazarus byly rozšířeny na 124 případů každá a sada C++Builder na 106 případů, s pokrytím výchozí hodnoty, round-tripu režimu, reálného zoomu při fit-page na načteném dokumentu a stavu manual-zoom-cancels-fit-mode
Version 1.18.0
- Do TPdfView byla přidána vlastnost PageColor, která odděluje pozadí vykreslené stránky PDF od okolní vlastnosti Color ovládacího prvku. Výchozí hodnota je clWhite, takže stránky PDF se nyní vykreslují jako papírově bílé bez ohledu na téma hostitelské aplikace. Prohlížeče v dark mode tak mohou ponechat tmavou oblast posuvu a skutečnou stránku PDF nechat bílou (nebo v jakékoli barvě, kterou aplikace zvolí)
- Změna chování: aplikace, které dříve nastavovaly TPdfView.Color kvůli přebarvení stránky PDF, by nyní měly nastavovat PageColor. Výchozí uživatelský zážitek se pro běžný případ zlepšuje (bílé stránky na tematickém pozadí ovládacího prvku) bez jakékoli změny kódu
- Regresní sady Delphi a Lazarus byly rozšířeny na 120 případů každá a sada C++Builder na 103 případů, s pokrytím výchozí hodnoty a round-tripu barvy
Version 1.17.0
- Do TPdfView byly přidány přepínače pro uzamčení uživatelského vstupu, aby aplikace v kioscích, náhledových panelech nebo read-only kontextech mohly bez dědění zakázat navigační gesta: AllowUserPageChange řídí nové klávesové zkratky PgUp / PgDn / Ctrl+Home / Ctrl+End; ChangePageOnMouseScrolling řídí nové skoky mezi stránkami kolečkem nahoru / dolů; AllowUserTextSelection je vyhrazen pro budoucí cestu výběru textu tažením myši. Všechny tři mají výchozí hodnotu True, takže stávající aplikace po upgradu nemění chování
- Navigace stránkami kolečkem myši přeskočí Ctrl+wheel, aby si aplikace mohly Ctrl+wheel ponechat pro zoom
- Regresní sady Delphi a Lazarus byly rozšířeny na 118 případů každá a sada C++Builder na 101 případů, s pokrytím výchozích hodnot a round-tripu přepínačů
Version 1.16.2
- Pokrytí regresí v TPdfView bylo rozšířeno o klikání na odkazy anotací v situaci, kdy stránka v prohlížeči neodpovídá přidružené stránce v TPdf, s použitím skutečné cesty headless kliknutí myší v Delphi, Lazarus i C++Builderu
- Sady Delphi a Lazarus nyní běží s 114 případy každá a C++Builder nyní běží s 99 případy
Version 1.16.1
- Obsluha kliknutí na odkazy v TPdfView byla opravena tak, aby automatické akce anotací a web linků používaly stránku aktuálně zobrazenou v prohlížeči, i když je přidružená komponenta TPdf zaparkovaná na jiné stránce
- TPdfThumbnailView byl zpevněn proti visícím odkazům Pdf, když je zničena připojená komponenta TPdf
- Bylo přidáno regresní pokrytí životnosti thumbnail references; sady Delphi a Lazarus nyní běží se 113 případy každá a C++Builder nyní s 98 případy
- README, testovací dokumentace, obsah HTML Help search/index a vygenerované výstupy balíčků C++ byly synchronizovány s integračními aktualizacemi verze v1.7.0 až v1.16.0
Version 1.16.0
- Přidána nová ukázka Delphi PrintDialog (Demo/Delphi/PrintDialog), která se zaměřuje na N-up tisk (1 / 2 / 4 / 9 stránek na list) s filtrováním lichých / sudých stránek, vykreslováním do odstínů šedi a volitelnými 1pixelovými okraji buněk. Jde o záměrně malý doplněk k existující ukázce PrintPDF, která už pokrývá náhled, nedávné soubory, zoom a škálování
Version 1.15.0
- Přidána nová komponenta TPdfThumbnailView (jednotka FPdfThumbnail), která vykresluje jednu miniaturu stránky na řádek v posuvném bočním panelu se zvýrazněním při najetí a výběru i navigací kliknutím. Je navržena tak, aby seděla vedle TPdfView, takže koncoví uživatelé mohou procházet dlouhý dokument po stránkách
- Komponenta je registrována na kartě palety losLab vedle TPdf a TPdfView; klíčové vlastnosti: Pdf, CurrentPageIndex, ThumbnailWidth, ThumbnailHeight, TextColor, HoverColor, SelectionColor, BorderColor a událost OnPageClick
- Regresní sady Delphi a Lazarus byly rozšířeny na 112 případů každá a sada C++Builder na 97 případů, s pokrytím výchozích hodnot, round-tripu velikosti náhledů, ořezání extrémních hodnot, round-tripu barev a přiřazení handleru události
Version 1.14.0
- Přidána nová ukázka Delphi BatchExport (Demo/Delphi/BatchExport), která ukazuje, jak převést mnoho PDF souborů na JPG v jednom průchodu pomocí TPdf.LoadCustomDocument pro streamované načítání, IPdfCancellationToken pro kooperativní zrušení a celkové i stránkové progress bary. Ukázka používá jednu instanci TPdf na soubor (PDFium samo o sobě není thread safe) a po úspěšném dokončení otevře výstupní složku v Průzkumníku
Version 1.13.0
- Přidán uživatelský překryv pro asynchronní vykreslování v TPdfView prostřednictvím tří nových vlastností: AsyncRendering, LoadingText a LoadingColor. Když je AsyncRendering True, jednoprůchodové vykreslení kreslí přes vykreslenou stránku malý indikátor “Loading...”, takže aplikace používající vlastní pracovník pro dlouhé rendery sdílejí konzistentní vizuální signál
- Výchozí nastavení zachovává stávající chování: AsyncRendering je False, takže aplikace, které se nepřihlásí, neuvidí žádnou vizuální změnu
- Dokumentace upřesňuje, že samotné PDFium není thread safe — skutečné přesunutí renderu do workeru vyžaduje, aby měl volající jeden TPdf na worker; nadcházející demo batch-exportu tento vzor ukazuje
- Regresní sady Delphi a Lazarus byly rozšířeny na 106 případů každá a sada C++Builder na 93 případů, s pokrytím výchozích hodnot a round-tripu tří vlastností
Version 1.12.0
- Přidáno zpracování odkazů řízené kliknutím do TPdfView. Nová vlastnost LinkOptions řídí automatické chování pro čtyři typy akcí PDF odkazu: goto (skok na stránku), URI (ShellExecute), launch (ShellExecute) a embedded GotoR (rezervováno). Výchozí hodnoty zapínají loAutoGoto a loAutoOpenURI; loAutoLaunch a loAutoEmbeddedGoto zůstávají vypnuté, aby náhodné kliknutí nemohlo spustit libovolný program
- Byly přidány události OnAnnotationLinkClick a OnWebLinkClick, které se spouštějí před jakoukoli automatickou akcí a umožňují aplikacím odkaz prozkoumat, označit jej jako Handled nebo jej přesměrovat (například na bezpečnostní potvrzení)
- Detekce kliknutí na odkaz se spouští jen tehdy, když je gesto kliknutím a ne tažením, pomocí čerstvé kotvy MouseDown, takže gesta panningu dál procházejí stávající cestou posuvu beze změny
- Regresní sady Delphi a Lazarus byly rozšířeny na 102 případů každá a sada C++Builder na 91 případů, s pokrytím výchozích LinkOptions, round-tripu nastavení a přiřazení handleru události
Version 1.11.0
- Přidány vizuální úpravy TPdfView: vlastnosti PageShadowSize, PageShadowColor a PageBorderColor kreslí volitelný stín pod obdélník stránky a jednopixelový okraj kolem něj. Výchozí hodnoty zachovávají dosavadní plochý vzhled (PageShadowSize = 0; okraj se kreslí ve výchozím clBlack, ale na výchozím bílém pozadí splývá, dokud volající nezmění barvy)
- Byla přidána vlastnost SmoothScroll jako opt-in přepínač pro budoucí inkrementální animaci posuvu; dnes se správně round-trippuje a je zapojená tak, aby si aplikace mohly volbu ukládat, zatímco vykreslovací strana stále používá stávající okamžité chování posuvu
- Regresní sady Delphi a Lazarus byly rozšířeny na 98 případů každá a sada C++Builder na 89 případů, s pokrytím výchozích hodnot, round-tripu vlastnosti a omezení záporné velikosti stínu
Version 1.10.0
- Přidáno přímé vkládání obrázků přes nová přetížení TPdf.AddImage a TPdfView.AddImage, která berou buď cestu k souboru, nebo TBitmap, navíc k existujícímu AddPicture založenému na TPicture. AddImage(FileName) rozpozná jakýkoli formát registrovaný v grafických jednotkách VCL nebo LCL (BMP, PNG přes jednotku PngImage, JPG atd.) a používá stejnou cestu jako AddPicture, takže chování je shodné
- AddImage(TBitmap) přeskočí prostředníka TPicture, což zjednodušuje volající, kteří už mají TBitmap z renderování nebo dávkového generování
- Regresní sady Delphi a Lazarus byly rozšířeny na 92 případů každá a sada C++Builder na 84 případů, s pokrytím vložení bitmapy, hranic page objectu, odmítnutí nil bitmapy a načítání souboru BMP
Version 1.9.0
- Byla přidána podpora transformačních matic na vyšší úrovni prostřednictvím nové třídy TPdfMatrix v jednotce FPdfMatrix. TPdfMatrix obaluje FS_MATRIX z PDFium objektovým API pro Translate, Scale, Rotate, HorizontalFlip, VerticalFlip, CentralFlip, Skew a Multiply, vhodným pro skládání transformací před jejich předáním do FPDFPageObj_SetMatrix a podobných PDFium API
- TPdfMatrix.Multiply nyní správně snímá všech šest prvků matice před výpočtem nových hodnot řádků, čímž opravuje skrytý problém, kdy alternativní implementace v Pascalu během téhož volání přepisovaly dřívější prvky a vytvářely nesprávné výsledky pro jakoukoli kompozici složitější než čistý posun
- Regresní sady Delphi a Lazarus byly rozšířeny na 88 případů každá a sada C++Builder na 81 případů, s pokrytím identity, resetu, translate / scale / flip, pořadí post-multiplikativní kompozice a regresního případu Multiply
Version 1.8.0
- Bylo přidáno načítání streamů na vyžádání prostřednictvím nové metody TPdf.LoadCustomDocument(AStream, AOwnsStream) a helperu TPdfStreamAdapter, postavených na FPDF_LoadCustomDocument z PDFium. PDFium nyní čte bloky z dodaného TStream jen tehdy, když jsou potřeba, takže velmi velká nebo vzdálená PDF už nevyžadují předběžnou kopii v paměti
- Bylo přidáno volitelné vlastnictví streamu: předání AOwnsStream = True předá životnost TStream komponentě TPdf, která jej uvolní při UnloadDocument
- Regresní sady Delphi a Lazarus byly rozšířeny na 79 případů každá a sada C++Builder na 75 případů, s pokrytím streamovaného načítání přes TFileStream, úklidu streamu ve vlastnictví komponenty a kontraktu, že externě vlastněný stream přežije unload
Version 1.7.0
- Do nové jednotky FPdfAsync byly přidány kooperativní primitiva asynchronního rušení, která zpřístupňují IPdfCancellationToken / IPdfCancellationTokenSource a znovupoužitelný singleton PdfNoCancellationToken, aby dlouhotrvající workflow renderování a exportu podporovala čistou semantiku zrušení z UI
- Byl přidán lehký helper TPdfFuture<T>, který spouští worker na pozadí a obálku TPdfFutureResult<T> pak předává zpět do hlavního vlákna, přičemž rozlišuje úspěch, zrušení a selhání
- Regresní sady Delphi a Lazarus byly rozšířeny na 76 případů každá a sada C++Builder na 73 případů, se sdíleným pokrytím stavu zrušení, idempotentního cancel, fan-out callbacků a registrace po zrušení
Version 1.6.10
- Byl přidán přístup na vyšší úrovni TPdf.PrintPageRanges k tiskovým rozsahům stránek z preferencí PDF prohlížeče, vracející rozsahy stránek číslované od 1 pro aplikační kód
- Přidány TPdf.SetFormFieldFlags / SetFormFieldFlagsAt a odpovídající pomocníci TPdfView, aby aplikace mohly aktualizovat příznaky polí AcroForm přes veřejné API, včetně podpory příznaků password a multi-select
- Pokrytí ABI vazeb PDFium bylo zpevněno pro FPDF_DWORD ve velikosti Windows, callbacky FPDF_FILEACCESS a pole V8 embedder slot
Version 1.6.9
- Byly přidány nízkoúrovňové vazby Skia renderování pro nově exportovaná API FPDF_RenderPageSkia a FPDF_FFLDrawSkia v přibalených standardních a V8 DLL PDFium
- Kontroly pokrytí veřejných vazeb byly rozšířeny tak, že načítání standardních i V8 DLL nyní ověřuje vstupní body renderování Skia vedle stávajících sond schopností V8/XFA
Version 1.6.8
- Byly přidány TPdf.SetTextPositions a TPdfSingleArray pro nastavování pozic jednotlivých znaků na existujících textových objektech přes nově exportované API FPDFText_SetPositions
- FPDFText_SetPositions bylo povýšeno na povinnou vazbu pro aktuální přibalené DLL PDFium, přičemž bylo potvrzeno, že vstupní body renderování Skia zůstávají nedostupné, protože je DLL stále neexportují
- Regresní sady Delphi, C++Builder a Lazarus byly rozšířeny na 65 případů každá s pokrytím text positions
Version 1.6.7
- Byl přidán přístup TPdf na vyšší úrovni k name-tree akcím JavaScriptu v dokumentu, vracející názvy akcí a skripty přes JavaScriptAction a JavaScriptActions
- Byla přidána TPdf.FileIdentifier pro čtení permanent a changing trailer ID jako binárních TBytes bez ukončovacího bajtu PDFium
- Byly přidány TPdf.PageBox, GetPageBox a SetPageBox pro MediaBox, CropBox, BleedBox, TrimBox a ArtBox na aktuální stránce
- Bylo potvrzeno, že v aktuálních přibalených DLL PDFium zůstávají za běhu nedostupné pouze vstupní body renderování Skia, protože tyto exporty nejsou přítomné
- Regresní sady Delphi, C++Builder a Lazarus byly rozšířeny na 64 případů každá s pokrytím JavaScriptu dokumentu, trailer ID a page-boxů
Version 1.6.6
- Byla přidána runtime podpora pro přibalenou DLL PDFium s V8. Nastavení EnableV8Engine před načtením nyní vybírá pdfium.v8.dll ze stromu DLLs\Win32 nebo DLLs\Win64 a zpřístupňuje vazby jen pro V8/XFA, pokud je načtená DLL poskytuje
- Byly přidány V8FeaturesAvailable, XfaBStrHelpersAvailable, GetRecommendedV8Flags a nízkoúrovňové volitelné vazby pro FPDF_BStr_*, FPDF_GetRecommendedV8Flags a FPDF_GetArrayBufferAllocatorSharedInstance
- FPDFText_SetPositions bylo učiněno volitelným, takže PDFiumPas zůstane načitatelné i s DLL PDFium, které tento experimentální setter pozic textu neexportují
- Regresní sady Delphi, C++Builder a Lazarus byly rozšířeny na 61 případů každá s pokrytím schopností standardní DLL a DLL s V8
Version 1.6.5
- Byla přidána inspekce stromu struktury tagovaného PDF přes TPdf.StructureElements a TPdfView.StructureElements, včetně typu elementu, title, alternate text, actual text, expansion text, jazyka, marked-content ID, počtů potomků a počtů atributů
- Přidána volba tiskového režimu PDFium pro Windows přes TPdfPrintMode a SetPdfPrintMode, která pokrývá režimy EMF, pouze text, PostScript, pass-through, image-mask a Type 42
- Přidány nízkoúrovňové vazby pro zbývající veřejné exporty PDFium ze standardní DLL, které pokrývají JavaScript akce, příznaky formulářových anotací / barvu písma, aktivní stav page-objectů, indexované vkládání, float hodnoty content marků, data ICC profilu obrázku, odstranění form objectů a textové pozice
- Regresní sady Delphi, C++Builder a Lazarus byly rozšířeny na 59 případů každá s pokrytím stromu struktury tagovaného PDF, print mode a vazeb veřejného exportu
Version 1.6.4
- Dema Delphi, C++Builder a Lazarus byla aktualizována tak, aby po úspěšném vytvoření automaticky otevírala vygenerovaná PDF, exportovaný text / obrázky a složky s dávkovým výstupem
Version 1.6.3
- Sladěné regresní sady Delphi, C++Builder a Lazarus byly rozšířeny na 56 případů každá o GUI pokrytí TPdfView pro helpery fit-zoom, round-trip souřadnic device/page, hit-testing znaků a posun myší přes ovládací prvky prohlížeče v hidden window
- Fixtures pro TPdfView nyní používají explicitní velikost prohlížeče a podtřídy jen pro testy, které procvičují protected mouse handlers při plně headless běhu sad
Version 1.6.2
- Byla opravena TPdf.AddPage(0, ...) tak, aby se vložená první stránka okamžitě stala aktivní stránkou. Stávající ukázkový kód dál funguje a PageNumber nyní po vložení hlásí platnou stránku číslovanou od 1
- Verze balíčku Lazarus byla synchronizována a sladěné regresní sady Delphi, C++Builder a Lazarus byly rozšířeny na 52 případů každá
Version 1.6.1
- Byl opraven nesprávný požadavek na minimální verzi ve validátoru souladu s verzí PDF z v1.6.0: akce SetState byla přeřazena z PDF 1.5 na PDF 1.2 podle PDF 1.2 Reference 6.9.9. Cíle SaveAs pro PDF 1.3 / 1.4, které obsahují akce SetState, se nyní ukládají správně místo odmítnutí
- Byly přidány odpovídající lexikální kontroly PDF 1.2 podle stejné části specifikace: akce Sound, Movie a NOP plus barevný prostor Separation jsou nyní blokovány, když je zvolená cílová verze starší než PDF 1.2
- Regresní sady Delphi, C++Builder a Lazarus byly rozšířeny na 50 případů každá přidáním pozitivního akceptačního testu PDF 1.4 SetState, který zafixuje opravenou hranici
Version 1.6.0
- Explicitní cíle SaveAs pro PDF 1.0 až PDF 1.7 byly zpevněny úplným validátorem verzových funkcí pokrývajícím celou časovou osu funkcí od PDF 1.1 po ISO 32000-1. Validátor nyní blokuje ukládání, která obsahují položky slovníků, názvy filtrů, podtypy anotací, typy akcí, fonty, barevné prostory nebo parametry šifrování zavedené až po zvolené cílové verzi. Příklady: JBIG2Decode (1.4+), MarkInfo / Tagged PDF (1.4+), OutputIntents (1.4+), ICCBased / DeviceN / BleedBox / TrimBox / ArtBox / StructTreeRoot (1.3+), anotace Polygon / PolyLine / Caret / Screen / Watermark / Redact, šifrování AES a AES-256 (CFM AESV2 / AESV3), položky katalogu Perms / Legal / Requirements / NeedsRendering a akce vázané na verzi, jako jsou JavaScript, Trans, SetState, Rendition, GoToE a GoTo3DView, jsou všechny odmítnuty, pokud je cílová verze PDF neumí reprezentovat
Version 1.5.13
- Regresní sady Delphi, C++Builder a Lazarus byly rozšířeny na 49 případů každá a doplňují přímé pokrytí odmítání barevných prostorů ICCBased, Tagged PDF MarkInfo, anotací Polygon, šifrování AES (V2) a anotací Redact vůči cílům PDF 1.2 / 1.3 / 1.4 / 1.5 / 1.6
Version 1.5.12
- Bylo opraveno post-processing ukládání SaveAs pro inkrementální přepisy katalogu. PDFiumPas nyní validuje nejnovější opakovaný nepřímý objekt, takže existující přepsání katalogu /Version je při ukládání do explicitně starší cílové verze PDF správně nahrazeno
- Regresní sady Delphi, C++Builder a Lazarus byly rozšířeny na 44 případů každá a přidávají přímé pokrytí nahrazení zastaralého katalogu /Version, normalizace katalogové verze PDF 1.4 a odmítání průhlednosti a funkcí portable collection, když je zvolená cílová verze PDF neumí reprezentovat
Version 1.5.11
- Byl zpevněn verzovaný výstup SaveAs pro explicitní cíle PDF 1.3, 1.4, 1.5, 1.6 a 1.7. PDFiumPas nyní normalizuje markery verze katalogu, udržuje výchozí OpenAction Fit Height bezpečnou vzhledem k verzi a odmítá novější funkce PDF, které zvolená cílová verze neumí reprezentovat
- Bylo přidáno regresní pokrytí v Delphi, C++Builderu a Lazarusu, které ukládá a znovu načítá explicitní soubory PDF 1.3 až PDF 1.7 a ověřuje finální hlavičku, výchozí OpenAction Fit Height a hlášenou verzi PDF
Version 1.5.10
- Specifikace postoupila z varianty B na variantu C přidáním smoke testů TPdfView ve všech třech IDE sadách (Tests.PdfView). Každá sada vytvoří skrytý rodičovský TForm (přes TForm.CreateNew na stranách Pascalu a
new TForm(NULL, 0)na straně C++Builderu), znovu pod něj připojí TPdfView, nastaví Active := True a pak ověří round-trip povrch pro PageCount, výchozí PageNumber, Zoom, Rotation, DisplayMode a to, že View.Text odpovídá podkladovému TPdf.Text. Každá sada IDE nyní běží s 39 případy
Version 1.5.9
- Specifikace postoupila z varianty A na variantu B přidáním smoke testů renderování ve všech třech IDE sadách. Každá sada Tests.Render volá TPdf.RenderPage na sample.pdf a ověřuje tři robustní signály místo byte-for-byte checksumů: vrácená bitmapa přesně odpovídá požadované velikosti v pixelech; různé požadované velikosti (200x100, 64x256) vytvářejí odpovídající bitmapy; a vykreslená stránka má alespoň 95% bílého pozadí s nejméně 50 (Lazarus: 20) nebílými pixely tvořícími antialiasovaný text. Každá sada IDE nyní běží s 33 případy
Version 1.5.8
- Původní skupiny testovacího plánu A(2) byly uzavřeny přidáním dalších sedmi regresí na každé IDE: TPdf.CreateAnnotation vytvářející anotaci anHighlight plus round-trip SaveAs/LoadDocument, čtecí cesta AcroForm na Demo/Delphi/FormFill/cmp_fill_out_and_merge_forms.pdf (FormType je ftAcroForm, FormFieldCount > 0, FlattenAllPages sníží pole na nulu) a tiché pokrytí čtecí cesty pro Bookmarks, LinkAnnotationCount a WebLinkCount u dokumentu, který žádnou z těchto funkcí nemá. Každá sada IDE nyní běží s 30 případy
Version 1.5.7
- Sady Delphi (DUnitX), Lazarus (FPCUnit) a C++Builder (GoogleTest) byly rozšířeny o sedm nových regresí na každé IDE: PdfVersion, PageRotation, vyhledávání podřetězců TPdf.FindFirst / FindNext, soulad CharacterOrigin / CharacterRectangle s počátkem AddText, registrace CreateAttachment plus round-trip SaveAs/LoadDocument a round-trip AddText s akcentovaným textem, který ověřuje, že cesta vkládání evropských TrueType fontů z v1.3.0 zachovává kódové body Latin-1 Supplement
Version 1.5.6
- Uložená PDF nyní dostanou výchozí akci otevření Fit Height na první stránce, pokud žádná OpenAction neexistuje, takže čtečky PDF zpočátku zobrazují generované dokumenty v přiblížení na výšku stránky
- Bylo přidáno regresní pokrytí v Delphi, Lazarusu a C++Builderu pro generovanou OpenAction a nastavení Fit Height
Version 1.5.5
- Do sad Delphi (DUnitX), Lazarus (FPCUnit) a C++Builder (GoogleTest) byly přidány regresní testy pro indexovaný API povrch inspekce znaků a fontů (TPdf.FontBaseName, FontFamilyName, FontWeight, FontItalicAngle, FontData, FontIsEmbedded, CharacterFontWeight, CharacterAngle). Sada Lazarus záměrně přeskočí FontData, protože ta v současnosti v rámci FPDFFont_GetFontData pod FPC padá na access violation
Version 1.5.4
- Bylo přidáno demo C++Builder Attachment portované z ukázky Delphi, které pokrývá vytváření PDF, přidávání, výpis, extrakci, mazání a ukládání vložených příloh se zobrazením MIME subtype
Version 1.5.3
- Výpočet spread-page, který stojí za dvoustránkovými režimy TPdfView, byl zpřístupněn jako helper na úrovni jednotky ComputeSpreadPages(DisplayMode, PageNumber, PageCount, out LeftPageNo, out RightPageNo). Chování se nemění; helper dělá pravidlo s cover page samostatně testovatelné bez vytváření instance prohlížeče
- Do sad Delphi (DUnitX), Lazarus (FPCUnit) a C++Builder (GoogleTest) bylo přidáno pět regresních testů pokrývajících prázdné dokumenty, standardní dvoustránkové párování, samostatně stojící cover page v dmTwoPageContinuousWithCover, dvojice po cover page a chování ořezání na poslední stránce / mimo rozsah
Version 1.5.2
- Byla přidána podpora jazyka dokumentu přes TPdf.Language, mapovaná na položku katalogu PDF /Lang
- Byl přidán přístup k MIME subtype příloh přes TPdf.AttachmentType
- Do TPdfAnnotationSubtype bylo přidáno anRedact a současně byly přidány helpery pro odebírání page objectů pro TPdf a TPdfView
- Dema pro prohlížeč a přílohy byla aktualizována tak, aby při dostupnosti zobrazovala nové informace o jazyce a typu přílohy
Version 1.5.1
- Do TPdfView bylo přidáno dmTwoPageContinuousWithCover, takže rozložení prohlížeče mohou ukazovat první stránku samostatně a poté pokračovat dvoustránkovými spready
- Dema MultiPageViewer pro Delphi, C++Builder a Lazarus byla aktualizována tak, aby zpřístupnila dvoustránkový režim se samostatnou cover page
Version 1.5.0
- Byly přidány smoke-level automatizované testovací sady pro Delphi (DUnitX), Lazarus (FPCUnit) a C++Builder (GoogleTest). Všechny tři sady sdílejí jediné fixture PDF v Tests\TestData a každá spouští stejných sedm případů pokrývajících načtení dokumentu, informace o stránce, extrakci textu, metadata, round-trip ukládání, validaci hlavičky PDF a vlastnost Compressed
Version 1.4.3
- Demo FontProperties bylo rozšířeno tak, aby ukazovalo metadata fontů z API TPdfView i TPdf, včetně handle fontu, velikosti dat fontu a metrik znaků
- Byly přidány indexované vlastnosti TPdfView pro inspekci znaků a fontů a demo FontProperties bylo aktualizováno tak, aby dotazovalo metadata fontů textových objektů
Version 1.4.2
- Do TPdf byly přidány indexované vlastnosti pro inspekci znaků a fontů určené pro analýzu textu bez potřeby prohlížeče. Vlastnosti indexované znakem (CharacterAngle, CharacterFontSize, CharacterFontWeight) dotazují metriky jednotlivých znaků z textového streamu aktuální stránky. Vlastnosti indexované page objectem (FontAscent, FontBaseName, FontData, FontDescent, FontFamilyName, FontHandle, FontIsEmbedded, FontItalicAngle, FontWeight) dotazují metadata fontu pro libovolný textový objekt na aktuální stránce
- Netextové page objecty vracejí pro všechny vlastnosti Font* bezpečné nulové nebo prázdné hodnoty místo vyvolání chyby, takže lze jednoduše iterovat přes všechny page objecty a zkoumat jen ty textové
- FontBaseName čte přímo základní PostScriptový název fontu místo fallbacku na rodinu fontu, takže poskytuje přesnější identifikátor pro vložené fonty
Version 1.4.1
- Byly přidány verze dema EuropeanText pro C++Builder a Lazarus, aby všechny podporované rodiny IDE mohly ověřovat generování evropského textu s diakritikou pomocí systémových TrueType fontů
- Byly přidány verze dema FormFill pro C++Builder a Lazarus, včetně ukázkových formulářových PDF, editace polí, regenerace vzhledu, ukládání vyplněných formulářů a workflow ukládání po flatten
Version 1.4.0
- Byla přidána podpora Lazarus / Free Pascal: nový balíček PDFiumLaz poskytuje stejné komponenty TPdf, TPdfView a související komponenty pod widget setem LCL, čímž rozšiřuje knihovnu na IDE Lazarus a kompilátor Free Pascal vedle existujících balíčků Delphi a C++Builder
- Byly přidány verze dem pro Lazarus, aby vývojáři Lazarusu mohli prozkoumat každou funkci na spustitelných ukázkách
- Byl opraven problém kompilace Lazarusu, kdy se podmíněné definice Free Pascal vyhodnocovaly společně s kontrolami verze kompilátoru Delphi, takže buildy FPC zkoušely vyhledávat názvy jednotek specifické pro Delphi a selhávaly
Version 1.3.1
- Zdokumentován pracovní postup flatteningu formulářů v sadě nápovědy: GenerateFormAppearances, FlattenPage, FlattenAllPages a související konstanty FLAT_* / FLATTEN_* jsou nyní pokryté v TPdf, TPdfView, referenci API, matici funkcí a programovacích příkladech
- Tabulka architektury na stránce overview byla opravena tak, aby uváděla skutečné binding units dodávané ve složce Lib
Version 1.3.0
- Byla zlepšena podpora evropských znaků při vytváření PDF. TPdf.AddText nyní před vytvořením textového objektu načte a kešuje odpovídající systémový TrueType font, čímž zachovává znaky s diakritikou z češtiny, francouzštiny, němčiny, španělštiny, portugalštiny, polštiny a turečtiny, které vestavěné standardní fonty PDFium neumějí reprezentovat
- Aplikace, které dříve pro ne-ASCII latinský text vytvářely otazníky nebo náhradní glyfy, nyní budou renderovat správně bez jakékoli změny kódu. Pro ilustraci funkce bylo přidáno demo EuropeanText
Version 1.2.0
- Do TPdf bylo přidáno obnovení vzhledu AcroForm: volání GenerateFormAppearances po úpravě hodnot FormField[] aktualizuje vzhled widgetu tak, aby vyplněné hodnoty byly viditelné ve standardních čtečkách PDF bez nutnosti interaktivní editační relace
- Přidány pomocníky pro flattening formulářů do TPdf (FlattenPage / FlattenAllPages) a TPdfView (FlattenPage pro aktuální stránku zobrazení). Flattening trvale vloží vyplněné hodnoty polí jako běžný obsah stránky a odstraní interaktivní vrstvu formuláře, takže vznikne statický dokument, který se vykresluje konzistentně ve všech prohlížečích
- Bylo přidáno Demo\Delphi\FormFill, které předvádí workflow fill-and-save a fill-and-flatten s ukázkovým AcroForm PDF
Version 1.1.2
- Byla přidána komprese streamů PDF při ukládání. Nová vlastnost TPdf.Compressed (ve výchozím stavu zapnutá) při uložení přepisuje nekomprimované content streams jako streamy komprimované FlateDecode, čímž výrazně snižuje velikost souboru u programově generovaných PDF. Aplikace, které vyžadují čistý nekomprimovaný výstup, mohou před voláním SaveAs nastavit Compressed na False
Version 1.1.1
- Buildy balíčků Win64 už neobsahují registrační jednotky design-time, což brání selháním při buildu, když je balíček Win64 nasazen v runtime-only kontextu
- Loader DLL PDFium nyní nejprve hledá v aplikačním podadresáři Win32 nebo Win64 s použitím standardních názvů pdfium.dll a pdfium.v8.dll a teprve poté přechází na plochý adresář aplikace a systémový adresář Windows. To odpovídá rozložení DLL přibalenému ke component package a instalace je tak přímočará
Version 1.1.0
- Byla opravena vizuální chyba ořezu v dvoustránkovém režimu TPdfView: obsah stránky přetékal přes gutter, protože levá i pravá dlaždice stránky sdílely jediný clipping rectangle. Každá dlaždice nyní ořezává samostatně, takže obsah zůstává uvnitř hranice své stránky
- Chybová zpráva v demu Delphi byla vylepšena pro případ, kdy nelze najít DLL PDFium, a nyní jasněji uvádí očekávaný název DLL a její umístění