Informacje o wydaniu
Historia wydań
« Wróć do indeksu dokumentacji
Historia wersji biblioteki PDFlibPas. Wpisy są uporządkowane od najnowszych do najstarszych; każde wydanie stosuje semantyczne wersjonowanie zgodnie z polityką wydań projektu.
Ostatnie wydanie
- Najnowsza wersja: v3.75.6; Data wydania: 2026-06-23
Version 3.333.0
Added
- Inspekcja rewizji przyrostowych. Podpis obejmuje bajty rewizji, w której został zapisany, a wszystko dołączone później to oddzielna aktualizacja, której treść decyduje, czy podpis wciąż obowiązuje dla dokumentu w jego obecnym stanie.
GetDocumentRevisionCount,GetDocumentRevisionStartiGetDocumentRevisionEndrozkładają te rewizje, aGetSignatureRevisionIndexmówi, na której kończy się podpis GetDocumentRevisionKindzgłasza, co zrobiła aktualizacja, jako najbardziej dalekosiężne z obiektów, których dotknęła: księgowanie, materiał walidacyjny, znacznik czasu dokumentu, podpis, pole formularza, adnotacja lub treść dokumentu. Dodawanie materiału walidacyjnego dla walidacji długoterminowej nie przypomina więc już edycji dokumentuGetDocumentRevisionChangeswylicza każdy obiekt, który aktualizacja dodała, zmieniła lub usunęła, wraz z tym, czym każdy jest, a dla zmienionego słownika, które klucze rzeczycznie się różniąGetDocumentRevisionsCompletezgłasza, czy cała historia była odzyskiwalna. Łańcuch, który jest przerwany, cykliczny lub dłuższy, niż czytnik podąży, pozostawia najstarsze aktualizacje niewidoczne, a liczby są wtedy dolną granicą, a nie odpowiedzią- Obiekt, którego wcześniejszej wersji nie da się odczytać lub którego ciało strumienia nigdy nie było porównywane, jest zgłaszany jako nieokreślony, a nie jako niegroźny: aktualizacja przepisująca stronę przy pozostawieniu jej słownika nietkniętym nie jest mylona z przepakowaniem
Version 3.332.0
Added
ApplyPAdESLongTermValidationw jednym wywołaniu podnosi już podpisany PDF do PAdES-B-LT. Buduje ścieżkę certyfikatów sygnatariusza z samego podpisu, zbiera materiał OCSP i CRL dla każdego ogniwa poprzez adresy wskazywane przez certyfikaty i zapisuje certyfikaty oraz dane odwołań w document security store z wpisem VRI dla podpisu, w pojedynczej aktualizacji przyrostowej.ApplyPAdESLongTermValidationToStreamzapisuje wynik do strumienia zamiast do pliku- Zachowanie jest konfigurowalne przez maskę opcji
PADES_LTV_*: czy zapisywać wpis VRI, czy odpytywać respondery OCSP, czy sięgać po CRL, czy podążać za adresami wystawców, by uzupełnić ścieżkę, oraz czy pominąć odwołania dla samowystawionego roota - Pusta nazwa pola przetwarza każdy podpis w jedną rewizję; nazwane pole przetwarza tylko ten jeden
GetPAdESLTVCertificateCount,GetPAdESLTVCRLCount,GetPAdESLTVOCSPCountiGetPAdESLTVErrorzgłaszają, co zebrało ostatnie wywołanie i dlaczego przerwało wcześniej, tak że częściowy wynik przy nieosiągalnym responderze jest widoczny, a nie milczący- Materiał identyczny z czymś już przygotowanym jest zapisywany raz i wskazywany przez każdy podpis, który go potrzebuje, a podpis bez czytelnego certyfikatu jest zgłaszany, zamiast być podawanym za udaną promocję
Version 3.331.0
Added
- Podpis niesie ze sobą własną ścieżkę certyfikacji, toteż materiał potrzebny profilowi walidacji długoterminowej można odczytać z samego podpisanego pliku.
GetSignatureSignerCertificateDER,GetSignatureEmbeddedCertificateCountorazGetSignatureEmbeddedCertificateDERzwracają certyfikaty osadzone w podpisie, aGetSignatureCertificateChainLengthiGetSignatureCertificateChainDERporządkują je w ścieżkę od sygnatariusza na zewnątrz GetSignatureContentsHashHexzwraca klucz, pod którym adresowany jest wpisAddPAdESDSSVRI, obliczony z samego podpisu- Certyfikat sygnatariusza jest dopasowywany niezależnie od tego, czy podpis identyfikuje go przez wystawcę i numer seryjny, czy przez identyfikator klucza podmiotu, a ścieżka kończy się na ostatnim wystawcy, którego podpis rzeczywiście przenosi, zamiast udawać kompletność
Fixed
- Czytnik DER odrzuca zadeklarowaną długość elementu większą niż dane, zamiast pozwalać prawie maksymalnej wartości obsunąć jej kontrolę granic, a przejście po rozszerzeniach certyfikatu nie czyta już poza końcem obciętego lub zbyt długiego certyfikatu. Oba są osiągalne z spreparowanego dokumentu, więc powyższe akcesory pozostają bezpieczne przy niezaufanym wejściu
- Akcesory podpisu czytają dokument ze wspólnym uchwytem, więc odpowiadają, podczas gdy weryfikator lub przeglądarka ma już otwarty plik, zamiast kończyć się niepowodzeniem, jakby podpis był nieobecny
Version 3.330.0
Added
- OCSP status requests.
BuildOCSPRequestencodes an RFC 6960 request for a certificate and its issuer,FetchOCSPResponseposts it to the responder and returns the reply, andAddPAdESDSSOCSPFromCertificatesdoes both and files the result in the document security store - The responder address is optional: when it is omitted, the one the certificate itself names is used, so a caller that has the certificate chain needs no further configuration
- A certificate pair that does not actually belong together is refused before anything is sent, instead of producing the "unknown" answer such a request earns from the responder and which reads like a revocation problem
- Only a successful response is stored; a responder that answered
tryLaterorunauthorizedis reported throughGetTimeStampErrorrather than filed as if it were a status answer
Version 3.329.0
Fixed
- Reusing one result array across successive enumeration calls no longer leaks the strings held in the array slots that a later call does not fill. This affected the documented "call once for the count, resize, call again" pattern whenever a later call returned fewer items than the array could hold, and the stranded text accumulated for the lifetime of the process
- Affected entry points include
EnumPageContentStates,EnumPageContentStatesEx,EnumAttachments,EnumDocumentFonts,EnumPageElements,EnumNamedDestinations,EnumSignatures,EnumFormFields,GetFormValues,GetTextInAreaEx, and the text-search, form-field-action and certificate enumeration calls
Changed
- The result-array parameter of those calls is now passed as
varrather thanout. Existing Delphi and C++Builder code compiles and links unchanged; the only visible difference is that array slots past the returned count keep whatever they held before instead of being silently blanked
Version 3.328.0
Added
- Certificates now tell the library where their status can be checked:
GetCertificateOCSPURLs,GetCertificateIssuerURLsandGetCertificateCRLURLsread the responder, issuing-certificate and CRL addresses out of a certificate, so assembling long-term validation material no longer requires knowing where a given authority publishes FetchRevocationMaterialdownloads material from those addresses, andAddPAdESDSSCRLFromURLandAddPAdESDSSCertificateFromURLdownload and file it in the document security store in one step- Addresses that name no fetchable resource, such as a directory name or a mail address, are skipped rather than reported as something that can be downloaded
Version 3.327.0
Added
- A built-in RFC 3161 time-stamp client.
SetTimeStampServerandSetTimeStampOptionsconfigure the authority, hash algorithm, requested policy, nonce use and timeout;FetchTimeStampTokenreturns a TimeStampToken for any digest ApplyPAdESSignatureTimeStampcompletes a PAdES-B-T signature in one call: it hashes the signature value, obtains the token from the configured authority and attaches it as the signature time-stamp attribute, replacing the previous three-step exchange the caller had to wire up itself- When a nonce is used the token is checked to carry the same value back, so a replayed or substituted response is rejected instead of being embedded in the document
GetTimeStampStatusandGetTimeStampErrorreport the authority's own status and failure text, so a refused request explains itself
Version 3.326.0
Added
- The PDFium renderer now writes the same image formats the GDI+ and Cairo renderers write.
RenderPageToFile,RenderPageToStreamandRenderPagesToFilesaccept BMP (option 0), JPEG (1), PNG (5), GIF (6), TIFF (7) and G4 TIFF (10) afterSelectRenderer(3), instead of accepting BMP alone - The JPEG quality set through
SetJPEGQualityand the active TIFF compression settings now apply to PDFium output as well, so switching renderers no longer changes the encoding of the file that is produced
Fixed
- Requesting PNG or any other non-BMP format from the PDFium renderer used to return 0 and leave an empty file behind. Applications that offered a renderer choice silently produced unreadable output whenever PDFium was the selected engine
- Asking the PDFium renderer for a metafile format it cannot produce (WMF, EMF, EPS, EMF+, HTML5) now reports which formats are available through
LastRenderErrorinstead of naming BMP as the only option
Version 3.324.0
Changed
- The PDFium renderer now feeds the document to the engine through a streaming data source instead of one resident buffer. Rendering and printing previously serialised the document and then copied it again into a string, so every page cost twice the document size in memory; the copy is gone and PDFium reads only the blocks it needs
- Rendering a page range to files parses the document once for the whole batch instead of once per page, so a long range no longer re-reads the entire file for every image it writes
- Older PDFium builds that do not export the streaming entry point keep working unchanged through the in-memory path
Fixed
- The renderer smoke test located the optional PDFium and Cairo libraries one directory too high and silently skipped both engines; it now finds them and exercises the real rendering paths
Version 3.323.0
Added
CreateValidationReportorazSaveValidationReportgenerują ustrukturyzowany raport walidacji PDF/A i PDF/UA-1 w formacie XML lub JSON. Każde ustalenie zawiera id reguły, normę, do której należy, krótką nazwę reguły, egzekwowaną klauzulę ISO, poziom ważności oraz liczbę dotkniętych obiektów, a raport zamykany jest statystykami zdawalności/blędów dla każdej normy i na poziomie dokumentu- Norma, której nie zażądano, jest zgłaszana jako
not-checkedzamiast jako ciche zdanie, więc częściowe uruchomienie nie może zostać pomylone z czystym bilansem zgodności - Potoki budowania mogą teraz filtrować po id reguły lub klauzuli ISO zamiast dopasowywać podciągi w tekście: rodzina raportów preflight najpierw renderuje raport dla człowieka i konwertuje ten tekst na JSON, HTML lub CSV, natomiast raport walidacji jest składany z surowych wyników kontroli i zachowuje pola czytelne dla maszyny w nienaruszonym stanie
Version 3.322.0
Added
- Dokumentacja referencyjna opisuje teraz cztery zadeklarowane na zewnątrz typy publiczne używane w całym interfejsie
TPDFlib, które wcześniej nie miały dedykowanej strony:TPDFlibProgressEvent,TPDFlibLogger,TPDFlibCertificateInfoorazTPDFlibWatermarkBase, kończąc pokrycie publicznych typów zdarzeń, loggera, wyniku wyliczenia i znaków wodnych
Version 3.321.0
Added
CheckDocumentPolicyocenia deklaratywne reguły wewnętrzne, takie jakFonts.NotEmbedded = 0,Security.Encrypted = noczyDocument.Pages <= 500, wobec dokumentu i zgłasza każdą regułę jako zdaną lub niezdawaną z rzeczywistą wartością, zamieniając bramkę ingestu dla wydawców, archiwów i drukarni w konfigurację zamiast ręcznie pisanego kodu inspekcji
Version 3.320.1
Fixed
- Rysowanie tekstu w trybie PDF/A bez uprzedniego wczytania fontu nie powoduje już błędu: PDF/A wymaga, aby każdy program fontu był osadzony, więc niejawny skrót do fontu wbudowanego został odrzucony i nie pozostawił żadnego wybranego fontu, a
DrawTexti pozostałe wywołania tekstu ulegały awarii zamiast rysować - Ścieżka niejawnego fontu rozwiązuje teraz rzeczywistą, osadzalną krój, gdy aktywny jest tryb PDF/A, więc tekst rysowany bez jawnego wywołania
AddTrueTypeFontjest osadzany i pozostaje zgodny; bezpośrednie wywołanieAddStandardFontjest nadal odrzucane w PDF/A - Na hostach, na których nie można rozwiązać żadnego osadzalnego kroju, rysowanie powraca do wbudowanych metryk zamiast kończyć się błędem i zgłasza niedobór zgodności przez
LastErrorCode605, dzięki czemu plik może zostać wychwycony, zanim zostanie opublikowany jako zgodny
Version 3.320.0
Added
GetDocumentFeatureReportzwraca ustrukturyzowany raport cech w jednym wywołaniu — metadane dokumentu, liczby stron i obiektów, stan szyfrowania, inwentarze fontów i obrazów, oznaczanie i konspekty, pola formularza, podpisy, załączniki oraz podział bajtów według kategorii — zastępując tuzin osobnych zapytań, które potok katalogowania lub ingestu musiał wcześniej złożyć
Version 3.319.0
Added
SetCollectionView,AddCollectionField,SetCollectionSortorazSetCollectionItemValuebudują portfolia PDF na bazie istniejących załączników, więc zbiór osadzonych plików jest prezentowany jako przeglądalny pakiet z własnymi kolumnami, kolejnością sortowania i wartościami dla każdego pliku zamiast zwykłej listy załącznikówGetCollectionVieworazGetCollectionFieldCountzgłaszają tryb prezentacji oraz liczbę zadeklarowanych kolumn wczytanego portfolio
Version 3.318.1
Fixed
- Opcja 12 ekstrakcji tekstu (ignorowanie obróconego tekstu) odrzuca teraz obrócone ciągi niezależnie od kierunku obrotu: ćwierćobrót zgodny z ruchem wskazówek zegara oraz ćwierćobrót przeciwny do ruchu wskazówek zegara były traktowane różnie, więc boczne notatki marginesowe były odrzucane w jednym kierunku i zwracane w drugim
- Ta sama opcja zachowuje pochylony tekst, który jest jedynie ścinany, taki jak syntetyczna kursywa, a tolerancja teraz skaluje się wraz z rozmiarem tekstu i przekształceniem strony, więc duże pochylone nagłówki nie są już odrzucane, jakby były obrócone
Version 3.318.0
Added
DecodeAllStreamsrozwija skompresowane strumienie dokumentu w miejscu, więc zapisanie go tworzy kopię, której strumienie treści, metadane i strukturę można odczytać bezpośrednio przez narzędzia diff, przegląd forensyczny i przepływy wsparcia; obrazy, strumienie predykcji i strumienie odniesień krzyżowych zachowują swoje kodowanie, a strumienie obiektów są materializowane najpierw, nic nie zostaje utracone
Version 3.317.0
Added
SetTrappedorazGetTrappeddeklarują i odczytują stan trappingu dokumentu wymagany przez PDF/X, zapisywany jako nazwa/Trappedwymagana przez specyfikację, a nie jako ciąg tekstowySetOutputIntentSubtypeorazGetOutputIntentSubtypeponownie tagują intencję wyjściową, więc wczytany profil koloru może opisywać warunek drukuGTS_PDFXzamiast warunek archiwizacjiGTS_PDFA1, który tworzą tryby PDF/A
Version 3.316.0
Added
SetEncryptEmbeddedFilesOnlyorazGetEncryptEmbeddedFilesOnlyograniczają szyfrowanie AES do plików osadzonych: dokument otwiera się i renderuje w dowolnym czytniku bez monitu o hasło, podczas gdy jego załączniki pozostają zaszyfrowane, standardowe rozwiązanie dla faktur, dokumentacji medycznej i teczek, których strony tytułowe są publiczne, ale treść nie
Version 3.315.0
Added
- Opcja 18 ekstrakcji tekstu obraca ciągi narysowane pod kątem 90, 180 lub 270 stopni do poziomej ramki odczytu i grupuje każdy ćwierćobrót oddzielnie, więc obrócone notatki marginesowe, nagłówki tabel oraz etykiety osi wykresów są wyodrębniane jako czytelne wiersze zamiast przeplatać się z tekstem pionowym lub być odrzucane
Fixed
DASetTextExtractionOptionsakceptuje opcję 16 (rozdzielanie dywizów) oraz opcję 17 (dzielenie słów według luk między znakami) zamiast je odrzucać, a ścieżka ekstrakcji bezpośredniego dostępu przekazuje teraz opcje 15, 16 i 17 do ekstraktora, więc usuwanie linii podkreśleń, rozdzielanie dywizów i dzielenie według luk między znakami mają zastosowanie do uchwytów plików tak samo, jak do wczytanego dokumentu
Version 3.314.0
Added
GetFontHasToUnicodezgłasza, czy wybrany font zawiera mapowanie Unicode, a inwentarz fontów zyskuje odpowiadające poleHasToUnicodedla każdego fontu oraz podsumowanieNoToUnicodeCount, więc dokumenty mogą być sprawdzone pod kątem fontów bezpiecznych dla ekstrakcji i konwertowalnych na PDF/A-*u lub PDF/UA przed przetwarzaniem
Version 3.313.0
Added
SetPDFAModezyskuje tryb 8 dla PDF/A-2u (ISO 19005-2 Level U), poziom zgodności, który deklaruje mapowania tekstu Unicode bez zezwalania na pliki osadzone, kończąc rodzinę PDF/A-2 obok istniejących trybów 2b i 2a
Version 3.312.0
Added
GetObjectByPathorazGetObjectByPathCountodczytują dowolny węzeł drzewa objektów poprzez wyrażenia ścieżkowe, takie jakRoot/Pages/Kids[0]/MediaBox[2]lubpages[0]/Type— typy, wartości skalarne, formy zserializowane oraz liczebności elementów w jednym wywołaniu, zastępując ręczne przechodzenie obiektów przy sondowaniu metadanych, doraźnych kontrolach zgodności i diagnostyce wsparcia
Version 3.311.0
Added
SetBlackPointCompensationdeklaruje kompensację czarnego punktu (ON, OFF lub Default) dla kolejnego rysowania przez stan graficzny/UseBlackPtCompPDF 2.0, pozwalając wyjściu do naświetlania i probie utrwalić konwersje ICC w ciemnych tonach, które wcześniej były prywatne dla przeglądarki; wersja dokumentu jest podnoszona automatycznie, a tryby PDF/A odrzucają ten stan
Version 3.310.0
Added
SetCompressionLevelorazGetCompressionLeveludostępniają poziom deflate dla każdej kompresji wykonywanej przez bibliotekę: 0 zachowuje domyślny silnik akcelerowany SIMD, 1 faworyzuje przepustowość, a 9 ściska archiwa najmocniejRecompressStreamsponownie deflatuje każdy zwykły strumień FlateDecode wybranego dokumentu na bieżącym poziomie i zachowuje mniejsze kodowanie dla każdego strumienia, zmniejszając dokumenty pierwotnie zapisane przy szybkim ustawieniu kompresji bez ingerencji w ich treść
Version 3.309.0
Added
SetObjectStreamModeorazGetObjectStreamModedodają trójstanową kontrolę strumienia obiektów: wyłącz, generuj (domyślnie) lub zachowaj, gdzie zachowanie utrzymuje oryginalne skompresowane grupowanie wczytanego pliku i zapisuje kontenery dosłownie, czyniąc konwersje istniejących plików PDF 1.5+ tańszymi, bo nic nie jest rozpakowywane ani regroupowane
Changed
- W trybie zachowania elementy edytowane od wczytania są promowane do obiektów najwyższego poziomu, aby ich zmiany zostały zapisane, a każdy pozostały skompresowany element automatycznie wybiera binarną formę strumienia odniesień krzyżowych
Version 3.308.0
Added
CheckDocumentStructureuruchamia jednowywołaniowy test kondycji strukturalnej: każdy obiekt i strumień jest przepuszczany przez swój dekoder, zwykłe strumienie Flate są rygorystycznie weryfikowane ze znacznikiem końcowym zlib, więc ucięte dane są wychwytywane, a raport flaguje brakujące trailery, nierozwiązywalne katalogi i strony, nieobsługiwane procedury szyfrowania oraz pliki naprawione skanowaniem bajtów, z ustaleniami per obiekt i wierszem podsumowującym
Version 3.307.0
Fixed
- Uszkodzone dokumenty korzystające ze strumieni odniesień krzyżowych naprawiają się teraz pomyślnie: surowa rekonstrukcja odzyskuje elementy skompresowanych strumieni obiektów, a gdy w pliku nie istnieje żadne słowo kluczowe trailer, syntetyzuje trailer z najnowszego osiągalnego katalogu dokumentu, więc zepsute przesunięcie startxref nie czyni już takich plików nieotwieralnymi
Version 3.306.0
Added
ExportDocumentDatazapisuje klucze informacji dokumentu, całe drzewo zakładek oraz zakresy etykiet stron jako edytowalny tekst w klasycznym formacie linii dump_dataImportDocumentDatastosuje ten sam format z powrotem — klucze informacji są aktualizowane, drzewo zakładek jest przebudowywane z poziomami zagnieżdżenia i stronami docelowymi, a zakresy etykiet stron są zastępowane — umożliwiając masową edycję zakładek oraz migrację metadanych między dokumentami w jednym wywołaniu w każdą stronę
Version 3.305.0
Added
AuditDocumentSpacerozkłada zużycie bajtów dokumentu według kategorii — obrazy, programy fontów i słowniki, strumienie treści, form XObjects, strumienie obiektów, pliki osadzone, metadane, drzewo struktury, adnotacje, drzewo stron i inne — z liczebnościami obiektów, sumami bajtów i procentami, odpowiadając na pytanie, dlaczego plik jest tak duży, jaki jest, oraz która optymalizacja najbardziej się opłaca
Version 3.304.0
Added
StructTreeItemCount,GetStructTreeItemTextorazGetStructTreeItemIntPropertyodczytują drzewo struktury oznakowanego dokumentu jako spłaszczoną listę elementów w porządku wgłąb — typy elementów (surowe i zmapowane na role), tekst alternatywny i rzeczywisty, język, tytuły, identyfikatory oznaczonej treści, numery stron oraz relacje rodzic-dziecko
Changed
- Czytnik drzewa struktury chroni przed uszkodzonymi dokumentami: cykle odniesień, numery obiektów spoza zakresu oraz drzewa zagnieżdżone głębiej niż 64 poziomy są ucinane zamiast zapętlać się
Version 3.303.1
Fixed
- Półprzezroczyste stemple podkładu tworzone przez
StampTextorazStampImagenie przebijają już swojej nieprzezroczystości do oryginalnej treści strony — stan przezroczystości jest teraz ograniczony do samego stempla, więc strona zachowuje pełną nieprzezroczystość
Version 3.303.0
Added
OverlayDocumentPagesstempluje strony innego otwartego dokumentu na strony wybranego dokumentu, po jednej stronie źródłowej na każdą stronę docelową, nad lub pod istniejącą treścią — papier firmowy, ciągłe tła stron i zeskanowane szablony formularzy w jednym wywołaniu- Wyczerpanie źródła jest konfigurowalne: zatrzymaj, przełączaj w pętli strony źródłowe lub powtarzaj ostatnią stronę źródłową; dodatkowa opcja zapobiega powiększaniu stempla poza jego naturalny rozmiar
Changed
- Stemple dokumentu są dopasowywane do CropBox strony docelowej i ustawiane pionowo na stronach zawierających wpis
/Rotate, a każda strona źródłowa jest importowana raz jako współdzielony Form XObject, więc powtarzające się szablony nigdy nie duplikują swoich zasobów
Version 3.302.0
Fixed
- Hasła AES-256 są teraz przetwarzane za pomocą SASLprep (RFC 4013) przed hashowaniem, więc hasła zawierające spacje non-ASCII, miękkie myślniki, znaki kompatybilności lub sekwencje łączące otwierają się poprawnie w programie Acrobat i innych zgodnych czytnikach
- Otwieranie dokumentów AES-256 próbuje najpierw standardowego przygotowanego hasła i powraca do starszej formy bajtowej, więc pliki zapisane przez wcześniejsze wydania z hasłami non-ASCII nadal się otwierają
Added
- Kod błędu 604 zgłasza hasło AES-256 odrzucone przez SASLprep, ponieważ zawiera zabronione punkty kodowe lub narusza reguły dwukierunkowe
Version 3.301.0
Added
SplitDocumentToFilesdzieli wybrany dokument na partię plików wyjściowych o stałej liczbie stron każdy, używając symbolu zastępczego nazwy pliku%p
Changed
- Dzielenie wsadowe analizuje dokument źródłowy raz i kopiuje każdy fragment z tej samej struktury w pamięci, zastępując powtarzający się pełny ponowny parse, który pętla nad
ExtractFilePageswykonuje dla każdego zakresu
Version 3.300.0
Added
CollateDocumentsscala strony z kilku otwartych dokumentów do wybranego dokumentu rotacyjnie, pobierając konfigurowalną liczbę stron z każdego źródła na rundę (A1, B1, A2, B2, …)CollateDocumentsExprzyjmuje listę zakresów stron dla każdego źródła, w której zakresy malejące, takie jak3-1, odwracają źródło, więc przebiegi skanera przodu i odwróconego tyłu łączą się w porządku czytania w jednym wywołaniu
Changed
- Scalanie importuje każde źródło przez jedną mapę obiektów i przeplata przez zmianę kolejności stron, więc fonty i obrazy współdzielone wewnątrz źródła są zapisywane tylko raz, niezależnie od wielkości grupy
Version 3.299.0
Added
SetDeterministicDocumentIDorazGetDeterministicDocumentIDprzełączają identyfikator pliku trailera na powtarzalną wartość, tak aby identyczne wejścia produkowały identyczne bajty wyjściowe dla pamięci podręcznej budowania, magazynu adresowanego treścią oraz porównania regresji na poziomie bajtówSetDocumentIDSeeddostarcza jawną wartość nasionową dla powtarzalnego identyfikatora pliku; bez nasiona identyfikator jest wyprowadzany z metadanych dokumentu, nagłówka wersji i liczby stron
Changed
- Powtarzalne identyfikatory pliku są odświeżane tylko przy pełnych zapisach; aktualizacje przyrostowe i zaszyfrowane dokumenty zachowują swój istniejący identyfikator, aby podpisy i pliki chronione hasłem nadal otwierały się poprawnie
Version 3.298.0
Added
AddLinkToArticleThreadiSetOutlineArticleThreadłączą hotspoty strony i konspekty z wątkiem artykułu lub koralikiem za pomocą standardowych akcji ThreadAddActionNextArticleThreadiPDF_ACTION_BUILDER_THREADdodają akcje Thread do łańcuchowych przepływów pracy akcji formularza, strony i dokumentu
Changed
- Cele akcji Thread używają stabilnych pośrednich odwołań do wątku i koralika i odrzucają nieprawidłowe indeksy bez zmiany kontenera docelowego
- Konstruktory akcji pola formularza odrzucają dodatkowe akcje, gdy tryb PDF/A jest aktywny, zachowując zakaz PDF/A dotyczący słowników
/AApól i widżetów
Version 3.297.0
Added
- Referencja flat-DLL
DLdokumentuje teraz każdy punkt wejścia ANSI z przyrostkiemA(char), dodając 353 strony dokumentacji, które odzwierciedlają swoje odpowiedniki Unicode z dokładnymi sygnaturamiPAnsiCharDelphi orazconst char *C - Przebudowano
BufferUtilities,DirectAccessFunctionalityorazMiscellaneousFunctionsjako przejrzyste strony indeksowe grup funkcji oparte na wspólnym schemacie kategorii, naprawiając uszkodzone znaczniki, błędnie opisane sekcje i brakujące plakietki - Indeks nawigacji i wspólny indeks wyszukiwania obejmują teraz pełną powierzchnię DLL zarówno dla wywołań Unicode, jak i ANSI
Fixed
- Usunięto przestarzały wpis
SetLogger, który nie miał odpowiadającego symbolu w kodzie źródłowym; udokumentowaną właściwością jestLogger
Version 3.296.0
Added
AddAlternateImage,AlternateImageCount,GetAlternateImageInfoorazRemoveAlternateImagezapewniają typowane tworzenie i inspekcję wariantów obrazu do wyświetlania i drukowania- Obrazy alternatywne mogą być powiązane z grupą treści opcjonalnej lub słownikiem przynależności, a jeden wariant na obraz bazowy może być wybrany jako domyślny do druku
Changed
- Wbudowany moduł renderowania wybiera teraz alternatywne obrazy treści opcjonalnej, gdy obraz bazowy jest ukryty, i uwzględnia wartość domyślną druku w przypadku miejsc docelowych będących drukarkami
FindImagesrejestruje teraz obiekty XObject obrazów alternatywnych osiągalne z zasobów strony, dzięki czemu importowane warianty otrzymują użyteczne uchwyty obrazu
Version 3.295.0
Added
AddArticleThreadtworzy zgodną ze standardami nawigację artykułu z typowanymi metadanymi, uporządkowanymi prostokątami stron, cyklicznymi łączami paciorków oraz tablicami paciorków dla każdej stronyArticleThreadCount,GetArticleThreadInfoorazGetArticleThreadBeadsprawdzają utworzone lub zaimportowane wątki artykułów z ograniczonym przeglądaniem uszkodzonych cykli łączy
Changed
DeletePagesusuwa teraz wątki artykułów, które tracą wszystkie paciorki, oraz naprawia łącza cykliczne przetrwałych wątków- Śledzenie usuniętych stron zachowuje teraz stabilne pośrednie odniesienia do stron, tak aby oczyszczanie konspektu i artykułu nie ulegało przesunięciu wraz z ruchem kursora drzewa stron
Version 3.294.0
Added
SearchTextBatchwyszukuje wiele zapytań tekstowych, gdy każde wyodrębnienie strony znajduje się w pamięci, i zwraca początkowy indeks zapytania oparty na zerze przy każdym trafieniuSearchTextBatchEachzapewnia to samo jednoprzebiegowe wyszukiwanie za pomocą wywołania zwrotnego strumieniowego z raportowaniem postępu i anulowaniem
Changed
- Wyszukiwanie tekstu z pojedynczym zapytaniem i wsadowe współdzielą teraz jeden rdzeń dopasowywania, zachowując semantkę uwzględniania wielkości liter, całych słów i zakresu stron, unikając powtarzania wyodrębniania stron, zwijania tekstu oraz pracy nad geometrią trafień
Version 3.293.1
Fixed
- Rasteryzacja mesh shading nie kończy się już niepowodzeniem kompilacji w żadnej wersji Delphi, rozwiązując
E2089 Invalid typecastprzy rzutowaniach rzeczywistych na zmiennoprzecinkowe w module rysującym GDI+ - Równoległe renderowanie stron wsadowych kompiluje się teraz w Delphi XE5 oraz XE6, gdzie
System.Threadingjest niedostępne; starsze łańcuchy narzędziowe powracają do ścieżki renderowania szeregowego, tak jak na systemach innych niż Windows - Sondowanie możliwości drukarki nie zgłasza już błędu niekompatybilnych typów w starszych wersjach Delphi, dostosowując wywołanie
SetPrinterdo reszty kodu drukowania - Wyliczanie magazynu certyfikatów buduje się teraz w RAD Studio 10.3 Rio, które wcześniej przerywało pracę z wewnętrznym błędem kompilatora podczas optymalizacji procedury wyliczania
Version 3.293.0
Added
- Słowniki przynależności treści opcjonalnej mogą być teraz tworzone, aktualizowane i wyliczane z zasadami zgodności
AnyOn,AllOn,AnyOfforazAllOff - Zagnieżdżone wyrażenia widoczności
/VEz PDF 1.6 obsługująAnd,OrorazNotza pomocą zwartej reprezentacji prefiksowej współdzielonej przez Delphi i C++Builder
Changed
- Zakresy treści opcjonalnej, strumienie treści, przechwycone strony, obrazy, pola formularza i adnotacje akceptują teraz uchwyt grupy lub uchwyt przynależności
- Renderowanie najpierw ocenia prawidłowe wyrażenia
/VE, a w przypadku wyrażeń zniekształconych lub nieobsługiwanych powraca do/OCGswraz z/P
Fixed
- Zagnieżdżona treść opcjonalna nie może już sprawić, że treść będzie widoczna, gdy otaczająca grupa lub przynależność jest ukryta
- Słowniki przynależności bez efektywnych grup treści opcjonalnej pozostawiają teraz widoczność bez zmian, zgodnie z wymogiem specyfikacji PDF
Version 3.292.0
Added
EnumAttachmentsraportuje teraz daty utworzenia i modyfikacji, sumy kontrolne w postaci szesnastkowej, relacje plików skojarzonych oraz numery obiektów specyfikacji plików zarówno dla załączników dokumentu, jak i adnotacjiValidateAttachmentChecksumweryfikuje ładunek załącznika względem zapisanej sumy kontrolnej na żądanie, podczas gdy nowo osadzone pliki otrzymują teraz automatycznie metadane sumy kontrolnej
Fixed
SetEmbeddedFileAFRelationshipakceptuje teraz te same indeksy osadzonych plików oparte na 1 co reszta API załączników, w tym dokumenty z pojedynczym załącznikiem
Version 3.291.0
Added
DeduplicateResourceskonsoliduje teraz dokładnie powielone strumienie obrazów, Form, wzorców, cieniowań, funkcji, profili ICC, programów czcionek, CMap, CharProc Type 3, plików osadzonych, metadanych oraz PostScript w całym załadowanym dokumencie- Deduplikacja zasobów zapewnia niezależne flagi typów, analizę prób na sucho, opcjonalne zbieranie obiektów osieroconych oraz szczegółowe statystyki haszowania, porównań, ładunków, odniesień i według kategorii
Changed
- Wykrywanie duplikatów kanonizuje pełne słowniki strumieni niezależnie od kolejności kluczy, haszuje każdy ładunek kandydata raz przy użyciu SHA-256 i potwierdza pasujące grupy bajt po bajcie przed przekierowaniem odniesień
- Grupy dokładnej równoważności zachowują najniższy numer obiektu i generację dla deterministycznej wyniku, natomiast cykle zniekształconych obiektów bezpośrednich oraz semantyczne różnice słowników pozostają niescalone
Version 3.290.0
Changed
PurgeUnusedResourcesoblicza teraz przechodnie domknięcie zależności obejmujące wzorce kafelkowe, glify Type 3, stany wyglądu adnotacji, grupy miękkiej maski ExtGState, obrazy, cieniowania oraz zagnieżdżone przestrzenie kolorów- Domyślne opcje oczyszczania włączają teraz analizę zależności wzorców, Type 3, wyglądu, miękkiej maski oraz obrazów, z niezależnymi flagami dla wywołań wymagających węższego skanowania
- Zagnieżdżone programy treści i wpisy zależności są buforowane, wspólne zakresy zasobów są prywatyzowane przed przycinaniem, a zniekształcone cykle są ograniczane przez straże aktywnego strumienia i głębokości
Fixed
- Zasoby stron używane wyłącznie przez przestrzenie kolorów obrazów, bazy Indexed, alternatywy Separation lub DeviceN, przestrzenie podległe Pattern, alternatywy ICCBased lub słowniki cieniowań nie są już usuwane jako nieużywane
- Zasoby używane wyłącznie przez CharProcs Type 3, komórki wzorców kafelkowych, wyglądy adnotacji lub grupy miękkiej maski przezroczystości nie są już usuwane z ich własnego lub dziedziczonego zakresu
Version 3.289.0
Added
PurgeUnusedResourcesusuwa teraz nazwane zasoby stron, do których nie odwołują się wybrane warstwy treści, i może zwracać szczegółowe statystyki według kategorii- Oczyszczanie zasobów obsługuje teraz zakresy stron, raportowanie prób na sucho, postęp i anulowanie, rekurencyjną analizę Form XObject, usuwanie przestarzałych ProcSet oraz opcjonalne zbieranie obiektów osieroconych
Changed
- Analiza zasobów uwzględnia teraz rozróżnianie wielkości liter nazw PDF, dziedziczone zasoby Form, niestandardowe przestrzenie kolorów obrazów wbudowanych oraz wszystkie siedem standardowych kategorii zasobów
- Powtórzone programy Form są buforowane, zestawy używanych zasobów wykorzystują wyszukiwanie uporządkowane, a wpisy słowników są usuwane w kolejności malejącej, zapewniając przewidywalną wydajność dla dużych dokumentów
Fixed
- Usuwanie wpisów słowników unieważnia teraz indeksy kluczy dużych słowników, tak aby późniejsze wyszukiwania nie zwracały przestarzałych wpisów
- Zniekształcone strumienie i nieznane operatory zachowują domyślnie swój pełny zakres zasobów, natomiast wspólne lub dziedziczone słowniki zasobów są klonowane przed mutacją
Version 3.288.0
Added
- Podpisy cyfrowe mogą teraz emitować kompletne struktury certyfikacji DocMDP oraz blokowania pól FieldMDP, z raportami uprawnień strukturalnych dla każdego wybranego podpisu
- Znaczniki czasu dokumentu RFC 3161, znaczniki czasu podpisu, wstrzykiwanie tokenów PAdES-B-T, walidacja łańcucha certyfikatów, dowody OCSP oraz materiał walidacji DSS lub VRI posiadają teraz kompletne przepływy tworzenia i weryfikacji
- Adnotacje RichMedia obsługują teraz osadzone zasoby, ustawienia aktywacji i dezaktywacji, wyglądy plakatów, wyliczanie, wyodrębnianie oraz usuwanie
- Drukowanie plakatów obsługuje teraz wektorową impozycję stron, znaczniki nakładki i kadrowania, umieszczanie uwzględniające marginesy fizyczne oraz wielokrotnie używane plany kafelkowania
- Oznaczone tabele emitują teraz semantyczną strukturę Table, TR, TH oraz TD ze stabilnymi identyfikatorami, powiązaniami nagłówków, zakresami, powtarzającymi się nagłówkami oraz zartefaktowaną dekoracją
- Przeglądarka zapewnia teraz dostępną z klawiatury edycję AcroForm dla pól tekstowych, wyboru, pola wyboru, radia oraz przycisku, przy jednoczesnym wywoływaniu akcji do aplikacji hosta
Changed
- Cieniowania mesh oparte na funkcjach Type 1 oraz cieniowania mesh od Type 4 do 7 są teraz renderowane przez natywną ewaluację funkcji i ograniczoną teselację mesh
- Renderowanie kolorów ICCBased współdzieli teraz buforowane transformacje między obrazami i cieniowaniami, zachowując zachowanie skalibrowanej przestrzeni kolorów
- Zapisy przyrostowe przebudowują teraz spójnie strumienie obiektów i strumienie odsyłaczy, a wybrane podpisy są weryfikowane względem ich własnej podpisanej rewizji
Fixed
- Żądania znacznika czasu podpisu SHA-1 haszują teraz wartość podpisu sygnatariusza przy użyciu SHA-1 zamiast powracać do SHA-256
- Odrzucone zastąpienia blokady pola nie odrzucają już wcześniej prawidłowej konfiguracji blokady pola
- Widżety radia ze zduplikowanymi nazwami stanów wyglądu zachowują teraz wybrany widżet i utrzymują wyłączone widżety równorzędne
Version 3.287.0
Changed
- Słowniki obrazów wbudowanych są teraz zgodne z granicami komentarzy, ograniczników, literałów, liczb szesnastkowych, tablic oraz słowników PDF z ograniczonym zagnieżdżeniem
- Ładunki obrazów wbudowanych używają teraz zakończeń uwzględniających format dla danych raw, DCT, ASCII85, ASCIIHex, RunLength oraz Flate
- Wykrywanie ładunku Flate wykonuje teraz jedno ograniczone inflate od przesunięcia strumienia treści z dokładnym rozliczaniem skompresowanych bajtów, natomiast łańcuchowe filtry bezstratne współdzielą kompleksowy limit wyjścia
- Strumienie obrazów ASCII85, ASCIIHex, LZW, predictor, profilu kolorów oraz pomocnicze wymuszają teraz ograniczone wyjście pośrednie bez nadmiernych alokacji tymczasowych
Fixed
- Zniekształcone lub ucięte obrazy wbudowane nie odczytują już danych poza źródłem, nie zapętlają się przy niezakończonych wartościach ani nie zachowują przestarzałego stanu między kolejnymi użyciami dekodera
- Pakowane wiersze obrazów obliczają teraz bity składowych przed zaokrąglaniem do bajtów, zapobiegając nieprawidłowym długościom dla obrazów RGB o niskiej liczbie bitów oraz obrazów wielowierszowych
- Przestrzenie kolorów zasobów zachowują teraz swoje oryginalne nazwy, wywodząc liczby składowych Lab, pośrednich ICCBased oraz DeviceN i dekodując strumienie palet Indexed przy ścisłych limitach
- Granice obrazów wbudowanych odrzucają teraz konsekwentnie nieprawidłowe wymiary, głębokości bitów, nieobsługiwane filtry, niebezpieczne łańcuchy filtrów, skompresowane strumienie oraz niejednoznaczne znaczniki końca
- Renderowanie kolorów Indexed waliduje teraz każdy dostęp do palety i odrzuca ucięte dane wyszukiwania zamiast odczytywać poza zdekodowaną tabelą
- Predyktory PNG od 10 do 15 dekodują teraz poprawnie strumienie Flate i LZW, odrzucają nieprawidłowe filtry wierszy oraz walidują wszystkie rozmiary wierszy i stanów przed alokacją
- Ładunki JPEG oraz JPEG 2000 weryfikują teraz swoje zakodowane wymiary, składowe, precyzję, strukturę znaczników, długości pól oraz zdekodowane zużycie pamięci przed alokacją obrazu
- Walidacja obrazów wbudowanych ogranicza teraz zarówno zapakowane, jak i rozwinięte mapy bitowe oraz ogranicza profile ICC, globalne JBIG2 oraz parametry filtrów terminalnych
- Ładunki filtrów binarnych zawierające osadzony tekst znacznika końca przechodzą teraz do pierwszego kandydata, który przejdzie ograniczoną walidacją formatu
Version 3.286.0
Changed
- Content stream tokenization now follows PDF whitespace, comment, delimiter, literal string, hexadecimal string, and name boundaries
- Text splitting and resource replacement now use geometrically grown output buffers for linear processing of large content streams
- Reusable content stream processors now reset derived output and parser state before every
Processcall
Fixed
- Malformed or truncated literal and hexadecimal strings no longer read beyond the source buffer or emit an extra empty token
- Resource replacement now preserves case-sensitive PDF name semantics, accepts optional leading slashes, and updates duplicate mappings deterministically
- XObject and shading operands at the beginning of a stream are now excluded from text output, while unmatched restore operators no longer cancel later saved graphics states
Version 3.285.0
Changed
- LZW encoding now uses constant-time dictionary lookup and buffered stream writes, while decoding uses compact prefix and suffix tables with geometric output growth
- Flate predictor decoding now processes rows directly in the output buffer and supports packed, 8-bit, and 16-bit TIFF samples with arbitrary colour counts
- Stored Deflate streams now write into an exact pre-sized result, and zlib wrappers release temporary buffers safely when compression or decompression fails
Fixed
- LZW code-width changes now follow PDF
EarlyChangesemantics across 9-bit through 12-bit codes, including dictionary resets andEarlyChange=0 - LZW decoding now rejects invalid future codes and truncated bit streams without reading beyond the source buffer
- PNG predictors now use the ceiling byte width of a pixel, preserve previous decoded rows, and safely pad a partial final row
- TIFF predictor decoding now handles 1-bit, 2-bit, 4-bit, 8-bit, and 16-bit components consistently in both LZW and Flate paths
Version 3.284.0
Changed
- Buffer searches now scan fixed 64 KiB blocks, use byte lookup tables for set membership, and preserve the caller's position across every search path
- Unicode, Latin-1, hexadecimal digest, and ARC4 conversions now reserve bounded output once instead of repeatedly growing strings or temporary arrays
- ASCII85 encoding now reads input streams in 32 KiB blocks, while decoding uses exact integer arithmetic and writes directly into a pre-sized output buffer
- MD5 string hashing now avoids a temporary memory stream, digest comparison examines every byte, and ARC4 key scheduling no longer allocates an expanded key array
Fixed
DistanceToAnyBytenow returns the correct offset beyond its first block instead of rereading the same prefix and overcounting skipped bytes- Stream-backed buffer reads now honour the actual byte count returned by custom streams, shrinking results and advancing positions only by bytes received
- Buffer length reductions now clamp the current position, and nil pointer or stream sources behave as empty inputs instead of exposing invalid memory
- Latin-1 decoding now maps the complete byte range 0x00-0xFF instead of replacing bytes 0x7F-0xFF
- ASCII85 decoding now preserves the valid maximum 32-bit group
s8W-!and stops at the first end marker without floating-point boundary loss
Version 3.283.0
Added
TPDFlibSignatureVerifiercan now enumerate signature fields and CMS signers, open files, streams, or strings, and verify a selected field and signer by index or field name- Detailed verification reports now separate cryptographic integrity from signed-revision coverage, current-file coverage, later revisions, strict Contents-gap validation, and native crypto errors
Changed
- Detached CMS validation now streams both ByteRange segments through Windows CryptoAPI in bounded chunks instead of materialising the complete PDF in memory
- Signature fields under nested AcroForm Kids arrays and inherited
/FT /Sigentries are now enumerated with fully qualified names, and direct signature value dictionaries are supported
Fixed
- ByteRange validation now rejects overflow, overlap, truncation, a gap that is not exactly the selected hexadecimal
/Contentstoken, and a signed revision that does not end at its own%%EOF - Certificate lookup no longer falls back to an unrelated embedded certificate when the selected CMS signer identifier has no exact issuer-and-serial match
- Incremental updates that use cross-reference streams now include the cross-reference stream object's own type 1 entry, preventing strict PDF validators from reporting a missing self entry after signing
Version 3.282.1
Changed
- Full saves now rebuild imported object streams from the live object graph, preserve private trailer roots, and retain free-object generations without reusing structural object numbers
- Cross-reference streams now size their offset fields for large files, preallocate their payload, include their own entry, and preserve trailer extension keys
Fixed
- Object-stream packing now writes real
/ObjStmcontainers and type 2 member entries instead of only switching to an xref stream - Garbage collection no longer writes missing object numbers as in-use entries at offset zero and now emits a linked free-object chain in both plaintext and stream cross-references
- Loaded packed PDFs can now be saved repeatedly with packing enabled or disabled without retaining stale object streams, losing live members, or requiring cross-reference repair
Version 3.282.0
Added
- Imported ICCBased colours now use the embedded ICC profile across vector painting, function and mesh shadings, indexed palettes, raw bitmap, CCITT and JBIG2 images, CMYK JPEG images, and JPEG 2000 images
Changed
- ICC transforms now use a bounded Windows Color System lookup table with multilinear interpolation, replacing the temporary PNG round trip used during image rendering
- The renderer now honours content-stream and graphics-state rendering intents, ICCBased
/Range, image/Decode, and original-domain colour-key masks while validating profile channel counts against the PDF colour-space dictionary - Repeated uses of the same profile and rendering intent now share one lookup table across vector colours, patterns, shadings, and images
Fixed
- Encrypted ICC profile streams are now decrypted only while decoded and restored afterward, and embedded profiles are no longer compressed twice while writing image output
Version 3.281.0
Added
- The built-in GDI+ renderer now paints imported PDF function-based shadings and free-form, lattice, Coons, and tensor mesh shadings (types 1 and 4-7), including transparency and clipping
- Shading dictionaries now support component Function arrays, calibrated Lab, CalGray, and CalRGB spaces, Separation and DeviceN tint transforms, PatternType 2 Background fills, and BBox clipping across the GDI+ and Cairo renderers
Changed
- Type 1 shading functions now use bounded adaptive colour sampling with additional quarter-cell probes for higher narrow-feature accuracy and lower work on constant or smooth regions
- PatternType 2 matrices around mesh shadings are now composed exactly once in both GDI+ and Cairo, preserving translated, scaled, and rotated pattern placement
- Mesh colour components are now interpolated in their source colour space before Function evaluation and conversion to RGB, preserving nonlinear functions, DeviceCMYK gradients, and the correct ordering for managed colour transforms
- Coons and tensor surfaces now use bounded device-pixel error subdivision for smoother high-curvature output at large render sizes
- Encrypted shading and Function streams are decoded through the document crypt callbacks, and Type 5 vertex records honour their required byte alignment
Version 3.280.1
Fixed
MergeFileList/MergeFileListFast/MergeFileListStrictleaked aTSmartPDFReader/TSmartPDFDocumentpair (and everything they own) when a non-PDF file appeared in the merge list: the reader and document were constructed before thetryblock that frees them, so a parse failure on the malformed file's content orphaned the already-constructed reader instead of being cleaned up by the surrounding exception handler; construction now happens inside the protectingtryin both the single-file and multi-file prescan paths- Mesh shading parsing (
TPLMeshShading.Parse, shading types 1 and 4-7) leaked the decoded/Functionobject on every parse - every early-exit path and the normal completion skipped freeing it; the function is now released in afinallyblock regardless of howParseexits TPDFlibSignDoc.Closenow nils its smart-reader/document/info fields after freeing them, and the exception paths inOpen,OpenStreamandOpenStringnow release any partially-constructed smart objects instead of only clearing the stream reference, preventing a leak when opening a signing target fails partway through
Version 3.280.0
Added
- Error category enumeration
TPDFlibErrorCategory(ecSuccess/ecStructure/ecSave/ecCrypto/ecGeneric/ecCompliance/ecAcroForm) layered on top of the existing numericLastErrorCodetaxonomy, so callers can classify failures without memorising code ranges; exposed viaTPDFlib.LastErrorCategory,TPDFlib.ErrorCategory(Code)andTPDFlib.ErrorMessage(Code) - Form-field error codes 701-704 (field not found, field read-only, no AcroForm, invalid value) with human-readable messages, letting callers distinguish "field is locked" from "no such field" instead of receiving a single generic failure
SetFormFieldValueForcedforce-write variant that bypasses the read-only guard, used internally bySetFormValues(SkipReadOnly=False)so bulk imports can still overwrite locked fields when the caller explicitly opts out
Changed
SetFormFieldValuenow setsLastErrorCodeto 701/702/703 on failure (field not found / read-only / no AcroForm) instead of returning 0 silently;LastErrorCategoryis a non-consuming read so callers can inspect the category before retrieving the numeric code
Version 3.279.0
Added
ReplacePageRangesreplaces visual page content from another open document without changing the target page count or target page object identities, preserving bookmarks, links, annotations, and form widgets already attached to those pages
Changed
- Cross-document page copying no longer creates and removes an extra placeholder page before importing the requested range
Version 3.278.0
Added
PrintPagesAdvancedapplies copies, collation, duplex, orientation, color, quality, paper-size and input-bin settings to arbitraryPrintPagesrange expressions while retaining one printer profile and one print job
Changed
- Advanced print settings are validated before the job starts, positive print-quality values above the four named presets are applied as DPI, and paper or input-bin identifiers may use the full positive range supported by the corresponding
DEVMODEfields
Fixed
- Damaged cross-reference recovery now dispatches its bounded block reads through the traditional
TStream.Readoverride on Win64, preserving instrumentation and custom-stream behavior while retaining 64 KiB sequential I/O
Version 3.277.0
Changed
- Damaged cross-reference recovery now scans source data in 64 KiB sequential blocks instead of seeking once for every matching character, keeping auxiliary memory bounded while scaling to large PDF files and non-memory streams
- Recovery validates complete indirect-object tokens, skips object-like data inside comments, strings, and streams, confirms stream endings with a following
endobjtoken, preserves headers split across read boundaries, and selects the last valid trailer dictionary
Fixed
- Trailer reconstruction now supports nested dictionaries and delimiter text inside literal strings and is no longer truncated to the first 2048 bytes or the first apparent
>>pair
Version 3.276.0
Added
ActivateWebLinksandActivateWebLinksExscan existing page text once per page and create non-duplicate URI link annotations for HTTP, HTTPS,www., FTP,mailto:, and bare email targets with selectable detection and border options- Generated links use matched-character geometry, precise quadrilaterals for rotated or skewed text when permitted, PDF/A print flags, progress and cancellation support, and selected-page restoration; tagged PDF and PDF/UA documents are protected from incomplete structure-tree updates
Changed
SetAutoCreateWebLinksnow uses the same boundary-aware detector and target normalization when creating links for newly drawn text, addingwww., FTP, and bare email support
Fixed
- Updating annotation
/Contents, name, date, title, or subject properties no longer overwrites the subtype of an existing action dictionary, so URI and other actions remain valid after annotation metadata changes
Version 3.275.0
Added
ExtractPageRangeText,SavePageRangeTextToStream, andSavePageRangeTextToFileextract a parsed page range in one traversal with caller-defined page separators; stream and file output writes UTF-8 data incrementally so large documents do not require a complete document-sized text bufferSetPageBoxRangeandRemovePageBoxRangeapply page-boundary changes across the standard page-range syntax while preserving the caller's selected pageSetPageTransitionRangeandSetPageTransitionRangeExapply legacy or extended presentation transitions to page ranges with per-page progress and cancellation supportGeneratePageThumbnailsrenders requested pages directly into reusable memory and attaches their/Thumbimages without intermediate files or nested progress operations
Version 3.274.0
Fixed
- GDI+ rendering of axial shading patterns now honours the PDF
/Extendarray:SetupGDIPlusPatternpassesWrapModeClampwhen either end is extended (matching the Cairo backend) instead of always usingWrapModeTile, so end colours paint the area outside the gradient axis correctly
Added
- The scroll-hint bubble (
"Page N / M") shown while dragging the vertical scrollbar now auto-hides after 3 seconds of inactivity via aWM_TIMERhandler, so it no longer lingers until a separate scroll event dismisses it ZoomInStep/ZoomOutStepnow snap ontoActualSize(100%),FitWidthandFitPagepercentages when they fall between the current zoom and the next preset on the 14-step ladder, matching the behaviour of professional PDF viewers- The viewer disk page cache writes a build-version marker (
cache.version) and wipes the whole cache root when the library version changes, so a build upgrade never reuses stale bitmaps rendered by an older code path
Version 3.273.1
Fixed
- Object-stream container and xref-stream objects created during save were leaked because they bypassed
TPDFStructure.AddObjectregistration; both call sites now use theNewStreamWithDictownership-tracking factory, eliminating theTPDFStreamleak reported by the test runner underReportMemoryLeaksOnShutdown - Cross-reference stream
/Sizewas off by one: it must be one past the highest object number in the whole file, and the xref stream is itself an indirect object numberedMaxObj+1, so/Sizeis nowMaxObj+2
Changed
- Peephole content-stream optimiser now also removes identity text-matrix operators (
1 0 0 1 0 0 Tm), covering bothcmandTmwith the same six-operand identity check - Mark-sweep GC preserves object 1 (the
/Linearizedparameter dictionary) when the source document was loaded linearized, since that dictionary is never referenced from/Rootbut must survive
Version 3.273.0
Added
- Object-stream packing on save (
TPDFDocument.PackObjectsIntoStreams) collects eligible non-stream indirect objects, serialises them into PDF 1.5 object streams (/Type /ObjStm) with Flate compression, and emits a binary cross-reference stream (/Type /XRef) carrying type-0, type-1 and type-2 entries, reducing the size of saved files 10-40% on object-dense documents TPDFlibSaveOptions.PackObjectStreamsflag plusTPDFlib.SetPackObjectStreams/GetPackObjectStreamsAPI; defaults to enabled, auto-gated by PDF version (1.5+ activates packing and xref streams, 1.4 and below keep the traditional plaintext xref for compatibility), andTPDFlib.GetLastSaveUsedObjectStreamsreports whether the last save actually packed
Version 3.272.0
Added
- Mark-sweep garbage collection of unreferenced indirect objects (
TPDFDocument.GarbageCollectUnusedObjects) walks the object graph from the trailer roots (/Root,/Info,/Encrypt) and removes every indirect object that is not reachable, stopping the file-size growth that accumulates when pages are deleted and their font, content and XObject resources become orphans TPDFlibSaveOptions.GarbageCollectflag plusTPDFlib.SetGarbageCollect/GetGarbageCollectAPI let callers opt in to GC during a full save (defaults to off for backward compatibility), andTPDFlib.GarbageCollectObjectsruns GC immediately and returns the number of orphaned objects removed
Version 3.271.0
Added
- Peephole content-stream optimiser (
TPDFContentPeepholeOptimizer) rewrites a parsed page content stream before Flate compression, removing semantically redundant PDF operators: identitycmmatrices, emptyq/Qpairs, emptyBT/ETobjects, no-op paths terminated bynwith no clip, duplicate graphics-state setters (colour, line width, cap/join, dash, text state), and deadnafter a painting operator - all transforms are output-equivalent so visible page output is unchanged TPDFlibSaveOptions.OptimizeContentStreamsflag and matchingTPDFlib.SetOptimizeContentStreams/GetOptimizeContentStreamsAPI let callers opt in or out of the peephole rewrite duringCompressContent/CompressPage; enabled by default
Changed
TPDFDocument.CompressPagenow forwards the optimisation flag to the page tree so the peephole pass runs insideTPDFPageTree.Compressbefore the existing Flate compression, stacking operator-level reduction on top of byte-level compression
Version 3.270.0
Added
- New
PLParseDefaultAppearancedecodes a/DAdefault-appearance byte string (ISO 32000-2 12.7.4.3) into the font resource name, font size and fill colour, covering therg,kandGcolour operators so form-field and annotation appearance generators can paint text with the author-intended styling
Changed
- Page content-stream assembly (
TPDFRenderer.GetContents) now concatenates multi-part/Contentsarrays through aTStringBuilderinstead of repeatedResult := Result + chunk, removing the O(n^2) string growth that penalised pages with many content-stream parts
Version 3.269.0
Added
- New
BeginMarkedContent/EndMarkedContentwrite inline marked-content sequences with accessibility properties (/Alt,/ActualText,/Lang,/E) directly in the BDC property list per ISO 32000-2 14.9.2–14.9.5, so screen readers and accessibility tooling can read substitute text without a structure-tree entry - Annotation reader exposes
GetAnnotEffectiveBorderimplementing the Errata #287 precedence (border style dict/BSwins over the legacy/Borderarray) and resolving width, style and dash pattern into one call - Signature documents expose
GetSignatureSeedValueto read the seed-value dictionary (/SV, ISO 32000-2 12.7.5.5 Tables 236–237): required filter, allowed SubFilters and allowed digest methods, so a signer can honour the constraints the author embedded GetSignatureFieldLockreads the/LockFieldMDP seed dictionary (Table 238): action (/All,/Include,/Exclude) and the affected field names that must be locked at sign time
Version 3.268.0
Added
- New
PLParsePDFDateparses ISO 32000-2 7.9.4 date strings (D:YYYYMMDDHHmmSSOHH'mm') into a localTDateTime, honouring the mandatoryD:prefix, the field-dependency ladder (each field only when all preceding fields are present) and the UT offset (+/-/Zwith optional apostrophe-minute), returning the local equivalent of the documented instant - Text-string decoding (
PLDecodeTextString) now recognises the PDF 2.0 UTF-8 BOM (EF BB BF) per 7.9.2.2.1, so UTF-8-authored metadata decodes correctly instead of being misread as PDFDocEncoding - File specifications expose
GetFileNamehonouring the PDF 2.0 precedence (Path > UF > F) per Errata #444, plusGetEmbeddedFileStreamandGetRelatedFilesaccessors for the/EFand/RFdictionaries - Annotation readers expose appearance-precedence helpers
GetAnnotNormalAppearance,GetAnnotDefaultAppearanceandGetAnnotOffStateAppearanceimplementing the Errata #23/#34/#42/#170 rules (AP/N is authoritative; DA is the byte-string fallback; Off state lives under the nameOff) - PDF/UA validation reports a new code 10045 when a non-standard structure type fails to terminate at a standard type through the role-map chain (ISO 14289-1:2014 7.1), with cycle protection to a depth of 8
- PDF/A and PDF/UA font audits now validate that embedded CIDFontType2 fonts carry a
/CIDToGIDMapwhose value is either the nameIdentityor a stream, not merely present (ISO 32000-1 9.7.4)
Changed
- Name-tree lookup (
NameTreeLookup) now binary-searches the sortedNamesarray per ISO 32000-2 7.9.6 before falling back to a linear scan, turning large EmbeddedFiles/JavaScript/Dests lookups from O(n) into O(log n) on conformant files - PDF/UA standard-structure-type set expanded with PDF 2.0 additions (
Artifact,DocumentFragment,FENote,MarkedContent,Title) so the role-map no-remap and chain-termination checks recognise the full tag vocabulary
Version 3.267.0
Added
EnumPageContentStatesExcan recursively enumerate Form XObject instructions with configurable depth, cycle protection and depth-first execution ordering- Content snapshots now expose invocation-tree identity, containing stream and parent XObject information, resource-scope identity, Form traversal status and descendant counts
- Standalone content trackers can register scoped fonts and initialise isolated Form execution state with matrix concatenation and bounding-box clipping
Changed
- Recursive content tracing selects each Form resource dictionary independently, inherits invoking resources for compatible legacy Forms, preserves inherited font identity and caches decoded Form programs across repeated invocations
Version 3.266.0
Added
- Text runs returned by
GetTextRunsnow carry the glyph origin (OriginX/OriginY) and the full text matrix components (Tm11/Tm12/Tm21/Tm22/TmDX/TmDY) captured by replaying BT, Td, TD, Tm and T* alongside the show operators, so consumers can locate glyphs without a separate text-funnel pass - Mesh shading decoding now routes Lab, CalRGB and CalGray colour spaces through the colour manager instead of falling through to black, producing correct fills for non-DeviceRGB free-form and coons patches
- Redaction now emits a real
/Subtype /Redactannotation with/Rect,/ICinterior colour and optional overlay text alongside the existing content removal, so redaction-aware viewers mark the sanitized region - Library operations emit structured log records at load and save boundaries through the previously dormant
Logger, with ISO-8601 UTC timestamps and a cachedTStreamWriterfile sink that no longer reopens the log file on every line - New
Tests.Memoryfixture guards create/draw/save/free andNewDocumentcycles against heap regression, and the console test runner now enablesReportMemoryLeaksOnShutdown - EMF interpretation now counts unknown or private records via the
UnknownRecordCountproperty so silent metafile gaps are observable
Changed
- Dictionary key lookup (
TPDFDictionary.FindIndexByKeyName) builds a lazy open-addressing hash index for dictionaries with more than 16 entries, turning the linear scan that dominated renderer Resources/ColorSpace/Font/ExtGState lookups into an O(1) probe - sRGB gamma conversion (
XYZ2RGB) uses a shared 4096-entry lookup table instead of threePower(x, 1/2.4)calls per pixel, and Lab-to-XYZ cubing now uses direct multiplies; both are the dominant per-pixel cost when decoding Lab or ICC-based images - Page lookup (
TPDFPageTree.GetPage) returns the cached page dictionary on repeat access instead of re-walking the page tree every call - Content-stream operator dispatch (
ContentOperatorFromName) buckets the 73 operators by first byte, cutting the per-token linear scan to a short residual compare - PDF/A colour-space audit now recurses into the base or alternate space of Indexed, Separation, DeviceN and ICCBased up to a depth of 8, so a hidden DeviceCMYK tint transform or bare Lab name is flagged rather than passing silently
- Shaped-font finalize now walks the used-glyph set recorded at draw time instead of scanning all 65536 glyph slots four times per save
- String escape routines (literal-string, XFDF, stamp and variable token expansion) build output through
TStringBuilderor two-pass allocation, removing O(n^2) concatenation from save and form-export hot paths - AES stream encrypt/decrypt reuse their chunk buffer across loop iterations instead of reallocating per block
- Composite-glyph parsing in the TrueType parser grows the components array geometrically instead of one element at a time
- Mesh shading
ReadBitsreads the minimum covering bytes in one pass andWriteBitspre-sizes the output buffer, eliminating per-bit reallocation - Painter circle control point uses a precomputed kappa constant and arc squaring uses
Sqrinstead ofPower
Fixed
- Fixed a non-Windows compile break in
PDFlibParallelwhere the stub body signature forPDFlibRenderPagesParalleldid not match the interface declaration
Version 3.265.0
Added
- Added 59 C++Builder console demos to align the C++Builder demo suite with Delphi, bringing the total from 33 to 92 demos covering the same API surfaces
- Added Demo/C++Builder/index.html expansion from 35 to 92 entries with Navigation, Color & ICC, Barcode & media, and Structure & compliance sections
Fixed
- Fixed all 33 existing C++Builder cbproj files that were missing 20 library units (PDFlibMeshShading, PDFlibGraphics, PDFlibWindows, PDFlibParallel, PDFlibLogger, PDFlibMail, PDFlibViewer, etc) from their DelphiCompile list, which prevented every C++Builder demo from compiling
Version 3.264.0
Added
- Content graphics-state snapshots now resolve
Dooperands as image, form or PostScript XObjects and report their resource names, object numbers and transformed bounds - Form snapshots expose the original
/Matrixand/BBoxtogether with resource, group, transparency-group and reference-form indicators - Standalone content trackers can pre-register XObject streams through
RegisterXObject
Changed
- Page content-state enumeration now precompiles selected-page XObject resources and calculates invocation bounds from all four transformed corners
Version 3.263.0
Added
- Content graphics-state snapshots now expose current path bounds, current point, path complexity, pending clipping rules and effective clipping bounds
- Standalone content trackers can initialise an explicit clipping boundary through
SetInitialClipBounds
Changed
- Page content-state enumeration now follows delayed
WandW*clipping, exact transformed cubic extrema,q/Qclipping restoration and selected-pageCropBoxboundaries
Version 3.262.0
Added
- Content graphics-state snapshots now report font writing mode, exact per-instruction text displacement and whether font metrics were resolved
- Standalone content trackers can provide font measurements through
OnMeasureText
Changed
- Page content-state enumeration now advances text matrices for
Tj,TJ,'and"using simple or composite font metrics, horizontal scaling, spacing and vertical writing rules
Version 3.261.0
Added
- Content graphics-state tracing can now resolve page
ExtGStateresources, including transparency, blending, overprint, soft masks, device controls and embedded font references TPDFContentStateTrackercan pre-register external graphics-state dictionaries for standalone content-program analysis
Changed
- External graphics-state parameters now apply cumulatively and participate in complete
q/Qsave and restore snapshots
Version 3.260.0
Added
- Added single-pass effective graphics-state tracing for structured content programs and complete selected pages
- Snapshots expose CTM, text matrices, line style, dash pattern, colours, text state and graphics-state stack depth before or after each instruction
Changed
- Image placement enumeration now maps all four unit-square corners, producing correct bounds under rotation and shear
Version 3.259.0
Added
- Added typed time, special-pattern and arbitrary-mask helpers for interactive form fields
- Added range validation with independently optional zero-safe bounds
- Added sum, average, product, minimum and maximum field calculations with automatic calculation-order registration
Security
- Generated JavaScript string values now escape quotes, backslashes, control characters and JavaScript line separators
Version 3.258.0
Added
- Added typed
SetOCGStateaction creation for form-field events, existing actions and action chains - Optional-content actions preserve left-to-right state changes, repeated groups and the optional radio-button relationship preference
Changed
- Optional-content action enumeration now returns canonical group handles that round-trip through the writer APIs
Version 3.257.0
Added
- Added complete explicit remote-destination writing with zero-based pages, all standard fit types, nullable XYZ values and tri-state window preferences
- Added complete launch-action writing for portable files, Windows parameters, default directories and open or print operations
- Existing action handles can now update these payloads or append them to action chains without container-specific duplicate APIs
Security
- Remote go-to and launch action builders now reject PDF/A mode before modifying an action chain
Version 3.256.0
Added
- Remote go-to action inspection now reports named and explicit destinations, zero-based target pages, fit types, coordinates and zoom values
- Launch action inspection now reports Windows application parameters, default directories and open or print operations
- Action information distinguishes an absent
/NewWindowpreference from an explicit false value and identifies array-based targets
Version 3.255.0
Added
- Added typed builders for remote named-destination and external application launch actions
- URI action builders now support coordinate-map requests through the standard
/IsMapflag - The new action kinds work across lifecycle, form-field and chained-action APIs through the existing extended builder interface
Version 3.254.0
Added
- Added 14 Delphi API-coverage demos for library surfaces that had no dedicated demo: OutlineBuilder, NamedDestinations, DocumentActions, EmbeddedFiles, LinearizeDemo, BarcodeGallery, XfaFields, TaggedPDF, OutputIntent, HtmlTextFlow, RichMediaAnnotations, MailSendDemo, TextBlockExtraction, and PadesDssDemo
- Added a Navigation section, Color & ICC section, Barcode & media section, and Structure & compliance section to the Delphi demo index, bringing the total from 56 to 92 listed demos
- Added Readme.en-us.html guides for the 20 demos that previously shipped without one
Changed
- Applied the project Formatter.config across all Delphi demo sources so operator spacing, indentation, and keyword casing follow one style, and set NewLineBeforeThen to False so If...Then stays on a single line
- Hardened error handling across the classic GUI demos: SaveToFile return values are now consistently checked, TPDFlib and secondary object lifetimes are always protected by try/finally, and failure messages include LastErrorCode
Fixed
- Fixed inverted SaveToFile polarity in ImageToPdf that treated success as failure, and stopped AddTrueTypeSubsettedFont from opening a stale file when the save failed
- Fixed resource leaks in CreateWithImageToStream, DoInTheStream, CanvasText, ExtractText, ExtractImage, PdfDecrypt, PdfEncrypt, and PdfPermission where TPDFlib, TStream, TBitmap, TOpenDialog, or TStringList instances could escape on an exception path
- Removed dead code in AddFormattedTitle (unused RectParts allocation, redundant try/except around StrToFloatDef) and MultiFunction (overwritten SetTextSize call)
Version 3.253.0
Added
- Added typed action details for thread, sound, movie, optional-content, rendition, transition and 3D-view actions
- Added reusable action-handle lookup and ordered optional-content state enumeration
- Added complete PDF transition records covering replacement, Fly, Push, Cover, Uncover and Fade styles
Fixed
- Wipe and Glitter transitions now store their direction in
/Di, read page display duration from the page dictionary and clear both transition and timing entries - Standard pre-PDF-1.5 transition styles no longer force a PDF 1.5 output version
Version 3.252.0
Added
- Added single-pass form-field action discovery with typed action details across primary, widget and field triggers
- Added complete calculation-order enumeration, per-field lookup and removal for interactive forms
- Extended bulk form-field snapshots with calculation order and action count
Changed
- Widget lifecycle triggers now support page-open, page-close, page-visible and page-hidden actions with the required PDF 1.5 version handling
Version 3.251.0
Added
- Added single-pass named-destination enumeration across legacy catalog entries and modern name trees with resolved page and view parameters
- Added named-destination removal, complete push-button captions, button text positioning and form-field mapping names
- Extended bulk form-field snapshots with mapping names, button captions and button text position
Fixed
- Name-tree editing now supports direct destination values and uses unambiguous multi-node index encoding
Version 3.250.0
Added
- Added single-pass form field snapshots with field identity, type, page, flags, values and Choice state
- Added typed Choice-field flag queries plus validated selected-index and top-visible-index accessors
Fixed
- Single-selection Choice fields no longer retain a multi-selection
/Iarray, and switching from multi-select to single-select now replaces the old/Varray with a string value
Version 3.249.0
Added
- Added one-pass stateful text search traversal so applications can iterate cached hits without extracting pages twice
- Added bulk form value export and name-based application with optional read-only field protection
Version 3.248.0
Added
- Added retained Viewer selections with page-space geometry, extracted text, enumeration, clearing and a vetoable marquee event
- Added exact current-viewport bitmap capture and file output including persistent overlays
Version 3.247.0
Added
- Added independent Viewer controls for user form editing and annotation activation
- Added configurable foreground colour for text and choice form editors
Version 3.246.0
Added
- Added typed line ending styles, shape interior colours, link highlight modes, FreeText alignment, Text annotation open state and Caret symbols
- Annotation setters validate compatible subtypes and automatically raise the minimum PDF version where required
Version 3.245.1
Fixed
- Corrected FastReport export page sizing and memo layout so A4 reports retain their intended scale, text stays within memo bounds and unconfigured memo frames remain hidden
Version 3.245.0
Added
- Added
OnPasswordso applications can supply another password after an encrypted document rejects the initial credential - Password retries now work consistently for file, stream and string loads, expose the next attempt number and allow the handler to cancel
Security
- Password callbacks are limited to sixteen total attempts and every retry uses a fresh parser and decryption state
Version 3.244.0
Added
- Added
SetXMPPropertyExfor safely writing scalar properties in caller-defined XMP namespaces - Custom XMP values are escaped through the XML DOM, repeated writes replace the matching namespace property and invalid or reserved XML names are rejected
Version 3.243.0
Added
- Added typed document lifecycle actions for before close, before save, after save, before print and after print triggers
- Added typed page open and close actions with shared support for URI, named, JavaScript, form and destination action builders
- Added action inspection and removal methods for every document and page lifecycle trigger
Version 3.242.0
Added
- Added
SaveChangesto append changes to the originally loaded file and automatically reload the updated xref chain for repeated incremental saves SaveChangesvalidates the reload password before writing and preserves the selected public document handle after reload
Changed
AppendToFilenow rejects a target whose current length differs from the loaded source, preventing stale incremental offsets from being appended to an externally changed file
Version 3.241.0
Added
- Added
GetLastOutlineandGetLastChildOutlinefor direct access to the tail of a bookmark list - Added
GetOutlineChildCountandGetOutlineSiblingIndexfor lightweight bookmark tree inspection without allocating a full tree snapshot
Version 3.240.0
Added
- Added
SaveAllAttachmentsExwith overwrite, skip and automatic rename conflict policies plus a per-attachment naming callback - Attachment exports now reduce requested names to safe leaf names and protect Windows reserved device names
Fixed
- Fixed
SaveAllAttachmentsreturning without writing files because its attachment snapshot was counted but not allocated and populated
Version 3.239.0
Added
- Added
OnPageMouseDown,OnPageMouseMoveandOnPageMouseUpso Viewer hosts receive one-based page numbers and top-down PDF point coordinates independent of zoom, scrolling and view rotation - Added
RegionAtClientPoint,ActiveRegionandOnActiveRegionChangeto distinguish links, non-link annotations and form fields as the pointer enters or leaves them - Added
CreatePDFlibViewerDefaultPopupMenuandInstallPDFlibViewerDefaultPopupMenu, which compose the existing Viewer action classes into a ready context menu for copy, zoom, fit, rotate, navigation, save and print
Version 3.238.0
Added
- Added
OnOperationProgresswith typed operation kind, lifecycle phase, current and total units, percentage and detail text while preserving the classicOnProgresspercentage callback - Load, save, search, merge and page-render file, stream and string entry points now report starting and terminal phases; operations with intermediate progress also report
opRunning - Setting
CancelduringopStartingoropRunningactivates the existingAbortstate, providing one cancellation path for old and new callers
Fixed
LoadFromFilenow preserves error code 404 for a wrong password instead of overwriting it with the generic load error 401 after cleanup
Version 3.237.0
Added
- Added
SearchTextEachandTPDFlibSearchHitEventto emit every text hit immediately without allocating or sizing a result array SearchTextandSearchTextEachnow report page progress throughOnProgressand honour bothAbortand callback cancellation; callback cancellation uses the existing abort state untilResetAbort- The Viewer search panel and search-highlight layer now consume the streaming API in one pass, removing their former 256-row and 512-highlight limits
Fixed
- Whole-word search now continues past an earlier substring occurrence in the same text block to find a later correctly bounded match
Version 3.236.0
Added
- Added
GetPrinterCapabilitiesto capture a live printer-driver snapshot without starting a print job - The typed
TPDFlibPrinterCapabilitiesresult includes paper IDs, names and millimetre dimensions, input-bin IDs and names, duplex, colour, landscape and collation support, the printer port and the maximum driver-reported copy count - Drivers that omit paper or bin metadata still return the remaining capabilities with empty arrays, while invalid printer names return a fully cleared snapshot
Version 3.235.0
Added
- Added
SendDocumentByMailfor saving the loaded document to a temporary PDF and delivering it as an SMTP attachment through the built-in Windows CDO provider - Added the reference-counted
IPDFlibMailProviderextension point so applications can supply another transport, support non-Windows hosts and test mail workflows without network access - Each send uses an isolated temporary directory, sanitises the attachment display name and removes both the PDF and its directory after the provider returns;
GetLastMailErrorreports validation, save, transport and platform failures
Version 3.234.0
Added
- Added variable placeholders to stamp, header and footer text:
<%PageNo%>,<%TotalPages%>,<%ShortDate%>,<%LongDate%>,<%ShortTime%>and<%LongTime%>expand per page alongside the classic &-tokens - Any custom
<%name%>placeholder resolves through the newOnCalcVariableevent, which receives the name and the page number and supplies the replacement - running numbers, batch codes and client fields stamp without pre-processing the text; without a handler unknown placeholders stay verbatim
Version 3.233.0
Added
- Added superscript/subscript detection to text extraction: the new
GetTextBlockVAlignreports each extracted text block's baseline classification (0 = baseline, 1 = superscript, 2 = subscript) relative to its visual line, so chemical formulas, exponents and footnote markers can be recognised - A block classifies as super-/subscript when it is markedly smaller than the line's dominant text and its vertical centre sits above/below the dominant centre within one text height
Version 3.232.0
Added
- Added character-level word splitting to text extraction:
SetTextExtractionOptions(17, 1)re-splits show-text runs that carry no space characters into words wherever a per-character advance step is much wider than the run's median glyph advance - documents that paint whole lines as a single operator with kerning gaps standing in for spaces now extract as separate words inGetPageTextmodes 7 and 9-11 - The advance arrays stay aligned with the widened text, so block quads and per-character width outputs remain consistent
Version 3.231.0
Added
- Added layout-preserving fixed-grid text export:
GetPageText(11)maps the page geometry onto a monospace character grid - rows cluster by baseline, every block lands at its column computed from the average character width, and shorter cells pad with real spaces - so tables and forms keep their visual alignment in plain-text viewers, terminals and diffs without relying on tab stops - The reference page for
GetPageTextnow documents the reading-order (9), tab-separated table (10) and fixed-grid (11) modes
Version 3.230.0
Added
- Added dehyphenation to text extraction:
SetTextExtractionOptions(16, 1)re-joins words hyphenated across line breaks ("inter-" at a line end followed by "national" becomes "international") in the line-oriented outputs ofGetPageTextmodes 7 and 9 - The heuristic only merges when a letter precedes the hyphen and a lowercase letter starts the next line, so numeric ranges, proper nouns and sentence-initial capitals keep their hyphens
Version 3.229.0
Added
- Added the
OnBeforeSnapshotevent to theTPDFlibViewercontrol: it fires before a snapshot drag is captured with the dragged region, and setting Handled cancels the default clipboard capture so applications can process the region themselves - Exposed
PrefetchEnabled: the background pre-render worker can now be switched off and on at run time (the worker stops immediately and restarts on the open document) - Exposed
DiskCacheMaxDocuments: the number of documents the cross-session disk page cache keeps before pruning is now tunable (default 10)
Version 3.228.0
Added
- Added precise navigation to the
TPDFlibViewercontrol:GoToPagePointjumps to a page and scrolls a given page point to the top-left of the viewport, so link destinations and search hits land exactly in view - Added programmatic scroll control:
ScrollBypixel stepping, read/writeHScrollPos/VScrollPosproperties (ideal for synchronising two side-by-side viewers over the same document), andGetScrollPosForPagereporting each page's scroll anchor in continuous mode - Added public coordinate bridges
ClientPointToPageandPageRectToClientRectconverting between client pixels and page user space through zoom, rotation and scroll; the internal hit-testing now shares the exact geometry of the paint path and also works on unparented (headless) controls
Version 3.227.0
Added
- Added view-state events to the
TPDFlibViewercontrol:OnZoomChangefires on every effective-zoom move (explicit zoom, preset steps, fit-mode recomputation on resize, rotation or DPI change) andOnHScroll/OnVScrollfollow the scroll position, so toolbars and status displays stay in sync without polling - Dragging the vertical scrollbar thumb now shows a floating "Page N / M" bubble that previews the page the view will land on - a big help in long documents; the
ScrollHintEnabledproperty (on by default) turns it off
Version 3.226.0
Added
- Completed the fill-and-save loop in the
TPDFlibViewercontrol:SaveToFileandSaveToStreamwrite the displayed document - committed form edits included - back to disk or a stream (any open in-place editor commits first) - Multiline text fields now edit in a proper multi-line memo: Enter inserts a line break, Ctrl+Enter commits, Escape cancels; single-line fields keep the plain Enter-commits behaviour
- Tab and Shift+Tab cycle the in-place editor through the document's editable text and choice fields, following each field's page;
FocusNextFormFieldexposes the same navigation programmatically
Version 3.225.0
Added
- Added preset-ladder zooming to the
TPDFlibViewercontrol:ZoomInStepandZoomOutStepsnap the zoom to the standard preset sequence (1, 5, 10, 25, 50, 75, 100, 150, 200, 400, 800, 1600, 2400, 3200 percent), starting from the zoom currently in effect so fit modes step naturally; the toolbar zoom actions now use the same ladder - Ctrl+mouse wheel now zooms along the preset ladder while a plain wheel keeps scrolling
- Added keyboard shortcuts: Ctrl+'+'/'-' step the zoom, Ctrl+1/2/3 switch to actual size, fit width and fit page, and Shift+Up/Down jump to the first and last page
Version 3.224.0
Added
- Added
CreateSelfSignedCertificatewith Delphi, DLL and ActiveX entry points: generates a self-signed RSA certificate (SHA-256 signature, configurable subject, validity and key length) and exports it with its private key to a password-protected PFX file, ready forSignFileand the sign-process APIs - so signing workflows can be built and tested without an external certificate authority - The certificate is created in a throwaway key container that is deleted after the export; only the PFX keeps the key material. Self-signed certificates are meant for testing and internal documents - viewers flag them as untrusted unless installed explicitly
Version 3.223.0
Added
- Added
TPDFlibShapeWatermarkto the composable watermark layer: rectangles, circles, ellipses, polygons, Bezier curve chains and straight lines stamp onto a page range with fill and stroke colours, line width and opacity, through the sameApplyWatermarkentry point as text and image watermarks - Rectangle, circle and ellipse shapes size themselves from Width/Height; polygon, curve and line shapes take their geometry from
SetPoints(local X,Y pairs), so the nine-point Position grid and custom placement apply to every shape kind; degenerate geometry (too few points) is rejected
Version 3.222.0
Added
- Added
AddLinkToEmbeddedPDFwith Delphi, DLL and ActiveX entry points: a page hotspot that opens a PDF embedded in the current document (by its EmbeddedFiles name) and jumps to a chosen page there, using the standard embedded go-to (/GoToE) action of ISO 32000-1 §12.6.4.4 with an optional new-window request; the document version rises to PDF 1.6 automatically GetAnnotActionInfoand its outline/form-field siblings now recognise embedded go-to actions, reporting the newakGoToEkind together with the embedded target name, the parent/child target relationship, the optional file specification and the /NewWindow flag
Version 3.221.0
Added
- Added
SetSignProcessAppearanceTextwith Delphi, DLL and ActiveX entry points: digital signatures can now show an automatically generated visible text appearance composed of the signer name, reason, location and signing date, with optional descriptive labels ("Signed by:", "Reason:", ...) selected through a bit mask - The text block lays out inside the signature field rectangle in Helvetica with a configurable colour; font size 0 auto-fits the lines to the field. A field image set through
SetSignProcessFieldImageFromFilekeeps precedence, and document time-stamp processes ignore the text appearance
Version 3.220.0
Added
- Added interactive form filling to the
TPDFlibViewercontrol: clicking a checkbox or radio button toggles it, and clicking a text or choice field opens an in-place editor over the field (Enter commits, Escape cancels, leaving the editor commits); read-only fields are left alone and the changed page re-renders automatically - Every write fires the new
OnFormFieldValueChangedevent, andHighlightFormFieldswithFormHighlightColorpaints a translucent backdrop over each fillable area so users can spot form fields - Added the programmatic counterparts
FormFieldAtPagePoint,GetFormFieldPageRect,ToggleCheckBoxField,SetFormFieldValueAndRefresh,BeginEditFormFieldandCommitInplaceEditor, driving the same machinery without mouse input
Version 3.219.0
Added
- Added annotation interaction to the
TPDFlibViewercontrol: clicking a non-link annotation fires the newOnAnnotClickevent with the page, annotation index and subtype, andAnnotAtPagePointexposes the hit test programmatically (Popup companions are skipped) - Hovering an annotation now shows its Contents text as the control's hint (the
AnnotHintsswitch, on by default, works with the standardShowHintproperty) - Added
SaveAnnotAttachmentToFileto write a FileAttachment annotation's embedded file to disk, completing click-to-save attachment workflows in the viewer
Version 3.218.0
Added
- Added a cross-session disk page cache to the
TPDFlibViewercontrol: settingDiskCacheFolderpersists rendered pages on disk so a recently viewed document reopens instantly without re-rendering - Cached pages are keyed by a fingerprint of the document's path, size and last write time, so editing the file automatically invalidates its stale pages; the cache keeps up to ten documents and prunes the least recently used ones
- Added the
DiskCacheHitscounter reporting how many page renderings the disk cache saved
Version 3.217.0
Added
- Added the
PDFlibViewerActionsunit with twenty ready-madeTActiondescendants forTPDFlibViewer, so toolbars and menus work without glue code: page navigation (First/Prior/Next/Last), zoom (In/Out/FitWidth/FitPage/ActualSize), view rotation (clockwise/anticlockwise), printing, file open and save-as dialogs, copy selected text, and the five mouse-tool mode switches - Each action targets a viewer through its
Viewerproperty and keeps its enabled state (document open, page position, selection present) and checked state (active zoom fit or mouse tool) up to date automatically; all actions register in the losLab PDF category for the Action List editor - Added
TPDFlibViewer.EffectiveZoomPercentreporting the zoom actually in effect (including computed fit-width/fit-page factors) so zoom steps can build on it
Version 3.216.0
Added
- Added search-hit highlighting to the
TPDFlibViewercontrol:HighlightSearchHitssearches the whole document and paints a translucent bar over every match that stays in place while scrolling, zooming and rotating, withClearSearchHighlights,SearchHighlightCountand a configurableSearchHighlightColor TPDFlibSearchPanel.RunSearchnow also paints the hit bars in the attached viewer (the newHighlightInViewproperty, on by default, turns this off), so search results are visible on the pages, not just in the hit list
Version 3.215.0
Added
- Added mouse tool modes to the
TPDFlibViewercontrol through the newViewerModeproperty:vmSelecttext selection (default),vmHandpan-by-dragging with a grab cursor (a plain click still follows links),vmZoommarquee zoom that magnifies the dragged band to fill the viewport,vmSnapshotregion capture to the clipboard, andvmHighlightpersistent translucent region highlighting - Added
CaptureRegionto render any client region (pages plus highlights) into a caller-owned bitmap, theOnSnapshotevent andSnapshotToClipboardswitch for snapshot handling, andAddHighlightRegion/ClearHighlightRegions/HighlightRegionCountwith a configurableHighlightColorfor page-anchored highlights that survive zoom, rotation and navigation
Version 3.214.0
Added
- Added printing to the
TPDFlibViewercontrol:PrintDocshows the standard Windows print dialog (printer choice, page range, copies, collation) and hands the job to the library's printing engine, whilePrintDoc(False)prints the whole document to the default printer without any UI - Added
PrintDocRangefor fully programmatic viewer printing with an explicit printer name, page range, copy count and collation flag
Version 3.213.0
Added
- Added view rotation to the
TPDFlibViewercontrol:RotateClockwise90andRotateAntiClockwise90turn the displayed pages in 90-degree steps, and theViewRotationproperty reads or sets the angle directly (0, 90, 180 or 270) - Rotation is a pure view attribute: the document is never modified, link clicking and text selection keep working at every angle, fit-width and fit-page zoom modes adapt to the rotated page shape, and opening a new document resets the view to 0 degrees
- Rotated page bitmaps are cached per angle, so switching between angles reuses previous renderings instead of re-rendering
Version 3.212.0
Changed
- Improved XFA datasets SOM path compatibility:
GetXFAFormFieldValueandSetXFAFormFieldValuenow accept simple FormCalc-style predicate selectors such as$data.Receipt.Detail.[Total_Price > 200].Descriptionand update every matching data node when a predicate selects a subset
Version 3.211.0
Changed
- Improved XFA datasets SOM path compatibility:
GetXFAFormFieldValueandSetXFAFormFieldValuenow accept Data DOM class selectors#dataGroupand#dataValuewith numeric or wildcard occurrences, allowing class-based paths such as$data.Receipt.#dataGroup[0].#dataValue[0]
Version 3.210.0
Changed
- Improved XFA datasets SOM path compatibility:
GetXFAFormFieldValueandSetXFAFormFieldValuenow accept the$recordroot in non-record-processing packets, so paths such as$record.Taxand$record/Detail[0]/Total_Priceresolve from the outer data record element
Version 3.209.0
Changed
- Improved XFDF annotation interchange: annotation exports now write standard border style attributes
width,style, anddashesfrom PDF annotation/BSvalues, and annotation imports restore those attributes on inserted annotations
Version 3.208.0
Changed
- Improved XFDF annotation interchange: annotation exports now write standard
creationdateandopacityattributes from PDF annotation/CreationDateand/CAvalues, and annotation imports restore those attributes on inserted annotations
Version 3.207.0
Changed
- Improved XFDF annotation interchange: annotation exports now write standard
flagsnames from PDF annotation/Fvalues, and annotation imports restore those names to the inserted annotation flags
Version 3.206.0
Changed
- Improved XFA datasets SOM path compatibility:
GetXFAFormFieldValueandSetXFAFormFieldValuenow accept direct child wildcard selectors such as$data.Receipt.*.Total_Priceto read or update matching child branches without selecting same-name fields on the parent node
Version 3.205.0
Changed
- Improved XFA datasets SOM path compatibility:
GetXFAFormFieldValueandSetXFAFormFieldValuenow accept descendant selectors such as$data..Total_Priceand$data.Receipt..Total_Priceto read or update the first matching descendant data node
Version 3.204.0
Changed
- Improved XFA datasets SOM path compatibility:
GetXFAFormFieldValueandSetXFAFormFieldValuenow accept theparentproperty in paths such as$data.Receipt.Detail[1].parent.Taxto read or update a selected node's parent sibling data
Version 3.203.0
Changed
- Improved XFA datasets SOM occurrence handling:
GetXFAFormFieldValueandSetXFAFormFieldValuenow support[*]selectors such as$data.Receipt.Detail[*].Total_Priceto read or update every matching repeated data node
Version 3.202.0
Changed
- Improved XFA SOM path compatibility: XFA datasets and template field APIs now preserve literal periods in slash-delimited field paths and accept escaped periods such as
Line\.Itemin dot-delimited SOM paths
Version 3.201.0
Changed
- Improved XFA datasets path compatibility: XFA field value APIs now accept slash-delimited paths after standard data SOM roots such as
$data/...,xfa.datasets.data/..., andxfa.datasets/...
Version 3.200.0
Changed
- Improved XFA datasets SOM compatibility: XFA field value APIs now accept the standard
!data...short form, including slash-delimited!data/...paths
Version 3.199.0
Changed
- Improved XFA template path compatibility: template editing APIs now accept slash-delimited field paths returned by XFA field-name enumeration, including
$template/...paths
Version 3.198.0
Changed
- Improved XFA datasets namespace compatibility: field value APIs now read and update data nodes by local XML name when the business data inside the datasets packet uses its own namespace prefix, and field-name enumeration returns prefix-free paths
Version 3.197.0
Changed
- Improved XFDF annotation interchange: annotation exports now include the common
nameanddateattributes from PDF/NMand/M, annotation imports restore those values on inserted annotations, andSetAnnotStrPropertynow accepts tag 104 for annotation modified dates
Version 3.196.0
Changed
- Improved XFA field-name enumeration: field list APIs now scan every top-level data record in the datasets packet and return leaf data fields without adding container groups as fields
Version 3.195.0
Changed
- Improved XFA datasets compatibility: XFA field value APIs now read and update complete XDP packets whose datasets packet uses an unprefixed
dataelement
Version 3.194.0
Fixed
- Improved XFA template field updates: XFA template field APIs now accept standard template SOM roots such as
$templateandxfa.template, and template-only changes in complete XDP streams are saved correctly
Version 3.193.0
Changed
- Improved XFA field addressing: XFA field value APIs now accept standard data SOM roots such as
$dataandxfa.datasets.datain addition to relative field paths
Version 3.192.0
Changed
- Improved XFA XML packet handling: XFA streams with UTF-16 byte order marks or UTF-16 XML byte patterns now decode before XML parsing, so UTF-16 encoded form values remain available through XFA field read/write APIs
Version 3.191.0
Changed
- Improved XFA packet authoring:
SetXFAFromStringnow creates the requiredAcroFormcontainer when a document does not already have form data, replaces stale parsed XFA state when a complete XFA packet is stored, and keeps the saved packet available through XFA field read/write APIs
Version 3.190.0
Changed
- Improved XFDF annotation interchange: annotation exports now write the common
colorattribute from the PDF/CRGB array, and annotation imports now restorecolor="#RRGGBB"values into the inserted annotation color array
Version 3.189.0
Added
- Added XFDF annotation interchange APIs:
ExportAnnotationsToXFDF,ExportAnnotationsToXFDFString,ImportAnnotationsFromXFDFandImportAnnotationsFromXFDFStringnow read and write ISO 19444<annots>data for text-style annotation comments, including page, rectangle, title, subject and plain contents data
Version 3.188.0
Changed
- Improved XFDF rich text field import: fields with
<value-richtext>now preserve the rich text XML in the fieldRVvalue while still applying the plain<value>fallback when present
Version 3.187.0
Changed
- Improved XFDF form-data interchange for multi-select choice fields: repeated
<value>elements now import into the selected-value array, and exporting a multi-select choice field now writes one<value>element per selected item instead of flattening them into one escaped text node
Version 3.186.0
Changed
- Improved XFDF form-data export for rich text fields: fields with an
RVrich text value now include a<value-richtext>element while preserving the plain<value>fallback
Version 3.185.0
Changed
- Improved XFDF form-data import for rich text fields: when a field provides
<value-richtext>without a plain<value>, the importer now extracts the XHTML text content and applies it to the matching AcroForm field instead of skipping the field
Version 3.184.0
Changed
- Improved XFDF form-data interchange: exports now use the standard XFDF namespace with
xml:space="preserve", emit nested<field>elements for hierarchical AcroForm names, skip non-terminal parent field values, write file exports as UTF-8, and import whitespace-flexible XFDF with nested fields, single-quoted attributes, CDATA, XML entities, and numeric character references
Version 3.183.0
Added
- Added
SanitizeDocument(Flags)which strips sensitive content in one call: removes all global JavaScript, removes the catalog OpenAction, strips /A actions from every annotation, blanks Author/Subject/Keywords/Creator/Producer metadata (both /Info and XMP), and optionally deletes all annotations. Flag bitsSANITIZE_JAVASCRIPT/SANITIZE_ACTIONS/SANITIZE_METADATA/SANITIZE_ANNOTATIONS/SANITIZE_OPEN_ACTIONcombine;SANITIZE_ALLapplies every strip. Closes the classic data-leak hole where redaction removes visible content but leaves metadata or hidden scripts recoverable - Added
TPDFAnnots.RemoveAnnotAction(Index)to strip the /A action dictionary from an individual annotation (used by SanitizeDocument, also useful standalone)
Version 3.182.0
Added
- Image elements returned by
EnumPageElementsnow carry their real placement rectangle (Left/Top/Right/Bottom) instead of zeros. Backed by a newTPDFContentProgram.EnumImagePlacementsmethod that walks the content stream tracking the CTM (cm/q/Q) and maps eachDooperator's 1x1 unit square into page coordinates - Added four showcase demos: DocumentProperties (DocInfo/page-box/rotation/transition/viewer-preferences/XMP round-trip), FormProperties (per-field property grid: type/value/readonly/MaxLength/MultiLine/description), SignatureValidator (enumerate signature fields + verify + signer certificate), Reader (VCL TPDFlibViewer with open/navigate/zoom/copy-text)
Version 3.181.0
Added
- Added
SetXMPPropertyexposing the existing schema-aware XMP engine (PDFlibXMP) through the public facade: set any Dublin Core (dc:), XMP Basic (xmp:), Adobe PDF (pdf:), PDF/A ID (pdfaid:), PDF/UA ID (pdfuaid:), or XMP Media Management (xmpMM:) property by namespace + key without hand-writing RDF XML - Added
ImportFormDataFromFDF/ImportFormDataFromFDFStringwhich parse an FDF /Fields array (each<< /T (name) /V (value) >>) and apply each value to the matching AcroForm field by title, inverting the EscapePDFText octal/paren escaping. Closes the asymmetric export-only gap - Added
ExportFormDataToXFDF/ExportFormDataToXFDFString/ImportFormDataFromXFDF/ImportFormDataFromXFDFStringfor XFDF (XML Forms Data Format) bidirectional interchange - the modern XML counterpart of FDF - Made the six namespace-scoped XMP setters (
SetDublinCore,SetXMPBasic,SetAdobePDF,SetPDFA,SetPDFUA,SetXMPMM) public onTPDFlibXMPso advanced callers can drive the engine directly
Version 3.180.0
Added
- Added
SearchAndReplaceTextInContentwhich performs TRUE content-stream text replacement (rewriting the Tj/TJ/'/" show-text operators in place viaTPDFContentProgram.ReplaceTextRun), unlike the existing mask-basedSearchAndReplaceTextthat only overlays a rectangle on top of the original glyphs. The original text is gone from the stream and cannot be recovered. Locates hits viaSearchText, maps each hit rect to its covering instruction viaFindInstructionsInRect, rewrites, and writes the layer back
Version 3.179.0
Added
- Added a structured internal logger (
TPDFlibLogger) in a newLib/PDFlibLogger.pasunit with four levels (Debug/Info/Warn/Error), a host callback (OnLog), an optional thread-safe file sink, and an error-code-to-message map (PDFlibErrorMessage) that finally gives the existing numeric codes (1xx/3xx/4xx/5xx) human text. Exposed onTPDFlibvia theLoggerproperty - Added
RenderPagesToFilesParallelwhich renders a page range to one file per page using aTTaskpool with oneTPDFlibinstance per worker (TPDFlib is not thread-safe) and per-threadCoInitializefor GDI+ apartment safety. Scales near-linearly with CPU cores for CPU-bound raster output
Version 3.178.0
Added
- Added
EnumCertificatesto enumerate every certificate in a Windows system store ("MY", "Root", ...) returning subject, issuer, serial number, validity window, HasPrivateKey, and Qualified (eIDAS QCStatements extension, OID 0.4.0.1862.1.7, detected via a new built-in DER decoder in PDFlibASN1) - replaces the previous single-cert-by-CNSetSignProcessCertFromStorelimitation - Added
SetSignProcessCertFromStoreByHandleto select a signing certificate by raw PCCERT_CONTEXT handle obtained from enumeration, letting callers pick by any criterion (qualified filter, validity, fingerprint) rather than only by Subject CN - Added
RedactRegionwhich truly removes text, vector paths, and image XObjects whose painted area intersects a rectangle (editing the content stream so removed content cannot be recovered, unlikeMaskRectwhich only covers it), with optional black fill and /Redact annotation. Backed by a CTM-tracking content-stream analyser in PDFlibContentModel (FindInstructionsInRect) - Added minimal DER decoder functions (
DERDecodeLength,DERFindExtensionByOID) to PDFlibASN1 for in-process certificate extension inspection without CryptDecodeObjectEx
Version 3.177.0
Added
- Added page stitching APIs that compose existing pages into new layouts via vector Form XObject capture (preserving full vector fidelity, unlike content-stream concatenation):
StitchPageOverlayoverlays one page onto another at a position with optional opacity,StitchPagesSideBySideplaces two pages left/right on a new wider page, andStitchPagesVerticallystacks a page range into a new tall poster-style page - Added a composable watermark template layer in a new
Lib/PDFlibWatermark.pasunit:TPDFlibWatermarkBasewith nine-point positioning (wpTopLeft..wpBottomRightpluswpCustom),TPDFlibTextWatermark,TPDFlibImageWatermark, andTPDFlibCompositeWatermarkwhich applies a list of sub-watermarks recursively across a shared page range - Added
TPDFlib.ApplyWatermarkas a convenience entry point that delegates to a watermark template's own page range and settings
Version 3.176.0
Added
- Added named render-output format constants (
PDF_RENDER_BMP,PDF_RENDER_EMF,PDF_RENDER_EMFPLUS,PDF_RENDER_EMF_DUAL, etc.) that map 1:1 to the integerOptionsvalues accepted byRenderPageToFile,RenderPageToStream,RenderPagesToFiles, andRenderDocumentToFile - Added
TPDFlibMetafileFormatenum and the convenience methodsRenderPageToMetafileStreamandRenderPageToMetafileFile, which accept a named metafile variant (mfEMF, mfEMFPlus, mfEMFDual, mfWMF) instead of a bare integer - Added EMF+ Dual output mode (Options value 11 / mfEMFDual), which records both GDI and GDI+ commands in the same metafile for compatibility with older GDI-only consumers
- Added
TPDFlibClipboardFormatenum andRenderPageToClipboard, which places a rendered page on the Windows clipboard as an enhanced metafile (CF_ENHMETAFILE), a DIB bitmap (CF_DIB), the page Unicode text (CF_UNICODETEXT), or all three at once - Added a new
Lib/PDFlibClipboard.pasunit with low-level Win32 clipboard placement helpers used byRenderPageToClipboard - Added full per-monitor DPI awareness to
TPDFlibViewer: a new publicScreenDPIproperty, aCreateWndoverride that auto-detects the host monitor DPI viaGetDpiForWindow(with aGetDeviceCapsfallback), and aWM_DPICHANGEDhandler that rebuilds the layout and clears the bitmap cache when the window moves between monitors - Added
TPDFRenderer.SetEMFPlusMetafileTypeto select between EMF+ Only and EMF+ Dual recording at the renderer level
Fixed
- Fixed the
RenderPageToFilereference page where the Options value list was misplaced in the Page row and the Options cell was empty
Version 3.175.3
Added
- Added a Lib/PDFlibTableExport.pas unit that renders any TDataSet (FireDAC, ClientDataSet, query result) into a paginated PDF table with styled header, zebra striping, right-aligned numeric columns, and automatic page continuation, plus a Demo/Delphi/DataSetExport console demo that loads the RAD Studio customer.FDS sample via FireDAC and exports it
Version 3.175.2
Added
- Added end-to-end Demo/ReportBridges projects that build a minimal report in FastReport, QuickReport, and ReportBuilder and export it to PDF through the matching Addons bridge, with a dedicated build-ReportBridges.cmd that supplies the engine source paths and gating symbols so the standard demo build still compiles the projects as stubs
Version 3.175.1
Added
- Added a Delphi JBIG2 options matrix demo that sweeps SymbolExtract, SkipBlackDots, BlackDotSize, and LossyLevel combinations against CCITT G4 and Flate baselines, with per-row PDF, CSV, and summary outputs
- Added a Delphi Pattern showcase demo covering axial and radial RGB shaders, a Coons-patch mesh shader, and a custom tiling pattern applied as fill, stroke, and text colour
- Added a Delphi CCITT fax matrix demo comparing Group 3 1-D, Group 3 2-D, and Group 4 compression with BlackIs1 and Interpolate option bits, reporting each output size and the resulting /Filter name
- Added FastReport, QuickReport, and ReportBuilder export bridges under Addons that render a prepared report into a PDFlibPas PDF via the engine's native object, metafile, and DrawCommand surfaces respectively
Version 3.175.0
Changed
- Expanded the WorkflowGallery demo with an annotation variant matrix that records text highlight fills, markup styles, note icons, free text, caret, and stamp annotations in companion CSV and HTML reports
Version 3.174.0
Changed
- Expanded the C++Builder AdvancedWorkflowMatrix demo to map action navigation, PDF/A and AcroForm workflows, font diagnostics, streaming delivery, and the latest scan-compression helpers into the generated matrix reports
Version 3.173.0
Added
- Added the DeliveryWorkflowMatrix Delphi demo for streamed Web and CGI PDF output, page-thumbnail validation, and watermark delivery workflows using one generated PDF byte buffer
Version 3.172.0
Added
- Added outline tree convenience APIs for ordered sibling insertion, child creation, subtree deletion, and preorder outline enumeration with parent, sibling, level, destination page, open-state, and title details
Version 3.171.0
Added
- Added the FontDiagnosticsMatrix Delphi console demo for CJK and Unicode font paths, TrueType subset updates, installed-font probes, document font enumeration, and font diagnostics reports
Version 3.170.0
Added
- Added the CanvasMigrationMatrix Delphi console demo for Canvas DC migration, raw content and path entry points, Delphi color helpers, pattern-filled text, watermarking, page thumbnail workflows, and rendered validation previews
Version 3.169.0
Added
- Added dedicated LayerCompositionMatrix, TransparencyMaskMatrix, and ComplianceFormWorkflowMatrix Delphi console demos for optional-content print/export policy, Pattern/Form XObject composition, transparency mask comparison, PDF/A-1b success and failure examples, AcroForm action workflows, appearance rebuilds, and visible signature templates
Version 3.168.0
Added
- Added dedicated ImageCompressionMatrix and SecurityPermissionMatrix Delphi console demos with generated PDF, CSV, and HTML reports for image compression strategy selection, scan compression, JPEG render quality, and encrypted permission profile auditing
Version 3.167.0
Added
- Added named helper APIs for JBIG2 bitmap encoding, EMF import options, AcroForm event actions, and chained actions so callers can use explicit option switches instead of composing integer bitmasks manually
Version 3.166.0
Added
- Added a runnable C++Builder AdvancedWorkflowMatrix console demo with PDF, CSV, and HTML outputs that map advanced canvas migration, EMF import, image compression, AcroForm, signature, security, PDF/A, optional-content, pattern, and Form XObject workflows to C++Builder project entry points
Version 3.165.0
Added
- Added a Delphi action navigation matrix demo that demonstrates open-document actions, document-level JavaScript, embedded-file links, remote GoTo links, AcroForm event actions, Submit/Reset/Hide link helpers, and chained Next actions with PDF, CSV, and HTML outputs
Fixed
- Fixed remote file link helpers so AddLinkToFile, AddLinkToFileEx, AddLinkToFileDest, and local file launch links create one annotation and return instead of looping indefinitely
Version 3.164.0
Dodano
- Demo macierzy ochrony PDF/A w Delphi that checks early rejection or allowed-path decisions for PDF/A mode setup, transparency, blend modes, encryption, JavaScript, multimedia, embedded files, and PDF/A-3 associated-file workflows, with generated PDF, CSV, and HTML reports
Version 3.163.0
Dodano
- Jawna macierz pośrednicząca ReportAdapter for FastReport, QuickReport, ReportBuilder, DBGrid, and custom canvas export paths, including generated CSV and HTML mapping output plus a PDF page that shows the reusable adapter strategy
Version 3.162.0
Dodano
- Zaawansowana macierz demonstracyjna przepływów pracy that generates concrete outputs for canvas migration, EMF import options, image compression comparisons, AcroForm action workflows, visible empty signatures, security permissions, PDF/A-1b checks, optional content, tiling patterns, Form XObjects, DBGrid-style table export, and large-file peak memory reporting
Version 3.161.0
Dodano
- Pomocniki Delphi do zwartego tworzenia akcji Open Document, form-field visibility event actions, TColor and gray color setters, and direct raw content, path, text, and matrix content stream injection
Version 3.160.0
Dodano
- Pomocniki Delphi do kompresji skanowanych obrazów bitmap do JBIG2, one-call image mask and color-key transparency setup, GoTo action chaining, and readable AcroForm event names for JavaScript or existing action assignment
- Rozszerzono
ImportEMFFromFileExiImportEMFFromStreamExso theirOptionsflags can force bitmap import, enable EMF color-image JPEG recompression, and request GDI+ processing controls
Version 3.159.1
Zmieniono
- Ulepszono
SaveToStreami zapisywanie powiązanych strumieni wyjściowych so large PDF stream objects are written in bounded chunks instead of copying each stream object into one intermediate output string
Version 3.159.0
Dodano
- Pomocniki umieszczania obrazów that draw or fit a specified image and release its handle immediately afterward, with Delphi, DLL, and ActiveX entry points for lower peak memory in one-use image generation workflows
RenderPageToMonochromeFileExdo renderowania BMP 1-bitowego with threshold conversion and isolated black-pixel cleanup before scanned-image compression workflows
Version 3.158.1
Dodano
- Dema przepływów pracy Delphi do wielokrotnego użytku eksportu w stylu raportu, RichEdit-to-EMF rich text import, and combined page-thumbnail, annotation, form XObject, table, compression, JavaScript, and bound-stream output scenarios
Version 3.158.0
Dodano
- API do kontroli szyfrowania metadanych with Delphi, DLL, and ActiveX entry points: SetEncryptMetadata can write Standard-security PDFs with unencrypted XMP metadata streams, while GetEncryptMetadata reports the pending or loaded /EncryptMetadata state
Version 3.157.0
Dodano
- API do bezpośredniego rysowania wzorów kafelkowych with Delphi, DLL, and ActiveX entry points: BeginTilingPattern creates a temporary pattern cell drawing surface, EndTilingPattern registers it as a reusable pattern, and CancelTilingPattern discards the build without leaving a named pattern behind
Version 3.156.0
Dodano
- Pomocniki Delphi dla powiązanych strumieni wyjściowych:
BeginOutputToStream,EndOutputStream,CancelOutputStream, andOutputStreamActivelet streaming, web, and report-export code bind a targetTStream, finish it through the existing chunked writer, or cancel the pending target without taking stream ownership
Version 3.155.0
Dodano
Abort,AbortediResetAbortfor Delphi, DLL, and ActiveX callers so applications can mark an instance as cancelled and prevent save or append output operations from starting until the flag is cleared
Version 3.154.0
Dodano
- Pomocniki miniatur stron dla opcji importu obrazów i źródeł w pamięci, optional-content group lookup and state setters by group name, and
SetOpenActionNamedDestinationfor document-open jumps through named destinations
Naprawiono
GetDestNamerozpoznaje teraz jawne uchwyty tablic docelowych, w tym tablice zwracane z nazwanej akcji otwarcia dokumentu
Version 3.153.0
Dodano
- Wygodne API dla łańcuchowych akcji formularza, Hide and ImportData field triggers, initial optional-content group states, optional EMF imports, and color-key transparent image imports
Version 3.152.0
Dodano
- Automatyczne tworzenie łączy URL podczas rysowania tekstu, CCITT Group 3/4 image import helpers, JBIG2 direct-image helpers, EMF extended import wrappers, image mask attachment helpers, visible signature field creation, and form-field event/action helpers for JavaScript, SubmitForm, and ResetForm workflows
Version 3.151.0
Dodano
DrawPie,DrawChord,DrawEllipticPieiDrawEllipticChordfor explicit closed circular and elliptic arc drawing with outline, fill, or fill-and-outline modes
Version 3.150.0
Dodano
NewGraphicsStateiSetGraphicsStateso callers can create reusable ExtGState resources for combined fill transparency, stroke transparency, line width, line cap, line join, and miter-limit settings
Version 3.149.1
Naprawiono
- Naprawiono duplikaty identyfikatorów ActiveX dispatch for the Form XObject and miter-limit methods so late-bound COM callers resolve each method unambiguously
Version 3.149.0
Dodano
SetMiterLimitdo sterowania proporcjami łączenia ostrym wierzchołkiem to control stroke miter-limit ratios for paths that use miter joins- Udostępniono
BeginFormXObject,EndFormXObjectiCancelFormXObjectprzez interfejsy DLL i ActiveX
Version 3.148.0
Dodano
- Wielokrotnego użytku API budowania Form XObject:
BeginFormXObject,EndFormXObjectiCancelFormXObjectpozwalają wywołującym rysować wielokrotnego użytku szablon zwykłymi wywołaniami rysowania strony i umieszczać go wielokrotnie przez API rysowania przechwyconych stron
Version 3.147.0
Dodano
SetTextTilingPatterniSetLineTilingPatternso captured-page tiling patterns can be reused for text, underline, and stroked graphics without duplicating drawing commands
Naprawiono
- Kolory stroked shader i tiling-pattern zapisują teraz operator koloru wzoru kreskowania zamiast aktualizować stan koloru bez kreskowania
Version 3.146.0
Dodano
BeginOptionalContentiEndOptionalContentso callers can mark only subsequent drawing commands with an optional content group without rewriting the existing content stream
Naprawiono
- Operatory marked-content zamykające zakres są teraz opróżniane natychmiast, gdy optional content, tagged PDF lub artifact scopes zostają zamknięte na końcu strumienia zawartości
Version 3.145.0
Dodano
SetTransparencyEx, aby wywołujący mogli ustawiać oddzielne wartości przezroczystości wypełnienia i kreskowania dla później rysowanego tekstu i grafiki, zachowując istniejące zachowanie automatycznej aktualizacji do PDF 1.4
Version 3.144.0
Dodano
AddLinkToNamedDestinationso a page hotspot can jump to a same-document named destination without resolving the target page at link creation time
Naprawiono
- Czytniki akcji adnotacji zwracają teraz brak akcji dla stron bez adnotacji zamiast dereferencjonować pustą pamięć podręczną adnotacji
Version 3.143.0
Dodano
- API do zarządzania akcjami pól formularza so callers can bind an existing action to a field trigger, inspect the typed trigger action, and remove primary or additional field actions
Naprawiono
FormFieldJavaScriptActionodrzuca teraz dokumenty PDF/A i nieprawidłowe nazwy wyzwalaczy zamiast zapisywać niezgodne słowniki akcji pól
Version 3.142.0
Dodano
- API łańcuchowania akcji so callers can append URI, named, and JavaScript next-actions to an existing annotation, outline, or form-field action and inspect chained actions through
GetActionNextCountandGetActionNextInfo
Version 3.141.0
Added
- Added
AddLinkToSubmitFormandAddLinkToResetFormso page hotspots can submit or reset AcroForm fields through standard PDF actions without JavaScript
Version 3.140.0
Added
- Added
AppendToStreamso incremental update workflows can write directly to a caller-provided stream instead of first materialising the update as anAnsiString
Changed
SaveToStreamnow serializes directly into the target stream, andAppendToString(1)now returns only the incremental update section without copying the original source bytes into a temporary buffer
Version 3.139.0
Added
- Added
GetAnnotReplyToandGetAnnotReplyTypeso threaded annotation replies can be inspected through named read-side accessors instead of generic annotation property tags
Version 3.138.0
Added
- Added the Delphi
DocumentInspectionWorkbenchsample to batch-inspect PDFs with combined font diagnostics, image sampling, color-space discovery, load timing, and JSON, CSV, and HTML reports
Version 3.137.0
Added
- Added the Delphi
ImageDecodeBenchmarksample to measure page image discovery, decoded image bytes, and page color-space discovery with CSV and HTML timing reports
Version 3.136.0
Added
- Added
GetDocumentFontDiagnosticsandTPDFlibFontDiagnosticsto summarize document font embedding, subsetting, Standard 14, CID, Type3, and unknown-font counts in one call
Version 3.135.0
Added
TPDFlibSignatureVerifier.VerifySignerCertificateChainnow builds the embedded signer certificate chain with Windows CryptoAPI and returnsvsValidonly when the chain satisfies the Windows base trust policy, while self-signed or otherwise untrusted signer certificates returnvsInvalidwithout changingVerifySignature's content-integrity result
Version 3.134.0
Fixed
TPDFlibSignatureVerifier.VerifySignaturenow validates legacyadbe.pkcs7.sha1signatures, returningvsValidwhen the signed digest matches the covered/ByteRangebytes andvsInvalidafter covered content changes
Version 3.133.0
Dodano
- Dodano
RenderPagesToFilesorazDARenderPagesToFiles, aby renderować dowolne zakresy stron do ponumerowanych plików wyjściowych przy jednoczesnym ponownym wykorzystaniu ustawień renderera na wybranych stronach
Version 3.132.0
Dodano
- Dodano wygodne funkcje stemplujące
AddPageHeaderiAddPageFooter, które umieszczają tekst na ustalonym górnym lub dolnym marginesie na każdej stronie w zakresie, z wyrównaniem do lewej/środka/prawej i rozwijaniem tokenów (&Pbieżąca strona,&Ncałkowita liczba stron,&Ddata,&Ttytuł dokumentu,&&dosłowny znak ampersand) StampTextiStampImagez opcjąsoUnderlayteraz poprawnie umieszczają treść pod istniejącą treścią strony, poprzez dodanie na początku nowej warstwy treści (wcześniej rysowano na wierzchu, tak jak wsoOverlay); operacja jest obsługiwana przez nową metodę drzewa stronPrependContentLayer
Version 3.131.0
Dodano
- Dodano
ScalePage(ScaleX, ScaleY, Anchor), które skaluje treść wybranej strony, otaczając każdą warstwę treści blokiem stanu grafikiq sx 0 0 sy tx ty cm ... Qoraz zmieniając rozmiar MediaBox i CropBox; punkt odniesienia zachowuje początek układu w lewym dolnym rogu (0), wyśrodkowuje zawartość (1) lub zachowuje lewy górny róg (2) - Rozszerzono
EnumPageElementso nowy rodzaj elementuekPath: każda strona teraz zgłasza również swoje ścieżki wektorowe wraz z prostokątem ograniczającym, liczbą punktów, flagą zamknięcia i operatorem malowania, wydobyte ze strumieni treści za pomocą ustrukturyzowanego modelu treści
Version 3.130.0
Dodano
- Dodano trzy funkcje API do optymalizacji rozmiaru pliku, które zmniejszają wczytane dokumenty podczas ponownego zapisu:
SubsetEmbeddedFontsredukuje każdy osadzony program czcionki TrueType (FontFile2) tylko do tych znaków Unicode, które dokument faktycznie renderuje, za pomocą usługiCreateFontPackagez FontSub.dll;DownsampleImages(MaxDPI, Quality, Filter)dekoduje każdy obraz XObject powyżej docelowego DPI, ponownie go próbkuje (metodą box lub dwuliniową) i koduje jako JPEG lub PNG;NormalizeLZWStreamsprzepisuje każdy strumień nadal filtrowany za pomocą LZWDecode na FlateDecode, korzystając z istniejącego dekodera LZW i kodera Flate, zachowując parametry Predictor
Version 3.129.0
Dodano
- Dodano funkcje API do tworzenia cieniowania z użyciem siatki dla czterech typów cieniowania, które wcześniej posiadały tylko obsługę odczytu/parsowania:
NewRGBFreeFormTriangleMesh(ShadingType 4, trójkąty Gourauda o kształcie swobodnym),NewRGBLatticeTriangleMesh(ShadingType 5, siatka trójkątów Gourauda),NewRGBCoonsPatchMesh(ShadingType 6, siatka płatów Coonsa) orazNewRGBTensorPatchMesh(ShadingType 7, siatka płatów iloczynu tensorowego) — każda tworzy nazwany wzór cieniowania siatkowego z płaskiej listy wierzchołków lub płatów z wybieralną głębią bitową współrzędnych/kolorów oraz prostokątem ograniczającym, z możliwością wyboru za pomocąSetFillShader/SetLineShader/SetTextShadertak samo jak w przypadku istniejących shaderów osiowych i promienistych
Version 3.128.0
Dodano
- Dodano pasek miniatur dla przeglądarki:
TPDFlibThumbnailBarwyświetla miniaturę każdej strony, renderowaną z opóźnieniem w miarę przewijania wierszy w obszar widzenia, z numerem strony poniżej; kliknięcie miniatury powoduje przejście podłączonej przeglądarki do tej strony — dopełniając rodzinę kontrolek przeglądarki (przeglądarka, panel zakładek, panel wyszukiwania, miniatury)
Version 3.127.0
Dodano
- Dodano panel wyszukiwania dla przeglądarki:
TPDFlibSearchPanel.RunSearchprzeszukuje cały podłączony dokument i wyświetla jeden wiersz na trafienie z numerem strony i pasującym tekstem; kliknięcie trafienia powoduje przejście przeglądarki do tej strony
Version 3.126.0
Dodano
- Dodano panel zakładek dla przeglądarki:
TPDFlibOutlineViewerwyświetla drzewo zakładek dokumentu z wcięciami i powoduje przejście dołączonej przeglądarki (poprzezAttachViewer) do strony docelowej zakładki po kliknięciu; jest oparty na bazowej klasie panelu wielokrotnego użytku, którą współdzielą późniejsze panele boczne
Version 3.125.0
Dodano
- Dodano zaznaczanie tekstu w kontrolce przeglądarki: przeciągnij lewym przyciskiem myszy, aby zaznaczyć, naciśnij Ctrl+C lub wywołaj
CopySelectedText, aby skopiować zaznaczenie do schowka; przechwycony tekst jest dostępny przez właściwośćSelectedText, uporządkowany z góry na dół ze znakami nowej linii między pasmami - Dodano
GetTextInRegion, które bezpośrednio zwraca tekst z prostokątnego obszaru strony — to samo wyszukiwanie oparte na blokach, co wybór myszą, dostępne dla niestandardowych interfejsów zaznaczania
Version 3.124.0
Dodano
- Kontrolka przeglądarki teraz wstępnie renderuje sąsiednie strony w wątku w tle, dzięki czemu przewijanie do przodu lub do tyłu natychmiast wyświetla następną stronę; wątek roboczy używa własnej instancji dokumentu i przekazuje gotowe renderingi do pamięci podręcznej bez blokowania interfejsu użytkownika
- Dodano interaktywność linków do przeglądarki: kliknięcie adnotacji linku wyzwala
OnLinkClickz numerem strony i tym samym typowanym podsumowaniem akcji, które produkujeGetAnnotActionInfo(adres WWW, cel w dokumencie, nazwana akcja itp.);LinkActionAtPagePointudostępnia bazowy test trafienia dla własnej obsługi
Version 3.123.0
Dodano
- Kontrolka przeglądarki zyskała ciągłe przewijanie:
SetDisplayModeprzełączaTPDFlibViewerpomiędzy widokiem pojedynczej strony a ciągłym przewijaniem pionowym przez cały dokument, przy czym renderowane są tylko strony widoczne w rzutni, a bieżąca strona śledzi pozycję przewijania (wyzwalającOnPageChange, gdy strony pojawiają się w widoku) - Renderowane strony są teraz przechowywane w pamięci podręcznej map bitowych według algorytmu najdawniej używanych (LRU), więc przewijanie w tył i w przód nie wymaga ponownego renderowania; domyślny budżet pamięci to 128 MB i można go dostosować za pomocą
SetCacheLimit, co powoduje usuwanie najstarszych stron, gdy budżet się zmniejszy lub zapełni - Dodano przewijanie kółkiem myszy oraz nawigację klawiaturą do przeglądarki: PageUp/PageDown (skoki o stronę w trybie pojedynczej strony, skoki rzutni w trybie ciągłym), klawisze strzałek, Home oraz End
Version 3.122.0
Dodano
- Dodano interaktywną kontrolkę przeglądarki PDF:
TPDFlibViewerto kontrolka przewijania VCL, która otwiera dokument z pliku lub dołącza do istniejącej instancjiTPDFlib, wyświetla strony za pomocą wybranego silnika renderującego (GDI+, Cairo lub PDFium) i oferuje nawigację po stronach (GoToPage/NextPage/PrevPageze zdarzeniemOnPageChange) oraz kontrolę powiększenia — stały procent, dopasowanie do szerokości lub dopasowanie do strony, przeliczane automatycznie przy zmianie rozmiaru kontrolki; strony szersze niż rzutnia można przewijać, węższe są wyśrodkowywane - Dodano pakiet dla trybu projektowania (
Package\PDFlibViewerPkg.dpk), który rejestruje kontrolkę na stronie palety losLab PDF, aby umożliwić jej użycie metodą przeciągnij i upuść w środowisku IDE
Version 3.121.0
Dodano
- Automatyczne kształtowanie skryptów złożonych w
DrawText: tekst zawierający znaki arabskie, hebrajskie, indyjskie lub inne znaki skryptów złożonych jest teraz wykrywany i kształtowany automatycznie — formy kontekstowe liter, obowiązkowe ligatury i kolejność od prawej do lewej wychodzą poprawnie bez zmian w kodzie; nazwy standard-14 mapują się na ich metrycznie kompatybilne zainstalowane odpowiedniki (Helvetica na Arial, Times na Times New Roman, Courier na Courier New), aGetTextWidthmierzy przy użyciu tego samego przebiegu kształtowania, dzięki czemu wyrównanie pozostaje spójne; teksty łacińskie, cyrylica, greckie i CJK zachowują swoją dotychczasową ścieżkę rysowania bajt po bajcie - Dodano
SetTextShaping, aby przełączać automatyczne trasowanie (włączone domyślnie; przekaż 0, aby przywrócić dokładnie zachowanie sprzed wprowadzenia kształtowania)
Version 3.120.0
Zmieniono
- Czcionki towarzyszące dla ukształtowanego tekstu są teraz ograniczane do podzbioru (subsetted) podczas zapisu tylko do glifów widocznych w dokumencie, co drastycznie zmniejsza pliki wyjściowe (pełny program czcionki o rozmiarze ponad megabajta jest redukowany do użytych glifów); okrojona czcionka zachowuje swoją numerację glifów, zawiera nazwę
BaseFontz oznaczeniem podzbioru i rzeczywiste szerokości/Wna glif, a także zyskuje mapę ToUnicode, która tłumaczy każdy ukształtowany glif z powrotem na jego znaki źródłowe — dzięki czemu kopiowanie lub wyodrębnianie wynikuDrawShapedTextzwraca oryginalny ciąg, w tym obie litery kryjące się pod ligaturą lam-alef
Version 3.119.0
Dodano
- Dodano rysowanie tekstu w skryptach złożonych:
DrawShapedTextkształtuje znaki arabskie, hebrajskie i inne ciągi skryptów złożonych przed ich narysowaniem — kontekstowe formy liter, obowiązkowe ligatury, takie jak lam-alef, i kolejność od prawej do lewej wychodzą poprawnie — i zapisuje ukształtowane glify za pomocą towarzyszącej czcionki Type0 (Identity-H) osadzającej cały program czcionki, dzięki czemu formy bez własnego kodu znaku są renderowane dokładnie; na każdą czcionkę główną tworzona jest jedna czcionka towarzysząca i jest ona ponownie wykorzystywana w kolejnych wywołaniach - Dodano
GetShapedTextWidth, które mierzy tekst przy użyciu tego samego przebiegu kształtowania, więc tekst z ligaturami jest mierzony z zachowaniem jego rzeczywistej narysowanej szerokości — użyj tego, aby wyrównać do prawej lub wyśrodkować ukształtowane akapity
Version 3.118.0
Nowości
- Nowości the foundation for complex-script text shaping: a new Uniscribe (usp10.dll) binding turns Arabic, Hebrew and other complex-script strings into correctly ordered and shaped glyph runs — contextual Arabic forms, mandatory ligatures such as lam-alef, and right-to-left ordering — reporting each glyph's font glyph index, advance and source-character cluster; this is the shaping engine that later versions build the drawing path on, and it is loaded lazily so platforms without Uniscribe simply keep the existing per-character path
Version 3.117.0
Nowości
- Nowości ICC profile introspection:
GetOutputIntentICCInfoparses the ICC profile attached to the document's OutputIntent and reports its version, device class, data colour space, profile connection space, rendering intent and component count — useful for inspecting the print condition of PDF/A and PDF/X files; the renderer's ICCBased colour-space handling now also derives the component count from the profile header itself when a shading's colour space carries neither/Alternatenor/N
Version 3.116.0
Nowości
- Nowości a table-aware text extraction mode:
GetPageTextoption 10 clusters the left edges of the page's text blocks into global column positions and emits tab-separated rows, so tabular layouts extract as ready-to-import TSV with vertically aligned cells staying aligned across rows
Version 3.115.0
Nowości
- Nowości page imposition:
ImposePagesNUplays every page of the document out on new sheets in an n-up grid (2-up, 4-up, 9-up or any Columns x Rows arrangement) with each page aspect-fit and centred in its cell as live vector content, or — with the booklet option — produces saddle-stitch sheets whose page pairing folds into a booklet when printed duplex and stacked
Version 3.114.0
Nowości
- W użyciu na operowanych u
GetAnnotActionInfoi wykorzystanych od oznaczonych na wygenerowanych poGetOutlineActionInfoz 4 ujętymi w akcjach (Hide z ukrytymi obiektami pod flagą, ujęciom użytych u SubmitForm i URL z formularzem, pod ResetForm po instrukcje importu do ImportData). Po wpisanych z opcji z ujęciami we wdrożeniach (Named) i wprowadzonych powołaniem z parserami we wierszu do adnotacji.
Version 3.113.0
Nowości
- Nowości form-field formatting helpers:
SetFormFieldNumberFormat(decimal places, separator style, negative style and currency placement),SetFormFieldPercentFormatandSetFormFieldDateFormat(Acrobat date picture strings such asmm/dd/yyyy) each write the standard Acrobat formatting JavaScript pair onto the field's additional actions — a keystroke filter plus a display formatter — so conforming viewers validate input and render formatted values without hand-written JavaScript
Version 3.112.0
Nowości
- Nowości Sound annotation creation:
AddSoundAnnotationFromFilereads an uncompressed PCM WAV file (8 or 16 bit, mono or stereo) and embeds its samples behind a speaker-icon annotation as a/Soundstream in the signed encoding the PDF sound machinery expects, completing the round trip with the existingGetAnnotSoundToFile/GetAnnotSoundToStringreaders
Version 3.111.0
Nowości
- Nowości threaded annotation replies (ISO 32000-1 §12.5.6.3):
AddAnnotationReplyappends a reply to any existing annotation as a hidden Text annotation whose/IRTreferences the target with the/RTreply relationship, so Acrobat and other viewers show it threaded under the target in the comment panel; combine withAddAnnotationStateand the FDF comment interchange for complete collaborative-review round trips
Version 3.110.0
Nowości
- Nowości mesh and function-based shading rendering, completing coverage of all seven PDF shading types: free-form Gouraud triangle meshes (type 4), lattice-form Gouraud meshes (type 5), Coons patch meshes (type 6) and tensor-product patch meshes (type 7) are decoded from their bit-packed data streams — including shared-edge patch flags,
/Decodevalue mapping and optional colour/Functionramps — and painted through the Cairo engine's native mesh gradients; function-based shadings (type 1) are approximated by sampling the shading function over its domain into a fine patch grid; supported colour spaces cover DeviceRGB, DeviceGray, DeviceCMYK and ICCBased alternates (the GDI+ engine has no mesh gradient primitive and leaves mesh-shaded areas unpainted)
Version 3.109.0
Nowości
- Z użytych po odczytach opcji o edytowaniu (phase 4) z modyfikacjami dla
TPDFContentProgram.GetTextRunsdo użytych od przypisania instrukcji na podmienienie u wskazań we wdrożeniu o opcji na wskazanym uReplaceTextRunz opartych przy wymianach do wpisywanych pod opcję tekstów pod zdefiniowane parametry bez maskowania.
Version 3.108.0
Nowości
- Nowości an object model for page geometry to the content editing framework (phase 3):
TPDFContentProgram.LiftPathraises a path object (move/line/curve/rectangle construction operators plus the clipping and painting operators that end it) into an editableTPDFPathof subpaths and segments;TPDFPath.Transformapplies an affine matrix to every point (move, scale, rotate or skew existing artwork);LowerPathwrites the modified geometry back over the original instructions, ready forWritePageContentLayer
Version 3.107.0
Nowości
- Dla ujęć z (phase 2) we wdrożeniach u
TPDFContentProgramużyto: wprowadzanych zInsertFromSourcedo parsowania z opcji na splice, użytychSetOperandz oznaczaniem iOperandTextprzy nawigowaniu z wariantu użytej we wskazaniach na formacie zInstructionGroupczyFindNextOppo ułożeniu we wskazaniu od ISO.
Version 3.106.0
Nowości
- Nowości the first phase of the structured content editing framework:
ParsePageContentLayerdecodes a page content layer into an editableTPDFContentProgram— a list of instructions, each one PDF content operator (all 73 operators of ISO 32000-1 Table 51) with its decoded operand objects — andWritePageContentLayerserialises the program back into the page, so callers can parse, inspect, delete or reorder drawing instructions and rewrite the page;GetPageContentLayerCountreports the number of content layers, which are edited independently; the emitter is behaviour-preserving (an unmodified round trip renders pixel-identically), unknown operators survive unchanged and inline images are carried verbatim
Version 3.105.0
Nowości
- Nowości a reading-order text extraction mode:
GetPageTextoption 9 returns the page text in visual reading order using recursive whitespace analysis (XY-cut), so multi-column layouts come out column by column — a full-width heading first, then the whole left column, then the right column — instead of interleaving the columns line by line as the geometric top-then-left orderings do
Version 3.104.0
Nowości
- Nowości signer-certificate introspection to the signature verifier:
GetSignerCertificatedecodes the PKCS#7 payload of the first signature field and returns a typed summary of the embedded signer certificate — subject and issuer display names, the serial number in conventional hex form, the UTC validity window (NotBefore/NotAfter) and a convenience flag reporting whether the certificate is currently within that window; the signer is matched among the embedded certificates by issuer and serial number
Version 3.103.0
Nowości
- Nowości
NewRGBRadialShader, the radial counterpart ofNewRGBAxialShader: registers a named two-circle radial gradient (ShadingType 3, ISO 32000-1 §8.7.4.5.3) blending between two RGB colours, with optional colour extension beyond the circles; select it with the existingSetFillShader,SetLineShaderorSetTextShaderto paint circular “glow” fills, strokes and text
Version 3.102.0
Nowości
- Nowości radial (ShadingType 3) gradient rendering (ISO 32000-1 §8.7.4.5.4): the page renderer now paints two-circle radial shadings used by
shoperators and shading-pattern fills, in addition to the previously supported axial (ShadingType 2) gradients; supported through both the GDI+ and Cairo raster engines with multi-stop colour functions, DeviceRGB/DeviceCMYK/DeviceN/Separation/ICCBased colour spaces and/Extendhandling
Version 3.101.0
Nowości
- Nowości cloudy border effects (ISO 32000-1 §12.5.4):
SetAnnotCloudyEffectturns the border of a Square, Circle, Polygon or FreeText annotation into a “revision cloud” of connected semicircles by writing the/BEborder effect dictionary, with intensity 1 or 2 matching Acrobat's Cloudy styles and 0 removing the effect again;GetAnnotCloudyEffectreads the setting back (0 = no cloud, else the 1..2 intensity)
Version 3.100.0
Nowości
- Nowości annotation review states (ISO 32000-1 §12.5.6.3):
AddAnnotationStaterecords a review status change for an existing annotation by appending a hidden Text annotation whose/IRTpoints at the target and whose/State+/StateModelcarry the status, supporting theReviewmodel (None/Accepted/Rejected/Cancelled/Completed) and theMarkedmodel (Unmarked/Marked) used by Acrobat's comment-review workflow;GetAnnotStateandGetAnnotStateModelread the recorded strings back from any annotation (empty when absent)
Poprawki
- Poprawki a load-time failure that prevented applications built with recent development versions from starting (a Windows certificate-name lookup was bound to a non-existent DLL entry point), and repaired compile regressions in the FDF comment import, page-range rotation and signature-flag paths
Version 3.99.0
Dodano
- Dodano API do odczytu odcisku palca dokumentu i przejścia strony:
GetDocumentFileIDzwraca stały identyfikator dokumentu z tablicy/IDw trailerze (pierwszy element zakodowany szesnastkowo), przydatny jako stabilny klucz pamięci podręcznej lub odcisk palca dokumentu;GetPageTransitionto odpowiednik odczytu dlaSetPageTransition, zwracający styl przejścia jako silnie typowaną wartośćTPDFlibPageTransitionoraz czas wyświetlania i czas trwania przejścia poprzez odwrotne mapowanie zapisanych wpisów/Trans/S,/Dmi/M
Version 3.98.0
Dodano
- Dodano obrót zakresu stron i introspekcję miniatury:
RotatePageRangestosuje obrót o 0/90/180/270 do każdej strony w zakresie (opakowując istniejące, jednostronicowe wywołanieRotatePage, dzięki czemu wywołujący nie potrzebują już pętli dla każdej strony);HasPageThumbnailraportuje, czy strona zawiera wpis/Thumb;GetPageThumbnailInfoodczytuje szerokość, wysokość i liczbę bitów na komponent obrazu XObject miniatury
Version 3.97.0
Dodano
- Dodano czytniki rozszerzonych właściwości adnotacji:
GetAnnotColorodczytuje tablicę kolorów/C(0..1 RGB, z flagą HasColor rozróżniającą „brak jawnego koloru” od „jawnego czarnego”);GetAnnotBorderWidthodczytuje/BS /W, wracając awaryjnie do starszej tablicy/Border;GetAnnotOpacityodczytuje kanał alfa pociągnięcia/CA(domyślnie 1.0);GetAnnotCreationDateodczytuje znacznik czasu/CreationDate;GetAnnotFlagsodczytuje bajt flag widoczności/drukowania/F
Version 3.96.0
Dodano
- Dodano API do introspekcji bezpieczeństwa po stronie odczytu:
IsEncryptedraportuje, czy wczytywany dokument zawiera słownik/Encrypt;GetEncryptionLevelzwraca silnie typowaną siłę zabezpieczeń (0=none, 1=RC4-40, 2=RC4-128, 3=AES-128, 4=AES-256, 5=AES-256 Acrobat X) pasującą do opcji szyfrowania po stronie zapisu;GetUserPermissionszwraca surowe słowo uprawnień/Pdla bezpośredniego testowania bitowego;IsOwnerPasswordraportuje, czy dokument został otwarty przy użyciu poświadczeń właściciela
Version 3.95.0
Dodano
- Dodano zaawansowane drukowanie i zastępowanie tekstu:
PrintDocumentAdvancedobsługuje pełny DEVMODE drukarki (dupleks, orientacja, kolor, jakość wydruku, rozmiar papieru, podajnik papieru) na wierzchu liczby kopii/sortowania za pomocą rekordu o określonym typieTPDFlibPrintSettings, stosując każde niedomyślne pole poprzez istniejący mechanizm profilu niestandardowej drukarki;SearchAndReplaceTextwykonuje wyszukiwanie w danym zakresie stron i dla każdego trafienia maskuje oryginalny blok tekstu nieprzezroczystym, białym prostokątem, a następnie rysuje zastępczy tekst w punkcie początkowym bloku w czcionce wybranej przez wywołującego, naśladując działanie nakładania-zastępowania znane z PDFtoolkit SearchAndReplace
Version 3.94.0
Dodano
- Dodano wymianę adnotacji w formacie FDF (Acrobat „Export/Import Comments”):
ExportAnnotationsToFDFStringiExportAnnotationsToFDFprzechodzą przez tablicę/Annotskażdej strony i serializują każdą adnotację jako wpis/Type /Annotw tablicy/AnnotsFDF, przenosząc/Subtype,/Contents,/Rect, etykietę autora/T,/Subji indeks/Pageliczony od zera;ImportAnnotationsFromFDFStringiImportAnnotationsFromFDFanalizują taki plik FDF za pomocą prostej maszyny stanów i odtwarzają każdy wpis jako nową adnotację na dopasowanej stronie, zachowując pełny słownik adnotacji zamiast spłaszczać go do karteczki z notatką
Version 3.93.0
Dodano
- Dodano certyfikację podpisu i API właściwości pól formularza:
SetSignProcessDocMDPzmienia kolejny podpis generowany przez proces podpisywania w podpis certyfikujący (autorski), dołączając przekształcenie/ReferenceDocMDP na poziomie 1/2/3 (brak zmian / wypełnianie formularzy / adnotacje) i ustawiając bit AppendOnly we wpisie/SigFlagsAcroForm;GetSigFlags/SetSigFlagsodczytują i zapisują surowy bajt/SigFlagsw AcroForm bezpośrednio;GetFormFieldIsComb,GetFormFieldIsMultiLine,GetFormFieldJustificationiGetFormFieldAllowedValuesudostępniają bity stylu/Ff, wyrównanie tekstu/Qi tablicę wyboru/Optna poziomie pojedynczego pola jako silnie typowane wartości
Version 3.92.0
Dodano
- Dodano API eksportowania załączników i wygodne API dla pól formularza:
SaveAllAttachmentsprzechodzi przez zunifikowaną listę załączników (drzewo na poziomie dokumentu/EmbeddedFilesoraz adnotacje stron/FileAttachment) i zapisuje każdy strumień w wybranym katalogu pod nazwą z file-spec, rozstrzygając ewentualne kolizje sufiksem numerycznym;RemoveFormFieldByNamerozwiązuje pełną kwalifikowaną nazwę pola do jego indeksu i usuwa to pole;RenameFormFieldzmienia nazwę pola podając dotychczasową nazwę, bez konieczności oddzielnego wyszukiwania indeksu
Version 3.91.0
Dodano
- Dodano API wyliczające w całym dokumencie:
EnumDocumentFontsprzechodzi przez każdy słownik Font (najpierw wywołującFindFontsw razie potrzeby) i zwraca po jednym rekordzieTPDFlibDocumentFontdla każdej czcionki z jej numerem obiektu, nazwą/BaseFont, typem, kodowaniem i statusem osadzenia/podzbioru, usuwając konieczność wywoływaniaSelectFontdla każdego wpisu i przepytywania skalarnych funkcji zwracających wartość;EnumAttachmentsunifikuje drzewo nazw/EmbeddedFilesna poziomie dokumentu z adnotacjami/FileAttachmentna poziomie strony do jednej listyTPDFlibAttachment, rejestrując źródło każdego wpisu, indeks źródłowy liczony od 1, nazwę pliku, podtyp MIME, opis i rozmiar w bajtach
Version 3.90.0
Dodano
- Dodano API introspekcji tylko do odczytu dla adnotacji, zakładek i wersji dokumentu:
GetPDFVersionzwraca efektywny ciąg wersji PDF (np.1.7);GetAnnotType,GetAnnotTitle,GetAnnotSubject,GetAnnotContentsEx,GetAnnotModifiedDate,GetAnnotNameiGetAnnotRectExudostępniają właściwości adnotacji jako nazwane opakowania (więc wywołujący nie potrzebują już ukrytych numerów właściwości Tag) nad istniejącą pamięcią podręcznąAnalyseAnnot;GetOutlineLevelzwraca głębokość zakładki względem korzenia konturu, aGetOutlineIsOpenraportuje, czy jest ona rozwinięta w przeglądarce (ujemna wartość/Countoznacza zwiniętą), naśladując stan układu widoczny w panelu zakładek
Version 3.89.0
Dodano
- Dodano moduł kodera obrazów JBIG2
PDFlibJBIG2Enc(TPLJBIG2Encoder.EncodeToByteArray), przeniesiony z pokrewnego produktu HotPDF, z dwoma backendami: na Win64 koder arytmetyczny C++jbig2enc(ITU-T T.88) jest linkowany statycznie przezPDFlibJBIG2EncC+HPDFCLibs(228 obiektów leptonica/jbig2enc wthirdparty/Win64x/) i rejestrowany jako domyślny backend, co odpowiada ścieżce produkcyjnej HotPDF; na innych platformach, lub gdyUseExternalEncoderma wartość False, awaryjne rozwiązanie czystego Pascala MMR kompresuje dwupoziomowe linie skanowania za pomocą kodera CCITT G4 i osadza je w nagłówkach segmentów JBIG2 (page-info typu 48 + immediate generic-region typu 38) - Dodano moduł kodera LZW
PDFlibLZWEnc(TPLLZWEncoder.Compress), będący odpowiednikiem istniejącego dekoderaPDFlibLZW: tworzy strumień/LZWDecodezgodny ze specyfikacją PDF z kodami o zmiennej szerokości 9..12 bitów, znacznikami ClearCode/EOI oraz semantyką EarlyChange domyślną dla PDF, a także opcjonalnym TIFF Predictor 2 (różnicowanie poziome), dzięki czemu podróż w obie strony przez dekoder odtwarza oryginalne bajty
Version 3.88.0
Dodano
- Dodano moduł kodera dwupoziomowych obrazów CCITT Group 3 / Group 4 (T.6)
PDFlibCCITTEnc(TPLCCITTEncoder), będący odpowiednikiem istniejącego dekoderaPDFlibCCITT: koduje mapę bitowąpf1bitdo strumienia bajtów CCITT G3 1D / G3 2D / G4 (T.6) za pomocąCompressImage/Execute, przeniesiony z pokrewnego produktu HotPDF (oba współdzielą licencję losLab); dostarcza to brakujący koder, dzięki czemu można tworzyć monochromatyczne dane obrazu dla wyjściaCCITTFaxDecode, z pełną integracją potoku obrazu i wyjścia G4 dlaRenderPageToMonochromeFilew przyszłości
Version 3.87.0
Dodano
- Zaimplementowano weryfikację podpisów kryptograficznych dla odłączonych podpisów PKCS#7:
TPDFlibSignatureVerifier.VerifySignature(wcześniej atrapa zwracającavsUnknown) teraz ponownie oblicza skrót dokumentu na dwóch segmentach/ByteRangei weryfikuje go z podpisanym atrybutemmessageDigestoraz kluczem publicznym podpisującego za pomocą Windows CryptoAPI (CryptVerifyDetachedMessageSignature), zwracającvsValid/vsInvaliddla podfiltrówadbe.pkcs7.detachediETSI.CAdES.detached; jest to pierwsza warstwa weryfikacji i obejmuje tylko integralność skrótu i podpisu (łańcuch certyfikatów, odwołanie CRL/OCSP i weryfikacja tokena znacznika czasu RFC 3161 pozostają poza zakresem i zostaną dodane w późniejszych warstwach)
Version 3.86.0
Dodano
- Dodano wywołanie zwrotne dla każdej zakładki w czasie scalania: zdarzenie
OnMergeOutlineuruchamia się dla każdego źródłowego konturu najwyższego poziomu podczas gdyMergeFileList/MergeFileListFast/MergeFileListStrictłączy scalone drzewo konturów, pozwalając wywołującemu na zmianę nazwy (Title) lub odrzucenie (Skip=True) przychodzącej zakładki, zanim trafi ona do dokumentu docelowego; wywołanie zwrotne otrzymuje indeks dokumentu źródłowego liczony od zera, dzięki czemu wywołujący mogą stosować zasady dla każdego dokumentu
Version 3.85.0
Dodano
- Dodano podpisywanie z systemowego magazynu certyfikatów Windows:
SetSignProcessCertFromStorerozwiązuje certyfikat podpisujący z nazwanego magazynu ("MY"/"Root"/...) na podstawie prostej nazwy wyświetlanej podmiotu (zazwyczaj CN, dopasowywanej bez uwzględniania wielkości liter; pusta nazwa wybiera pierwszy certyfikat posiadający klucz prywatny) i ponownie wykorzystuje istniejący potok podpisywania PKCS#7, dzięki czemu dokument może zostać podpisany bez dostarczania pliku.pfx/.p12; połącz zSetSignProcessKeyset, aby wybraćCURRENT_USER(1) zamiastLOCAL_MACHINE(2)
Version 3.84.0
Dodano
- Dodano osadzanie programu czcionki dla już wczytanych dokumentów:
EmbedMissingFontsprzechodzi przez każdy słownik Font, czyta pasujący zainstalowany program czcionki systemowej na podstawie nazwy BaseFont i zapisuje z powrotemFontFile2lubFontFile3, zwracając liczbę czcionek, które otrzymały program;EmbedFontProgramosadza pojedynczą czcionkę po nazwie za pomocą zainstalowanej czcionki systemowej;EmbedFontProgramFromFileosadza pojedynczą czcionkę za pomocą dostarczonego przez wywołującego pliku.ttflub.otfdla czcionek niezainstalowanych w systemie - Dodano
SetEmbedAllFonts, zabezpieczenie po stronie zapisującego, które podnosiEmbed=0zAddTrueTypeFontdoEmbed=1, dzięki czemu nowo tworzone dokumenty nie mogą również przypadkowo odwoływać się do nieosadzonych czcionek systemowych poza trybem PDF/A
Version 3.83.0
Dodano
- Dodano pomocnicze API renderowania:
RenderPageToMonochromeFilerenderuje stronę do 1-bitowej monochromatycznej mapy bitowej (scenariusze faks/archiwizacja/OCR), redukując z 24 bitów poprzez dithering półtonowy GDI bez modyfikacji rdzenia renderującego;RenderPageRegionToFilerenderuje do mapy bitowej tylko wskazany podprostokąt strony (“Left,Top,Width,Height”), podłączając wcześniej odłączony potok przycięciaRenderPageToDCClip
Version 3.82.0
Dodano
- Dodano eksport danych formularza FDF:
ExportFormDataToFDFzapisuje wszystkie nazwy pól i wartości formularza z bieżącego dokumentu do oddzielnego pliku FDF (tablica/Fieldsopakowana w%FDF-1.2),ExportFormDataToFDFStringzwraca ciąg znaków o tej samej strukturze, co ułatwia przechowywanie danych formularza oddzielnie od pliku PDF lub późniejsze ich scalanie; bajty spoza zestawu ASCII są uciekane w formacie trzycyfrowym ósemkowym zgodnie z ISO 32000-1
Version 3.81.0
Dodano
- Dodano pomocnicze API stron i struktury:
SetPageTransitionzapisuje efekt przejścia prezentacji na wskazanej stronie (17 standardowych przejść w/Trans, w tym Split/Blinds/Wipe/Dissolve/Glitter itp.) oraz czas wyświetlania strony;GetPageFontCount,GetPageFontIDenumerują czcionki, do których odwołuje się wskazana strona;SetMeasurementUnitakceptuje silnie typowaną enumerację jednostek (dodając twips i points obok wcześniejszych pikseli/milimetrów/cali), co uzupełniają pomocniki konwersji jednostekConvertToPoints,ConvertFromPoints;SaveToFileOptionswykorzystuje jeden rekord do agregowania opcji zapisu, takich jak kompresja, linearyzacja i zachowanie daty modyfikacji
Version 3.80.0
Dodano
- Dodano pomocnicze API bezpieczeństwa i podpisów:
EncryptFileExakceptuje silnie typowany zestaw uprawnień nazwanych (TPDFlibUserPermissions, rozróżniający 8 nazwanych bitów uprawnień, np. drukowanie w niskiej i wysokiej rozdzielczości) zamiast surowej liczby całkowitej uprawnień;TPDFlibSignatureVerifier.GetSignatureMetadatabezpośrednio odczytuje ze słownika podpisu nazwę pola, Filter, SubFilter, czas podpisu, powód, lokalizację, informacje kontaktowe, sygnatariusza i walidację struktury ByteRange, bez konieczności dekodowania PKCS#7;PrintDocumentExokreśla liczbę kopii i sortowanie w jednym wywołaniu
Version 3.79.0
Dodano
- Dodano pomocnicze API edycji:
MaskRectrysuje nieprzezroczysty, wypełniony prostokąt pokrywający obszar na wskazanej stronie (maskowanie/redagowanie);SetPageThumbnailFromFilepodłącza/Thumbstrony bezpośrednio z pliku obrazu bez zanieczyszczania stanu rysowania w strumieniu zawartości;FlattenFormFieldsOnPageRangespłaszcza wszystkie pola formularza dla zakresu stron (wygląd wypalony jako zawartość statyczna z usunięciem pól aktywnych);InsertAnnotationwstawia na wskazanej pozycji wcześniej utworzony słownik adnotacji;NewMarkupAnnotationtworzy w jednym kroku adnotację znacznikową highlight/strikeout/underline/squiggly oraz zapisuje punkty quad, kolor i przezroczystość;StampText,StampImagenakładają znak wodny na zakres stron, obsługując przezroczystość, kąt obrotu i pozycję nakładania
Version 3.78.0
Dodano
- Dodano API wyszukiwania tekstu i enumeracji elementów strony:
SearchTextwyszukuje zapytanie w określonym zakresie stron, zwracając numer strony i prostokąt ograniczający dla każdego trafienia, z opcjami uwzględniania wielkości liter i dopasowywania całych słów;EnumPageElementsenumeruje wszystkie bloki tekstowe i osadzone elementy obrazów dla wskazanej strony, jednolicie zwracając typ elementu, prostokąt, tekst, nazwę czcionki i identyfikator obrazu;GetTextInAreaExto wersjaGetTextInAreauwzględniająca prostokąt graniczny, która zwraca każdy blok tekstu w danym obszarze i jego prostokąt ograniczający
Version 3.77.0
Dodano
- Dodano API introspekcji tylko do odczytu, wypełniające wcześniejszą asymetrię "można pisać, nie można czytać":
FindOutlineByTitlewyszukuje zakładkę według tytułu (obsługując głębokość: tylko ten sam poziom/tylko dzieci/całe poddrzewo),GetOutlineActionInfoiGetAnnotActionInfozwracają w strukturze o określonym typie rodzaj akcji dla zakładki lub adnotacji (GoTo/GoToR/URI/Launch/Named/JavaScript) oraz jej payload: URI, JavaScript, nazwę pliku,GetOutlineDestinationInfozwraca stronę docelową i typ Fit (XYZ/Fit/FitH/FitV/FitR/FitB/FitBH/FitBV) z odpowiednimi współrzędnymi,EnumSignatures,GetSignatureFieldCount,GetSignatureFieldInfoenumerują pola podpisu i raportują, czy zostały już podpisane
Version 3.76.3
Zmieniono
- Profil Factur-X EXTENDED w demonstracji E-Invoice używa teraz standardowej wartości conformance oraz standardowego identyfikatora guideline, a faktura ZUGFeRD 1.0 dodaje elementy sumaryczne
ChargeTotalAmountiAllowanceTotalAmount; wszystkie 6 profili tworzy teraz wyjście PDF/A-3b i PDF/A-3u przechodzące walidację zarówno veraPDF (zgodność PDF/A), jak i Mustang (reguły biznesowe fakturowania elektronicznego)
Version 3.76.2
Naprawiono
- Metadane XMP faktur hybrydowych Factur-X/ZUGFeRD deklarują teraz schemat rozszerzenia PDF/A (
pdfaExtension:schemas) opisujący właściwości fakturyfx:; wcześniej brak tej deklaracji powodował, że wygenerowany PDF/A-3 był uznawany za niezgodny przez walidatory takie jak veraPDF
Zmieniono
- Plik XML faktury w demonstracji E-Invoice zawiera teraz adresy elektroniczne sprzedawcy i nabywcy oraz numer telefonu sprzedawcy, dzięki czemu więcej profili przechodzi walidację reguł biznesowych ZUGFeRD/Factur-X
- Katalog profili, budowa pliku XML i przepływ generowania PDF/A-3 w demonstracji E-Invoice zostały wydzielone do współdzielonej unit-y, którą współużytkują zarówno GUI, jak i nowe narzędzie testowe walidatora zewnętrznego
Version 3.76.1
Naprawiono
- Naprawiono awarię po kliknięciu Generuj w demonstracji E-Invoice: wbudowane czcionki standardowe są niedostępne w trybie PDF/A, więc demonstracja osadza teraz czcionkę TrueType do renderowania strony faktury
Zmieniono
- Demonstracja E-Invoice usuwa opcję PDF/A-3a (rzadko stosowaną w fakturowaniu elektronicznym), a profil XRechnung używa teraz domyślnie PDF/A-3u
Version 3.76.0
Zmieniono
- GUI demonstracji E-Invoice jest teraz oparte na danych: numer faktury, data wystawienia, nabywca i sprzedawca, kwota netto, stawka podatkowa i waluta są edytowalne, a plik XML faktury odpowiada dokładnie widocznym kwotom na stronie zamiast używać stałej treści zastępczej
- Demonstracja generuje poprawny strukturalnie plik XML faktury dla każdego profilu: Factur-X, XRechnung i ZUGFeRD 2.0 używają struktury
CrossIndustryInvoice, natomiast ZUGFeRD 1.0 COMFORT używa własnej strukturyCrossIndustryDocumentz pozycjami pozycji, sumami podatków i warunkami płatności - Kwoty są zapisywane do pliku XML w stałym angielskim formacie z kropką dziesiętną, aby zlokalizowane separatory tysięcy lub przecinki nie psuły schematu, a dane wprowadzane przez użytkownika są escapowane przed zapisem
- Demonstracja dodaje podgląd XML na żywo, autokontrolę treści na poziomie profilu, analizę externalnego raportu walidacji
.validation.jsono tej samej nazwie oraz jawnie ładuje intent wyjściowy ICC sRGB z repozytorium podczas generowania
Version 3.75.6
Dodano
SetPDFAModedodaje tryb7, który pozwala tworzyć metadane PDF/A-3u i nadal dopuszcza pliki powiązane PDF/A-3; demo GUI E-Invoice również udostępnia opcję PDF/A-3u, a profil ZUGFeRD 2.0 BASIC domyślnie używa PDF/A-3u
Version 3.75.5
Dodano
- Dodaje demo GUI Delphi E-Invoice, które pozwala wybierać profile Factur-X, ZUGFeRD i XRechnung, generować hybrydowe faktury PDF/A-3, osadzać pasującą nazwę pliku XML i guideline ID, uruchamiać walidację kontenera w interfejsie oraz pokazywać informacje faktury XMP, problemy walidacji i wyodrębniony XML
Version 3.75.4
Dodano
- Dodaje obsługę plików powiązanych PDF/A-3 i XML faktury elektronicznej:
AddPDFA3AssociatedFileFromStringmoże tworzyć pliki powiązane Catalog/AFbezpośrednio z bajtów w pamięci,AddFacturXAssociatedFileFromStringmoże zapisywać XML Factur-X, ZUGFeRD i XRechnung, synchronizować metadane XMP oraz walidować kombinację nazwy pliku, profilu, przestrzeni nazw XMP i XML guideline ID, a strona odczytu dodaje API wykrywania, walidacji, listy problemów i ekstrakcji XML
Version 3.75.3
Naprawiono
- Funkcja scalania PDF: zmienne lokalne
GlobalRootObjNum,GlobalRootGenNum,StructRootGlobalObjNumiStructRootGlobalGenNumbyły przypisywane wyłącznie wewnątrz bloków warunkowych, co powodowało ostrzeżenia W1036 “zmienna może nie być zainicjalizowana” w kompilatorach Delphi Win64 26 i 29 (RAD Studio 12 i 16); dodano inicjalizację zerową na początku funkcji
Version 3.75.2
Naprawiono
- Zgodność kompilacji w wielu wersjach: pętla
forw parserze łańcuchów szesnastkowych (PDFlibStruct) używała zmiennej sterującej typuInt64, którą Delphi XE3/XE5 (kompilatory 26/27) odrzucają jako nieporządkową; przepisano ją jako pętlęWhile, aby przywrócić zgodność z RAD Studio 12 i 14 - Kontroler XObject odwołań (
PDFlibPDFUA): wskaźnik słownikowyDnie był inicjalizowany w gałęzi niebędącej strumieniem ani słownikiem, co powodowało wskazówkę kompilatora na wszystkich platformach; przebudowano gałąź tak, aby zawsze przypisywaćDprzed sprawdzeniemAssigned - Opakowanie
CreateFontPackage(PDFlibFont): wyciszono fałszywe W1035 “wartość zwracana może być niezdefiniowana” w Delphi ≤ XE8, jednocześnie unikając odpowiadającej wskazówki H2077 o martwym przypisaniu w nowszych kompilatorach, przez osłonę{$IF CompilerVersion} - Zapisywacz DPI BMP i ścieżka przyrostowego zapisu PDF: zastąpiono przestarzałe wywołania
TStream.Seek(Longint, Word)przypisaniamiPosition :=(PDFlibPDFium,PDFlibDocument)
Version 3.75.1
Naprawiono
- Wielostronicowy parser TIFF: osłona kończąca pętlę przed nadmiernie dużą liczbą stron była nieskuteczna, ponieważ
FPageCountbył zadeklarowany jakoWord(maksimum 65 535), przez co porównanie> 65535zawsze było fałszywe; zmieniono naInteger, aby osłona uruchamiała się teraz poprawnie na patologicznych plikach - Parser zestawu znaków CFF/Type 2 (Format 1 i Format 2): usunięto martwe przypisania
Done := True, które bezpośrednio poprzedzałyBreaki dlatego nigdy nie były odczytywane, eliminując wskazówki kompilatora
Version 3.75.0
Zabezpieczenia
- Wzmocniono analizę niezaufanych osadzonych czcionek (TrueType, Type 1, CFF i CMap) przed zapisami poza zakresem, nieograniczoną rekurencją charstringów i nadmiernymi alokacjami pamięci z uszkodzonych danych czcionki
- Wzmocniono dekodery obrazów (PNG, GIF, TIFF, JBIG2 i CCITT Group 3 i 4) przed odczytami i zapisami poza zakresem, przepełnieniem całkowitym w obliczeniach szerokości i wysokości oraz dereferencjami pustej palety złośliwych obrazów
- Wzmocniono filtry strumieni (LZW, ASCII85 i predyktory Flate) przed odczytami poza bufor, dzieleniem przez zero i pętlami, które nie kończą się, na spreparowanych danych strumienia
- Wzmocniono analizę odsyłaczy krzyżowych, odbudowy dokumentu i drzew nazw przed dostępem poza zakresem i pętlami nieskończonymi wywołanymi przez zniekształcone lub cykliczne dane odsyłaczy krzyżowych
- Odszyfrowywanie AES-CBC teraz sprawdza wyrównanie bloków szyfrogramu i zeruje bufor wyjściowy, zapobiegając wyciekowi niezainicjalizowanej pamięci sterty do odszyfrowanych łańcuchów i strumieni
Naprawiono
- Skróty podpisów odłączonych SHA-256, SHA-384 i SHA-512 są teraz tworzone przez właściwego dostawcę kryptograficznego; wcześniej zwracały pusty skrót i dawały nieprawidłowe podpisy
- Dekodowanie ASCII85 i RC4 nie zwraca już niezainicjalizowanych danych ani nie zgłasza wyjątku przy uciętym wejściu lub pustym kluczu
- Kolor tła GIF jest teraz odczytywany z poprawnym kanałem niebieskim zamiast duplikować kanał zielony
Version 3.74.1
Naprawiono
- Naprawiono błąd kompilacji E2010 typu niezgodnego w obsłudze danych walidacji podpisu PAdES (VRI), który uniemożliwiał kompilację biblioteki
- Usunięto ostatnie ostrzeżenie kompilatora i wskazówki o nieużywanych zmiennych; wszystkie kompilacje bibliotek trial i release dla Win32 i Win64 kompilują się teraz bez zastrzeżeń
Version 3.74.0
Dodano
- Bezpośrednie ścieżki plikowe
EncryptFileiDecryptFileteraz odczytują pliki PDF, których dane odsyłaczy krzyżowych znajdują się w strumieniach odsyłaczy krzyżowych, w tym łańcuchy aktualizowane przyrostowo i pliki hybrydowe z boczną sekcją/XRefStm, zamiast wracać do wolniejszego pełnego czytnika: ochrona AES-256 dokumentu testowego o wielkości 1.25 GB spadła z około 4.4 do 2.5 sekundy, a odszyfrowywanie z około 1.7 do 1.3 sekundy - Przepisania przenoszące obiekty zapisane w skompresowanych strumieniach obiektów teraz emitują trailer strumienia odsyłaczy krzyżowych, dzięki czemu te obiekty pozostają adresowalne w zaszyfrowanym lub odszyfrowanym wyjściu
Naprawiono
- Rewizja bez dokumentowego
/IDw pliku aktualizowanym przyrostowo nie usuwa już identyfikatora odziedziczonego po wcześniejszej rewizji podczas bezpośredniego przepisywania
Version 3.73.2
Zmieniono
DASaveAsFileteraz agreguje zapis wyjściowy i odnajduje końcowe słowo kluczowe każdego obiektu bez alokacji łańcuchów na każdym kroku, skracając przepisanie dokumentu testowego 2 GB z ponad milionem obiektów z około 57 do 11 sekund
Version 3.73.1
Zmieniono
- Bezpośrednie ścieżki plikowe
EncryptFileiDecryptFileteraz odczytują źródło przez przesuwane okno i agregują zapisy wyjściowe, więc ochrona AES-256 bardzo dużych PDF-ów z milionami obiektów działa kilka razy szybciej: na dokumencie testowym 2 GB szyfrowanie spadło z około 123 do 32 sekund, a odszyfrowywanie z około 127 do 23 sekund - Obiekty mieszczące się w oknie odczytu nie są już pobierane z dysku dwa razy podczas bezpośredniego przepisywania AES-256
Naprawiono
- Bezpośrednie przepisywania AES-256 plików PDF hybrydowych (plików zawierających wpis traileru
/XRefStm) teraz wracają do pełnego czytnika zamiast ryzykować utratę skompresowanych obiektów - Analiza odsyłaczy krzyżowych w bezpośredniej ścieżce plikowej nie odczytuje już za jednym razem wszystkiego od sekcji odsyłaczy krzyżowych do końca pliku, co mogło wyczerpać pamięć w wielogigabajtowych plikach, których łańcuch
/Prevwskazuje blisko początku pliku, a uszkodzony łańcuch/Prevteraz wraca do pełnego czytnika zamiast tworzyć niepełny dokument
Version 3.73.0
Dodano
- Demo SigningWorkbench teraz wykonuje pełną kryptograficzną weryfikację skrótu odłączonych podpisów CMS (
adbe.pkcs7.detachediETSI.CAdES.detached) przez Windows CryptoAPI: podpisane zakresy bajtów są ponownie haszowane i porównywane z podpisem CMS, zmodyfikowany dokument jest zgłaszany nowym kodem niepowodzenia SG203, a każdy podpis ma trójstanowe poledigestValidw raportach JSON, CSV i HTML - Nowe przełączniki automatyzacji SigningWorkbench:
--quietwypisuje tylko podsumowanie wsadu i ścieżki raportów,--fail-fastzatrzymuje wsad przy pierwszym nieudanym pliku, a raport JSON zapisuje teraz wersję biblioteki
Version 3.72.0
Dodano
- Demo ComplianceWorkbench zyskuje profesjonalne przepływy pracy wsadowej:
--policy-filewczytuje politykę audytu z pliku JSON, dzięki czemu zespoły mogą wersjonować i udostępniać reguły dokumentów,--baselineporównuje uruchomienie z wcześniejszym compliance-report.json i wylicza nowe niepowodzenia, naprawione pliki oraz pliki, które nadal się nie powiodły, a--preflight-detailsosadza wiersze problemów preflight w raportach JSON i HTML - Nowe przełączniki automatyzacji ComplianceWorkbench:
--quietwypisuje tylko podsumowanie wsadu i ścieżki raportów,--fail-fastzatrzymuje wsad przy pierwszym nieudanym pliku, a raport JSON zapisuje teraz wersję biblioteki
Version 3.71.2
Naprawiono
AppendToFileponownie dopisuje aktualizacje przyrostowe do tego samego pliku PDF wczytanego przezLoadFromFile; loader strumieniowy teraz utrzymuje źródłowy plik możliwy do odczytu bez blokowania uchwytu zapisu potrzebnego do aktualizacji
Version 3.71.1
Dodano
- Raporty ComplianceWorkbench i SigningWorkbench teraz zawierają etykiety ważności ustaleń, pola najwyższej ważności dla pliku, podsumowania częstotliwości ważności wsadu oraz zgodne wyjścia JSON, CSV, HTML i konsolowe dla szybszego triage polityk
Version 3.71.0
Dodano
- Kontrola demo SigningWorkbench teraz raportuje kolejność rewizji i poziom certyfikacji DocMDP każdego podpisu, oznacza słabe algorytmy podpisu certyfikatu MD5/SHA-1 oraz starszy SubFilter
adbe.pkcs7.sha1przełącznikiem--forbid-weak-digest(SG303/SG405), podpisane samodzielnie certyfikaty przełącznikiem--forbid-self-signed(SG406), dokumenty bez podpisu certyfikacyjnego przełącznikiem--require-certified(SG304), i zawsze sprawdza, czy czas podpisania mieści się w okresie ważności certyfikatu (SG407) - Tryb podpisywania SigningWorkbench teraz korzysta z interfejsu API procesu podpisywania z nowymi przełącznikami
--subfilter(sha1, detached lub cades dla podpisów bazowych PAdES) i--digest(auto do sha512), a nowoczesnyadbe.pkcs7.detachedz SHA-256 jest nowym domyślnym wyborem podpisywania - Nowy dostęp tylko do odczytu
TPDFlibSignDoc.GetSignatureDocMDPLevelByNamezwraca poziom certyfikacji DocMDP pola podpisu zgodnie z ISO 32000-1 §12.8.2.2
Version 3.70.0
Dodano
- Demo ComplianceWorkbench teraz także wymusza polityki uprawnień, metadanych i rozmiaru:
--require-print-allowedi--require-copy-allowedsprawdzają bity uprawnień dokumentu (PC205/PC206),--require-authori--require-creation-datesprawdzają kompletność metadanych (PC306/PC307), a--max-pagesi--max-file-sizeograniczają skalę dokumentu (PC308/PC309) - Profil archiwum teraz także wymaga autora i daty utworzenia, a profil dostępności wymaga uprawnienia kopiowania, na którym opiera się technologia wspomagająca
- Raporty ComplianceWorkbench teraz agregują podsumowanie częstotliwości kodów niepowodzeń w całym wsadzie, a metryki dla każdego pliku obejmują autora, datę utworzenia, rozmiar pliku oraz stany uprawnień drukowania i kopiowania
Version 3.69.1
Naprawiono
DecryptFileponownie usuwa szyfrowanie z dokumentów chronionych AES-128 i RC4, w tym dokumentów zawierających tylko hasło właściciela; od v3.67.4 szybka ścieżka dla dużych plików błędnie zgłaszała te dokumenty jako mające złe hasło (błąd 404) zamiast przekazywać je do zwykłej ścieżki odszyfrowywania, podczas gdy dokumenty AES-256 nie były dotknięte
Version 3.69.0
Dodano
- Nowe demo SigningWorkbench Delphi: konsolowe narzędzie robocze podpisów i certyfikatów, które sprawdza pola podpisu pojedynczego PDF-a albo całego katalogu (SubFilter, czas podpisu, pokrycie ByteRange i podpisujący certyfikat z kontrolą wygaśnięcia), podpisuje wsadowo pliki PDF certyfikatem PKCS #12 i audytuje pliki PFX; każde naruszenie mapuje się na stabilny kod niepowodzenia polityki (SG101–SG501), a wyniki są zapisywane jako raporty JSON, CSV i HTML z lokalizowanymi przewodnikami demonstracyjnymi dla wszystkich 18 języków dokumentacji
- Nowe akcesory odczytu podpisów w
TPDFlibSignDoc:GetSignatureFieldNameswylicza pola podpisu dokumentu,GetSignatureTextValueByNamezwraca wpisy /M czasu podpisu, /Name, /Reason, /Location, /ContactInfo i /Type (z odszyfrowaniem w dokumentach zaszyfrowanych), aGetSignatureValueByNamezwraca /Filter, /SubFilter, /Contents oraz wpisy ByteRange według nazwy pola
Naprawiono
- Naprawiono import Windows CryptoAPI
CertCloseStore, który był zadeklarowany bez parametru flag i mógł uszkodzić stos wywołującego na Win32 przy zamykaniu magazynu certyfikatów
Version 3.68.0
Dodano
- Nowe demo ComplianceWorkbench Delphi: konsolowe narzędzie audytu polityk wsadowych, które sprawdza pojedynczy PDF albo cały katalog względem konfigurowalnej polityki zgodności obejmującej preflight PDF/A i PDF/UA, reguły szyfrowania, zakres wersji PDF, Tagged PDF, linearyzację i tytuł dokumentu, raportuje każde naruszenie jako stabilny kod niepowodzenia polityki (PC101–PC501) i zapisuje raporty JSON, CSV oraz HTML z kodami wyjścia przyjaznymi automatyzacji
- Nowy zestaw profili polityk dołącza wspólne zestawy wymagań—archive, accessible, secure i web—z jawnymi przełącznikami wiersza poleceń nadpisującymi wartości profilu, i zawiera zlokalizowane przewodniki demonstracyjne dla wszystkich 18 języków dokumentacji
Version 3.67.4
Zmieniono
EncryptFileiDecryptFileteraz używają bezpośredniej ścieżki przepisywania AES-256 dla dużych klasycznych plików PDF z xref, przesyłając zaszyfrowane dane między plikami zamiast wczytywać i ponownie serializować każdy obiekt; plik testowy 2 GB teraz kończy szyfrowanie i odszyfrowywanie plik-do-pliku AES-256 przez Direct File API z kodem wyniku 1 iLastErrorCode0
Naprawiono
- Naprawiono obsługę tokenów łańcuchowych AES-256 w bezpośredniej ścieżce, tak aby ograniczniki słowników nie były mylone z łańcuchami szesnastkowymi, a zaszyfrowane puste łańcuchy odszyfrowywały się poprawnie
Version 3.67.3
Zmieniono
- Rozszerzono demonstracje Delphi i C++Builder dla DrawShapes, CreateWithImage, CreateTable, EditFormField oraz EmbeddedFonts, aby generowane pliki PDF prezentowały teraz praktyczne przepływy pracy dotyczące rysowania, umieszczania obrazów, układu tabel, stylizacji pól formularzy i porównywania osadzania czcionek zamiast minimalnego wyniku pojedynczej akcji
Naprawiono
- Poprawiono demonstrację CreateTable tak, aby przed renderowaniem tabeli ustawiała jawny rozmiar strony A4, unikając wcześniejszej niezainicjowanej zmiennej rozmiaru strony w przykładzie Delphi
Version 3.67.2
Naprawiono
- Naprawiono regresję z leniwej detekcji po stronie loadera wprowadzonej w v3.67.0: detekcja cech zawartości mogła uruchamiać się podczas zapisu i nadpisywać jawnie żądaną wersję zapisu (SetInformation 0) albo wersję zablokowaną (LockSaveVersion), przez co rygorystyczny zapis do niższej wersji nie odrzucał już zawartości wymagającej wyższej wersji, a wersja zablokowana mogła przesuwać się w górę; detekcja działa teraz przed każdym jawnym ustawieniem wersji i nigdy nie uruchamia się dla dokumentów utworzonych zamiast wczytanych, przywracając zachowanie kontroli wersji sprzed v3.67.0 przy zachowaniu oszczędności z leniwego ładowania
Version 3.67.1
Zmieniono
- Detekcja cech odczytuje teraz obiekty strumieni za pomocą płytkiego parsowania, które sprawdza tylko słownik obiektu i pomija ciało strumienia, ponieważ skanowanie nigdy nie analizuje zawartości strumieni; w dokumentach z dużymi strumieniami obrazów pozwala to uniknąć czytania bajtów ciała podczas detekcji, skracając czas odczytu obiektów w przebiegu detekcji o około 40% (około 13 s zamiast 20 s na pliku 2 GB z 1,6 mln obiektów), przy zachowaniu identycznej listy wykrytych cech i efektywnej wersji PDF
Version 3.67.0
Zmieniono
- Wykrywanie cech zawartości po stronie wczytującej jest teraz odroczone (lazy) – zamiast skanować cały dokument podczas wczytywania, uruchamia się przy pierwszym użyciu, gdy odpytywana jest efektywna wersja PDF lub lista wykrytych cech albo gdy dokument jest zapisywany; operacje tylko do odczytu, takie jak liczenie stron, wyodrębnianie tekstu lub obrazów i renderowanie, które nigdy nie odpytują wersji ani nie zapisują ponownie, całkowicie pomijają skanowanie, skracając czas wczytywania bardzo dużych dokumentów o około 80% (około 10 s zamiast 56 s dla pliku o rozmiarze 2 GB z 1,6 miliona obiektów), podczas gdy zestaw wykrytych cech i efektywna wersja PDF pozostają identyczne po wykonaniu wykrywania
Version 3.66.1
Zmieniono
- Wczytywanie bardzo dużych, wielostronicowych dokumentów jest teraz znacznie szybsze: wykrywanie cech zawartości po stronie wczytującej pomija sprawdzenia reguł, które nie mogą zmienić wyniku – zarówno reguły już dopasowane, jak i reguły niemające zastosowania do danego obiektu – co skraca czas wczytywania ogromnych plików o około połowę, zachowując identyczne wykryte cechy i efektywną wersję PDF
Version 3.66.0
Zmieniono
- Ładowanie bardzo dużych dokumentów wielostronicowych wymaga teraz znacznie mniej pamięci szczytowej. Wykrywanie cech zawartości po stronie ładowarki nie materializuje już całego modelu obiektów naraz – przegląda czytnik dostępu swobodnego obiekt po obiekcie – zmniejszając szczytowe użycie working set o około 90 % dla ogromnych plików, przy jednoczesnym zachowaniu wykrytych cech i efektywnej wersji PDF.
Version 3.65.0
Dodano
- Można teraz otwierać dokumenty większe niż 2 GB. Usunięto dotychczasowy bufor w pamięci, który ograniczał rozmiar dokumentu do około 2 GB.
Zmieniono
- Podczas wczytywania pliku PDF dane obiektów są teraz odczytywane na żądanie ze źródła, zamiast buforować cały dokument w pamięci, co znacznie zmniejsza szczytowe zużycie pamięci w przypadku dużych plików.
- Dokument wczytany z pliku utrzymuje ten plik otwarty z dostępem do odczytu współdzielonego, dopóki dokument nie zostanie zamknięty lub wyczyszczony.
Naprawiono
- Zwiększono odporność podczas wczytywania dokumentów zawierających początkowe bajty przed nagłówkiem %PDF- oraz podczas przetwarzania nieprawidłowych danych cross-reference.
Version 3.64.0
Zmieniono
- Operacje interfejsu Direct API na bardzo dużych plikach PDF lub plikach o dużej liczbie obiektów – EncryptFile, DecryptFile i DASaveAsFile – są teraz radykalnie szybsze i już się nie zawieszają. Dokument o rozmiarze 2 GB z około 1,6 miliona obiektów, którego wcześniej nie można było ukończyć, jest teraz szyfrowany w około minutę, a czas przetwarzania rośnie w przybliżeniu liniowo wraz z dokumentem, zamiast gwałtownie pogarszać się wraz ze wzrostem liczby obiektów.
- Szyfrowanie dużych dokumentów jest znacznie szybsze – operacja, która wcześniej trwała wiele minut, jest teraz wykonywana w kilka sekund do około minuty – bez zmiany siły szyfrowania, zgodności szyfrogramu ani danych wyjściowych.
Version 3.63.0
Naprawiono
- Naprawiono awarię procesu podczas wczytywania dużych plików PDF, których wewnętrzne przesunięcia bajtów przekraczają granicę 32 bitów (około 2 GB); program wczytujący używa teraz 64-bitowych przesunięć w całości, dzięki czemu pliki zbliżone do 2 GB wczytują się niezawodnie, a pliki o rozmiarze 2 GB lub większym poprawnie zgłaszają błąd wczytywania zamiast się zawieszać.
Version 3.62.0
Zmieniono
- Szyfrowanie i deszyfrowanie AES-256-CBC korzystają teraz z przyspieszanej sprzętowo ścieżki AES-NI także w 32-bitowym systemie Windows, nie tylko w 64-bitowym, nadal z automatycznym przejściem na przenośną implementację w C na procesorach bez AES-NI. Szyfrogram pozostaje niezmieniony na każdej platformie.
Version 3.61.0
Zmieniono
- Szyfrowanie i deszyfrowanie AES-256-CBC korzystają teraz z przyspieszanego sprzętowo backendu AES-NI w 64-bitowym systemie Windows, z automatycznym przejściem na przenośną implementację programową na procesorach bez AES-NI. Szyfrogram jest identyczny na każdej platformie; zmienia się tylko szybkość szyfrowania PDF AES-256 opartego na haśle.
Version 3.60.0
Dodano
MergeFileListscala teraz drzewa struktury logicznej (Tagged PDF) dokumentów wejściowych w jedno osiągalne drzewo struktury, zamiast zachowywać tylko drzewo pierwszego dokumentu i pozostawiać pozostałe jako nieosiągalne obiekty. Elementy struktury najwyższego poziomu, parent tree (z przemapowanymi kluczami strony/StructParentsi adnotacji/StructParent),/RoleMap,/ClassMapi/IDTreesą łączone, a scalony katalog jest oznaczany jako Tagged (/MarkInfo /Marked true).
Zmieniono
- Podczas scalania dokumentów z kolidującymi kluczami
/RoleMap,/ClassMaplub/IDTreezachowywane jest pierwsze wystąpienie. Szybka ścieżka (MergeFileListFast) nadal pomija informacje o strukturze.
Version 3.59.0
Zmieniono
MergeFileListscala teraz dokumenty w jednym przebiegu (O(N) zamiast O(N²)), co znacznie przyspiesza scalanie wielu plików; zyskuje również scalanie zakładek z wielu dokumentów dodane do szybkiej ścieżki.- Domyślnie
MergeFileListpomija teraz nieczytelne lub zaszyfrowane pliki wejściowe i kontynuuje scalanie pozostałych, zamiast przerywać całą operację przy pierwszym błędnym pliku. Użyj nowej funkcjiMergeFileListStrict, aby przywrócić poprzednie zachowanie zatrzymywania przy pierwszym błędzie. - Obiekty struktury logicznej (Tagged PDF) z plików wejściowych są teraz zachowywane przez
MergeFileList(szybka ścieżka nadal je odrzuca).
Dodano
MergeFileListStrictscala listę plików, ale zatrzymuje się przy pierwszym nieczytelnym lub zaszyfrowanym pliku, zachowując ścisłą semantykę zatrzymywania przy błędzie z wcześniejszych wersji.
Version 3.58.0
Dodano
MergeFileListFastscala teraz zakładki (konspekty) dokumentu ze wszystkich plików wejściowych, dzięki czemu szybka ścieżka scalania zachowuje zakładki oprócz pól formularza AcroForm.- Scalone zakładki zachowują swoją hierarchię i miejsca docelowe na stronach; liczba zakładek najwyższego poziomu w scalonym wyniku jest równa sumie danych wejściowych.
Version 3.57.1
Zmieniono
- Zapisywanie przez Direct File API (
DASaveAsFile,DASaveToStream,DASaveCopyToStream) jest teraz znacznie szybsze w przypadku bardzo dużych dokumentów: niezmienione obiekty są kopiowane bezpośrednio z bajtów źródłowych, zamiast być ponownie analizowane i serializowane. Ponowny zapis dokumentu liczącego 60 000 stron / 883 MB spadł z około 33 sekund do około 23 sekund.
Version 3.57.0
Zmieniono
- Wydajność
TPDFlib.MergeFileListFastprzy scalaniu wielu dokumentów została dalej zoptymalizowana: niezmienione obiekty niestreamingowe w dołączanych dokumentach są teraz ponownie wykorzystywane bezpośrednio z ich oryginalnych bajtów źródłowych z przesunięciem odwołań pośrednich na poziomie bajtów, pomijając cykl parsowania i ponownej serializacji oraz poprawiając przepustowość dla wielostronicowych dokumentów. Wynik scalania pozostaje niezmieniony, z identyczną liczbą stron. - Obiekty zawierające strumienie lub należące do drzewa struktury nadal korzystają z istniejącej ścieżki dekodowania, więc szybsza ścieżka bajtowa jest stosowana tylko tam, gdzie jest to udowodnione bezpieczne.
Version 3.56.44
Zmieniono
TPDFlib.MergeFileListFastzoptymalizowano przez wcześniejsze przydzielanie metadanych scalania i zapisywanie niezmienionych obiektów pierwszego dokumentu z ich oryginalnych danych źródłowych, co zmniejsza obciążenie pamięci i zbędną pracę dekodowania/wyjścia obiektów przy szybkich scalaniach wielu plików.- Interfejs Delphi
MergePDFgrupuje teraz logowanie wyników trybu szybkiego i unika powtarzanych skanów całego tekstu memo, dzięki czemu duże listy wejściowe pozostają bardziej responsywne po zakończeniu scalania.
Version 3.56.43
Zmieniono
- Zoptymalizowano zwykłą ścieżkę scalania
TPDFlib.MergeFileList, przełączając pośrednie pliki tymczasowe zamiast kopiować rosnący scalony PDF przed każdym kolejnym plikiem wejściowym. Zmniejsza to operacje we/wy dysku w przepływach z wieloma plikami i zachowuje dotychczasowy kontrakt zwracanego licznika.
Version 3.56.42
Dodano
- Dodano regresyjne testy AES dla przypadków aliasowania bufora wejściowego i wyniku używanych przy przywracaniu zaszyfrowanych streamów podczas zapisu, w tym duże payloady 504 KB, które wcześniej ujawniały problem.
Zmieniono
- Zwykły przepływ API
LoadFromFile,Encrypt,SaveToFile, ponowne wczytanie,DecryptiSaveToFileponownie kończy się poprawnie dla dużych wczytanych PDFów, zachowując optymalizację deszyfrowania AES-CBC z mniejszą liczbą kopii.
Naprawiono
- Naprawiono buforową ścieżkę deszyfrowania AES-256 wprowadzoną w v3.56.41, aby wywołujący mogli przypisać wynik deszyfrowania z powrotem do tego samego
AnsiString, który dostarczył bufor szyfrogramu, bez naruszeń dostępu.
Version 3.56.41
Dodano
- Dodano
TPDFlib.DACopyFiledla przepływów Direct Access, które wymagają liczby stron i niezmienionej kopii pliku bez budowania pełnego normalnego grafu obiektów. - Demo Delphi
HugeFileBenchmarkzawiera teraz wierszdirect-copyoraz filtry--opsi--skipdo ukierunkowanych testów dużych plików.
Zmieniono
- Zoptymalizowano deszyfrowanie AES-256 przez dodanie buforowych ścieżek deszyfrowania AES-CBC i używanie ich podczas deszyfrowania wczytanych łańcuchów oraz streamów, co zmniejsza dodatkowe kopiowanie szyfrogramu w dużych zaszyfrowanych streamach.
Version 3.56.40
Zmieniono
- Dema
HelloWorlddla Delphi i C++Builder tworza teraz bogatszy startowy PDF z informacjami dokumentu, tekstem w wybranej standardowej czcionce, stylizowanym blokiem tytulowym, prostym rysunkiem wektorowym i wskazowkami nastepnych krokow, zachowujac ten sam przeplyw budowania i uruchamiania. - Wszystkie notatki demo Delphi i C++Builder zastapiono przyjaznymi dla przegladarki stronami
Readme.html, wlacznie z dodatkowymi notatkami dotyczacymi hasel, plikow z ograniczeniami i wynikow podpisywania; indeksy demo kieruja teraz uzytkownikow do notatek HTML.
Version 3.56.39
Zmieniono
- Ścieżki zapisu bezpośredniego API plików tworzą teraz tabele wyszukiwania odwołań krzyżowych liniowo, dzięki czemu
DASaveAsFilei powiązane ścieżki zapisu bezpośredniego są znacznie szybsze w PDF-ach z bardzo dużą liczbą obiektów lub gęstymi drzewami stron. - Zoptymalizowany writer zachowuje tę samą semantykę łańcucha wolnych obiektów i unika wielokrotnego skanowania numerów obiektów podczas pełnego generowania xref, usprawniając duże przepływy zapisu bezpośredniego bez zmiany publicznego API ani kontraktu wyjścia.
Version 3.56.38
Zmieniono
- Normalny przepływ pracy API
LoadFromFile,Encrypt,SaveToFile, reload,DecryptiSaveToFilezachowuje teraz stan zaszyfrowania przed jawnymDecrypt, odpowiadając zachowaniu bezpośredniego API plikowego dla dużych starszych plików PDF.
Naprawiono
- Naprawiono normalne wyjście szyfrowania API, tak aby
Encrypttworzyło lub zachowywało trailer/IDprzed zapisaniem danych zabezpieczeń AES-256, dzięki czemu zaszyfrowane pliki PDF pozostają wykrywalne przy ponownym wczytaniu przezEncryptionStatus.
Version 3.56.37
Dodano
- Dodano
TPDFlib.ComparePreflightReports, porównywarkę raportów preflight w zwykłym tekście działającą wiersz po wierszu, która ignoruje zmienne wiersze znaczników czasuGenerated:i zwraca pusty ciąg, gdy stabilna treść raportu jest zgodna. - Demo Delphi
PreflightReportobsługuje teraz--compare <file>w trybie pojedynczego pliku, zapisując raport UTF-8.diff.txti zwracając kod wyjścia 2, gdy wygenerowany raport tekstowy różni się od wartości bazowej.
Version 3.56.36
Dodano
- Demo Delphi
PreflightReportobsługuje teraz wsadowe uruchomienia katalogów z--input-dir,--output-diri--recursive, zapisując po jednym raporcie dla każdego pliku PDF jako<basename>.preflight.<ext>.
Zmieniono
- Tryb wsadowy zapisuje plik UTF-8
preflight-summary.csv, który rejestruje każdy źródłowy PDF, status powodzenia/niepowodzenia, liczbę problemów i ścieżkę wygenerowanego raportu, zachowując istniejący kontrakt kodów wyjścia dla automatyzacji.
Version 3.56.35
Dodano
ReportFormat = 3dodaje wyjście CSV doTPDFlib.CreatePreflightReportExiTPDFlib.SavePreflightReportEx, tworząc wiersze UTF-8 dla metadanych raportu, każdej wybranej kontroli zgodności, poszczególnych kodów i komunikatów problemów oraz końcowego podsumowania.- Demo Delphi
PreflightReportobsługuje teraz--format csvi--csv, dzięki czemu uruchomienia preflight z wiersza poleceń mogą zasilać arkusze kalkulacyjne lub proste parsery CI bez przetwarzania JSON ani wydobywania tekstu.
Version 3.56.34
Dodano
- Dodano świadome formatu API
TPDFlib.CreatePreflightReportExiTPDFlib.SavePreflightReportExdo generowania raportów preflight PDF/A i PDF/UA-1 jako zwykły tekst, JSON lub samodzielny HTML, przy zachowaniu istniejących API raportów wyłącznie tekstowych. - Demo Delphi
PreflightReportobsługuje teraz--format text|json|htmloraz skróty--jsoni--html, dzięki czemu ten sam przepływ pracy z wiersza poleceń może tworzyć raporty czytelne dla człowieka lub artefakty CI czytelne maszynowo.
Version 3.56.33
Dodano
- Dodano
TPDFlib.CreatePreflightReportiTPDFlib.SavePreflightReport, aby aplikacje mogły generować wielokrotnego użytku raporty w zwykłym tekście z wbudowanych kontroli zgodności PDF/A i PDF/UA-1 bez ręcznego wyliczania uchwytów list ciągów.
Zmieniono
- Demo Delphi
PreflightReportwywołuje teraz bezpośrednio API raportów na poziomie biblioteki, utrzymując przykład skupiony na przepływie pracy z wiersza poleceń, wybranych kontrolach, trybie pierwszego problemu i kodach wyjścia przyjaznych automatyzacji.
Version 3.56.32
Dodano
- Dodano nowe konsolowe demo Delphi
PreflightReport, które uruchamia kontrole PDF/A i PDF/UA-1 zCheckFileCompliance, wylicza listy problemów za pomocąGetStringListCountiGetStringListItemoraz zapisuje raport preflight w zwykłym tekście.
Zmieniono
- Demo obsługuje opcje
--input,--output,--pdfa,--pdfua,--bothi--first-issue, a także kody wyjścia dla przyjaznych automatyzacji wyników: powodzenie, znaleziono problem i błąd wykonania.
Version 3.56.31
Zmieniono
GetCustomKeys(2)teraz konsekwentnie ukrywa zarządzane przez bibliotekę wpisy systemowe Catalog, w tym/OutputIntents,/Extensions,/Requirements,/Collectioni/NeedsRendering.
Naprawiono
- Intencje wyjściowe PDF/A tworzone przez
SetPDFAModenie pojawiają się już jako niestandardowe klucze Catalog, oddzielając wyliczanie metadanych aplikacji od struktur zgodności PDF.
Version 3.56.25
Zmieniono
- Strona writer GetPDFUADiagnostics otrzymuje odpowiadający problem
MULTIPLE-H-CHILDREN:N, zachowując parytet z reader10044z v3.56.24. ISO 14289-1 §7.4.4 zabrania więcej niż jednego bezpośredniego dziecka H na węzeł drzewa znaczników — kontrola po stronie writer uruchamia się zawsze, gdy drzewo FStructElems w pamięci zawiera takie naruszenie. - Nowy zagnieżdżony helper CountMultipleHChildren przechodzi drzewo w głąb, zliczając dzieci H na każdym poziomie. Kontrola działa obok istniejących przejść LIST-STRUCT / LIST-NO-NUMBERING i współdzieli ten sam wzorzec przechodzenia FStructElems.
Version 3.56.24
Zmieniono
- Audyt PDF/UA-1 otrzymuje kontrolę unikalności tagów H z ISO 14289-1 §7.4.4.
10044zgłasza każdy węzeł struktury, który zawiera więcej niż jedno bezpośrednie dziecko H — specyfikacja zabrania tego w dokumentach silnie ustrukturyzowanych, a to samo ograniczenie dotyczy każdego węzła drzewa znaczników niezależnie od ogólnego trybu struktury. Pozostały wymóg SHALL z §7.4.4 (dokument musi być albo silnie, albo słabo ustrukturyzowany, nie oba naraz) wymaga heurystyk obejmujących cały dokument i celowo pozostaje poza tym audytem. - Nowy walker drzewa struktur w porządku pre-order (UAVisitStructNodeForHUniqueness / ScanStructTreeForHUniqueness) zlicza bezpośrednie dzieci H dla każdego węzła i rekurencyjnie przechodzi w głąb. Ponownie używa tego samego dekodera kształtu K co istniejące walkery nagłówków / list / notatek.
Version 3.56.23
Dodano
- Nowe
Lib/PDFlibPDFUAFontInspect.pasimplementuje tolerancyjny walker katalogu tabel SFNT i parser katalogu podtabel cmap. Tabela Adobe Glyph List z 4281 nazwami, dodana jako szkielet w poprzednim commicie infrastruktury, jest teraz podłączona przez kontrolę Differences. Programy, których nie da się sparsować jako SFNT (Type 1 PFB / PFA, OpenType collection, dowolne śmieci), są cicho pomijane — na warstwie audytu preferowane są wyniki fałszywie negatywne zamiast fałszywie pozytywnych.
Zmieniono
- Audyt PDF/UA-1 otrzymuje dwie kontrole programów fontów z ISO 14289-1 §7.21.6, które kontrole warstwy słowników z v3.56.10 musiały odłożyć do czasu dostępności parsera TrueType.
10034zgłasza niesymboliczne programy TrueType, których osadzona tabela SFNT cmap zawiera wyłącznie wpis symboliczny (platformID=3, encodingID=0) — pierwszy akapit §7.21.6 wymaga co najmniej jednej niesymbolicznej podtabeli cmap, aby program mógł renderować punkty kodowe zadeklarowane przez swoje /Encoding.10035zgłasza niesymboliczne tablice TrueType/Encoding /Differences, których nazwy glifów nie są elementami Adobe Glyph List (z wyjątkiem.notdef) — trzeci akapit §7.21.6 wymaga, aby każdy wpis Differences trafiał do AGL.
Version 3.56.22
Zmieniono
- Audyt PDF/UA-1 otrzymuje kontrole danych klipów multimedialnych z ISO 14289-1 §7.18.6.
10042zgłasza słowniki danych klipów multimedialnych (identyfikowane przez/S /MCD, opcjonalnie/Type /MediaClip) bez wymaganego wpisu typu zawartości/CT.10043zgłasza te same słowniki bez wymaganej tablicy/Alt. ISO 32000-1 Table 274 wymienia oba klucze jako opcjonalne, ale ISO 14289-1 §7.18.6 podnosi je do wymaganych, aby czytniki ekranu mogły ogłosić znaczący opis osadzonych multimediów. - To jest Phase 6 planu głębokiego audytu PDF/UA (
.superpowers/plans/2026-05-23-pdfua-deep-audit-plan.md). Działa bez zależności od parsera programów fontów ani strumieni zawartości, więc jest pierwszą kolejną podklasą po serii v3.56.0..v3.56.13.
Version 3.56.21
Dodano
- Nowe
SetSignProcessCommitmentTypeemituje podpisany atrybut CAdEScommitment-type-indication(OID 1.2.840.113549.1.9.16.2.16, ETSI EN 319 122-1 v1.2.1 §5.2.3) wewnątrz PAdES-B-B SignerInfo. Akceptuje kody całkowite 1..6 mapowane na dobrze znane OID zobowiązań ETSI odid-cti-ets-proofOfOrigindoid-cti-ets-proofOfCreation; przekaż 0, aby wyczyścić. Kody spoza zakresu są odrzucane. - Nowe
SetSignProcessSignaturePolicyemituje podpisany atrybut CAdESsignature-policy-identifier(OID 1.2.840.113549.1.9.16.2.15, §5.2.9). Przyjmuje OID polityki w notacji dziesiętnej z kropkami, hash dokumentu polityki jako ciąg szesnastkowy wielkimi literami oraz kod algorytmu skrótu (1=SHA-1, 2=SHA-256, 3=SHA-384, 4=SHA-512, 0=auto/SHA-256). Atrybut niesie SEQUENCESignaturePolicyIdzsigPolicyId+sigPolicyHash(SEQUENCEOtherHashAlgAndValue).
Zmieniono
- Oba atrybuty działają tylko wtedy, gdy SubFilter to
ETSI.CAdES.detached(ścieżka PAdES-B-B); rozszerzają istniejącą tablicęrgAuthAttrobokcontent-typeisigning-certificate-v2. PAdES Table 1 row d) zabrania łączeniacommitment-type-indicationz wpisem PDF Signature Dictionary/Reason; wywołujący odpowiada za nieustawianie obu naraz.
Version 3.56.20
Dodano
- Nowe
AddPAdESDSSVRIdołącza wpis podsłownika Signature VRI do składanego DSS, uzupełniając strukturę Validation Related Information z klauzuli 5.4.2.3 ETSI EN 319 142-1 v1.2.1. Wpis jest kluczowany przez SHA-1 wielkimi literami w formacie hex z bajtów/Contentspodpisu'; jego podtabliceCert/CRL/OCSPsą wypełniane przez odwołania do odpowiednich nadrzędnych strumieni DSS przez indeksy 0-based podane jako listy rozdzielane przecinkami (np."0,2,5").
Zmieniono
- Bazowe
TSmartPDFDocument.AddPAdESDSSWithVRIśledzi numery obiektów strumieni emitowanych dla każdego cert / CRL / OCSP i używa ich do zapisu podtablic VRI jako pośrednich odwołań z powrotem do tych samych strumieni, na które wskazują już nadrzędne tablice DSS, spełniając wymaganie specyfikacji, aby wpisy VRI współdzieliły magazyn z nadrzędnym słownikiem DSS. Oryginalny punkt wejściaAddPAdESDSSnadal działa bez zmian dla wywołujących, którzy nie potrzebują VRI. - Każdy podsłownik VRI dla podpisu zawiera opcjonalny znacznik
/Type /VRI, aby narzędzia przechodzące po katalogu według tagówTypemogły rozpoznać strukturę bez ponownego rozwiązywania ścieżki nadrzędnej.
Version 3.56.19
Dodano
- Nowy przepływ pracy PAdES-B-T do dołączania znacznika czasu podpisu RFC 3161 / RFC 5816 (id-aa-signatureTimeStampToken, OID 1.2.840.113549.1.9.16.2.14) do istniejącego podpisu PAdES-B-B.
NewPAdESSignatureTimeStampProcessFromFile/FromStream/FromStringotwierają podpisany PDF,SetPAdESSignatureTimeStampFieldwskazuje nazwę pola,GetPAdESSignatureValueHashHexzwraca hash SHA-256 (lub 384 / 512)signatureValuepodpisującego' do przesłania do TSA,GetPAdESSignatureCMSBytesudostępnia istniejący ładunek CMS,SetPAdESSignatureCMSBytesprzyjmuje rozszerzone bajty CMS składane przez wywołującego za pomocą wybranej biblioteki CMS, aEndPAdESSignatureTimeStampProcessToFile/ToStream/ToStringwstawia nowy CMS do oryginalnego placeholdera/Contents. - Nowe
SetSignProcessReserveContentsBytesposzerza placeholder/Contentsw momencie początkowego podpisywania, aby później rozszerzony CMS zmieścił się bez przepełnienia pierwotnej rezerwacji. Typowe TimeStampTokens wydane przez TSA dodają 2-6 KB do SignerInfo; przekaż tutaj 1024-8192, aby zostawić zapas. Bez wystarczającej rezerwy wywołanie rozszerzające zwraca13(przepełnienie wyjścia).
Zmieniono
BuildPAdESSignatureTimeStampAttributeto bezstanowy helper, który opakowuje wydany przez TSA TimeStampToken w CMS Attribute SEQUENCE oczekiwane przezSignerInfo.unsignedAttrs, więc wywołujący, którzy już mają pod ręką bibliotekę CMS, mogą pominąć warstwę OID + SET-of.- Biblioteka nie dostarcza klienta HTTP TSA; wywołujący pobiera TimeStampToken (zwykle 30-50 wierszy żądania TSP + HTTP POST np. do FreeTSA lub DigiCert). Windows CryptoAPI
CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTRzasadniczo automatyzowałoby wstrzyknięcie CMS w bibliotece, ale zwracaCRYPT_E_INVALID_INDEX(0x80091008) dla odłączonego kształtu SignedData emitowanego przez PAdES, więc zamiast tego używana jest ścieżka bajtów CMS dostarczanych przez wywołującego.
Version 3.56.18
Dodano
- Nowe helpery ASN.1
DER_IntegerFromLittleEndian(obsługuje kolejność bajtów Win32CRYPT_INTEGER_BLOB) iDER_ContextTagExplicit(opakowuje ładunek w skonstruowany znacznik kontekstowy) uzupełniają mikroenkoderPDFlibASN1. Nowe deklaracjeCERT_INFO/CRYPT_ALGORITHM_IDENTIFIER/CRYPT_INTEGER_BLOB/PCERT_CONTEXTwPDFlibCryptoAPIdają ścieżce podpisu dostęp do sparsowanych pól certyfikatu.
Zmieniono
- Atrybut PAdES
signing-certificate-v2osadza teraz opcjonalne poleIssuerSerialzdefiniowane przez RFC 5035 (ESSCertIDv2). Distinguished Name wystawcy certyfikatu podpisującego' jest opakowany w CHOICEGeneralName [4] EXPLICIT directoryNamewewnątrzGeneralNames, po którym następuje numer seryjny certyfikatu jako ASN.1 INTEGER. Bajty numeru seryjnego przychodzą little-endian z Windows CryptoAPI (CRYPT_INTEGER_BLOB) i są odwracane do big-endian z dodanym bajtem dopełnienia liczby dodatniej, gdy ustawiony jest wysoki bit, zgodnie ze sposobem emitowania tego samego pola przez OpenSSL i BouncyCastle. - Weryfikatory, które krzyżowo sprawdzają parę nazwa wystawcy + numer seryjny względem zestawu kandydatów budowania ścieżki (zwłaszcza EU DSS w trybie ścisłym), znajdują teraz oba identyfikatory w atrybucie signing-cert-v2; poprzednie wyjście v3.56.17 dostarczało tylko odwołanie
certHash.
Version 3.56.17
Dodano
- Nowy unit
PDFlibASN1zapewnia wyspecjalizowany mikroenkoder DER (X.690) - prefiks długości, OCTET STRING, SEQUENCE, SET, OBJECT IDENTIFIER - używany do budowania wartości atrybutuSigningCertificateV2. Enkoder przestrzega standardowych zasad łuków OID base-128 i pomija opcjonalne polehashAlgorithm, gdy tylko powtarzałoby domyślne SHA-256, zgodnie z tym, co emitują OpenSSL i BouncyCastle.
Zmieniono
- Wbudowana ścieżka podpisywania
ETSI.CAdES.detachedtworzy teraz strukturalnie zgodne podpisy PAdES-B-B. Biblioteka sama buduje uwierzytelnione atrybuty CMS -content-type(id-data) isigning-certificate-v2z RFC 5035 / RFC 5816 z hashem SHA-256 certyfikatu podpisującego - i przekazuje je doCryptSignMessageprzezrgAuthAttr. Gdy to pole jest inne niż NULL, Windows CryptoAPI przestaje automatycznie wstrzykiwać atrybutsigning-time, którego PAdES (ETSI EN 319 142-1 v1.2.1 Table 1) zabrania, więc wynikoweSignerInfozawiera wymagane atrybuty i tylko je. ApplySignaturekieruje terazETSI.CAdES.detachedprzez ścieżkę surowych bajtów (tę samą, której używaadbe.pkcs7.detached) zamiast podawać wstępnie obliczony skrót. CryptoAPI oblicza teraz uwierzytelniony atrybutmessageDigestna rzeczywistej podpisanej treści, czego oczekują weryfikatory.- SHA-384 i SHA-512 są również respektowane podczas budowania atrybutu signing-certificate-v2: pole
hashAlgorithmjest emitowane z odpowiadającymAlgorithmIdentifier, zamiast polegać na wartości domyślnej. SHA-1 jest w tym kontekście cicho podnoszone do SHA-256, ponieważ PAdES-B-B nie autoryzuje SHA-1 (clause 6.2.1).
Version 3.56.16
Dodano
- Nowe
SetSignProcessDigestAlgorithmwybiera algorytm message-digest podpisu:1= SHA-1 (przestarzały),2= SHA-256 (nowoczesna wartość domyślna),3= SHA-384,4= SHA-512,0= auto (SHA-256 dla każdego SubFilter z wyjątkiem starszej ścieżkiadbe.pkcs7.sha1, która pozostaje przy SHA-1 dla stabilnej bajtowo kompatybilności wstecznej). ETSI EN 319 142-1 v1.2.1 §6.2.1 zabrania MD5 i odsyła do ETSI TS 119 312 dla zalecanych zestawów kryptograficznych, więc podpisujący PAdES powinni wybierać SHA-256 lub mocniejsze. - Dodano helpery hash
SHA256StreamRange,SHA384StreamRangeiSHA512StreamRangeobok istniejącegoSHA1StreamRange; ścieżka podpisu używa ich do obliczenia skrótu PDF ByteRange wybranym algorytmem. OID PKCS#7SignerInfo.digestAlgorithmi rzeczywiste bajty skrótu są teraz gwarantowanie zgodne (poprzedni kod zawsze przekazywał skrót SHA-1 niezależnie od wynegocjowanego algorytmu).
Zmieniono
TPDFlibPFXFile.SignDataprzyjmuje teraz parametrDigestAlgorithmi wybiera poprawny OID dla każdej pary (SubFilter, algorytm):2.16.840.1.101.3.4.2.1/.2/.3dla SHA-256/384/512 na odłączonych i niestandardowych SubFilters (RFC 5754) oraz odpowiadającą rodzinę OIDsha256WithRSAEncryptiondla starszej ścieżkiadbe.pkcs7.sha1.
Version 3.56.15
Dodano
- Nowe
SetSignProcessDocTimeStampprzełącza proces podpisywania w tryb PAdES Document Time-stamp zgodnie z ETSI EN 319 142-1 v1.2.1 §5.4.3. Wynikowy Signature Dictionary zawiera/Type /DocTimeStampi/SubFilter /ETSI.RFC3161, pomija niedozwolone klucze/M,/Reason,/Location,/ContactInfoi/Nameoraz rezerwuje 8192-bajtowy (lub o rozmiarze podanym przez wywołującego) placeholder hex w/Contentsna zewnętrznie pobrany RFC 3161 TimeStampToken.
Zmieniono
- Tryb passthrough jest włączany automatycznie po wybraniu trybu DocTimeStamp, ponieważ TimeStampToken pochodzi z zewnętrznego TSA. Wywołania
SetSignProcessInfowykonane po przełączeniu na tryb DocTimeStamp są po cichu ignorowane, aby słownik podpisu pozostał zgodny ze specyfikacją. - Istniejące automatyczne wstrzykiwanie PAdES
/Extensions /ESICdodane w v3.56.8 obejmuje już DocTimeStamp, ponieważ jego SubFilter zaczyna się odETSI., więc PDF ze znacznikiem czasu dokumentu deklaruje wymagane rozszerzenie katalogu bez dodatkowego okablowania.
Version 3.56.14
Dodano
- Nowe API augmentacji PAdES Document Security Store (DSS).
NewPAdESDSSProcessFromFile/NewPAdESDSSProcessFromStream/NewPAdESDSSProcessFromStringotwierają wcześniej podpisany PDF,AddPAdESDSSCertificate/AddPAdESDSSCRL/AddPAdESDSSOCSPprzygotowują zakodowany DER materiał walidacyjny, aEndPAdESDSSProcessToFile/EndPAdESDSSProcessToStream/EndPAdESDSSProcessToStringzapisują aktualizację przyrostową zawierającą słownik/DSS << /Type /DSS /Certs [...] /CRLs [...] /OCSPs [...] >>zgodnie z ETSI EN 319 142-1 v1.2.1 §5.4.2.2. To element bazowy do promowania podpisu PAdES-B-B / B-T do długoterminowej walidacji PAdES-B-LT.
Zmieniono
- Proces DSS automatycznie podnosi wpis katalogu
/Extensions /ESICdo co najmniejExtensionLevel 1podczas dodawania materiału walidacyjnego, zgodnie z wymaganiem w §5.6, oraz scala nowe certyfikaty, CRL i odpowiedzi OCSP z istniejącymi tablicami/Certs//CRLs//OCSPsprzy powtarzanych wywołaniach, tak aby rewizje narastały zamiast się nadpisywać. GetPAdESDSSProcessResult/ReleasePAdESDSSProcessdomykają cykl życia, odzwierciedlając istniejącą powierzchnię APISignProcess.
Version 3.56.8
Zmieniono
- Zgodność bazowa PAdES: gdy podpis jest tworzony z PAdES SubFilter (
ETSI.CAdES.detachedlubETSI.RFC3161), katalog dokumentu otrzymuje teraz automatycznie wpis/Extensions /ESIC <</BaseVersion /1.7 /ExtensionLevel 2>>wymagany przez ETSI EN 319 142-1 v1.2.1 §5.6. Wpis jest dodawany przez tę samą aktualizację przyrostową, która przenosi podpis, nigdy nie obniża istniejącego wyższego/ExtensionLeveli podąża za pośrednimi referencjami/Extensionslub/ESIC, gdy źródłowy PDF przechowuje je już jako osobne obiekty. - Znacznik rozszerzenia równoważny Adobe zapisywany przez SetSignProcessCustomSubFilter dla plików PDF tworzonych przez
TPDFlibto teraz/ADBE /BaseVersion /1.7 /ExtensionLevel 8(wcześniejExtensionLevel 5), zgodnie z alternatywną deklaracją, której mogą używać podpisy bazowe PAdES; poziom 5 obejmował tylko formularze ISO 32000-2 / 3D / funkcje RichMedia i faktycznie nie identyfikował rozszerzeń PAdES.
Version 3.56.13
Zmieniono
- Gdy SetPDFUAMode jest aktywny i dokument jest zapisywany, każdy element struktury L (lista), który nie ma jawnego atrybutu
ListNumbering, otrzymuje teraz automatycznie/O = List /ListNumbering = None. ISO 14289-1 §7.6 wymaga, aby każdy tag L deklarował swój styl numerowania; nowa korektaApplyPDFUAListNumberingwykonywana podczas zapisu dołącza do istniejącej rodzinyApplyPDFUATabOrder/ApplyPDFUAFormFieldTU/ApplyPDFUAAnnotContents/ApplyPDFUAEmbeddedAFRelationship/ApplyPDFUAStripTrapNet. - Autorzy, którym zależy na konkretnym stylu listy, nadal powinni wywołać SetStructElemListNumbering przed EndTag; automatyczna korekta uruchamia się tylko wtedy, gdy w czasie zapisu nie ma atrybutu ListNumbering, więc jawne wartości są zachowywane.
- Komunikat diagnostyczny po stronie zapisu
LIST-NO-NUMBERING:Ninformuje teraz, że automatyczna korekta zamaskuje problem w czasie zapisu, dzięki czemu użytkownicy rozumieją zarówno brakujący atrybut, jak i automatyczne zachowanie naprawcze.
Version 3.56.12
Zmieniono
- Audyt PDF/UA-1 zyskuje trzy nowe kontrole ISO 14289-1.
10031zgłasza adnotacje Link, których słownik akcji URI zawiera/IsMap = true(zabronione przez §7.18.5, chyba że równoważna funkcjonalność jest zapewniona gdzie indziej w treści; autorzy z uzasadnionym przypadkiem użycia IsMap mogą samodzielnie wyciszyć tę diagnostykę).10032zgłasza elementy strukturyNotebez wpisu/ID— §7.9 wymaga, aby każdy tag Note deklarował unikalny ID.10033zgłasza liczby zduplikowanych par, gdy dwa lub więcej tagów Note ma tę samą wartość/ID. - Wykrywanie kolizji ID Note odbywa się przez zebranie ID w posortowanym TStringList i przejście po sąsiednich parach, więc grupa trzech Notes współdzielących jeden ID liczy się jako dwie zduplikowane pary.
- Sprawdzanie akcji URI przechodzi po tablicy
/Annotskażdej strony', filtruje według/Subtype /Link, a następnie sprawdza/A /S /URIi wartość boolowską/IsMap. Referencje pośrednie są dereferencjonowane na każdym kroku, więc wydzielone słowniki akcji zachowują się tak samo jak osadzone bezpośrednio.
Version 3.56.11
Zmieniono
- ISO 14289-1 §7.6 wymaga, aby każdy element struktury L (lista) miał jawny atrybut
ListNumbering.10030(po stronie odczytu) iLIST-NO-NUMBERING:N(po stronie zapisu) zgłaszają tagi L, które go pomijają. Walker po stronie odczytu dekoduje oba kształty/A(pojedynczy słownik atrybutów albo tablicę słowników wymieszanych z liczbami rewizji) i szuka klucza/ListNumberingniezależnie od właściciela. Kontrola po stronie zapisu sprawdzaTPDFStructElem.Attributespod kątem tej samej nazwy zarówno w sfinalizowanej liście struktur, jak i w wciąż otwartym stosie tagów. - Poprawne wartości
ListNumberingwedług ISO 32000-1 Table 347 toNone,Disc,Circle,Square,Decimal,UpperRoman,LowerRoman,UpperAlpha,LowerAlpha. Audyt sprawdza tylko obecność klucza, a nie wybraną wartość — każdy tag L potrzebuje jednej z nich.
Version 3.56.10
Zmieniono
- Audyt PDF/UA-1 zyskuje reguły kodowania TrueType z ISO 14289-1 §7.21.6.
10028zgłasza niesymboliczne fonty TrueType, których/Encoding(lub/BaseEncodingwewnątrz słownika Encoding) nie jest aniMacRomanEncoding, aniWinAnsiEncoding.10029zgłasza symboliczne fonty TrueType, które w ogóle zawierają wpis/Encoding(zabronione przez czwarty akapit §7.21.6). - Rozróżnienie symboliczny vs. niesymboliczny jest ustalane na podstawie bitu 3 FontDescriptor
/Flags(maska4), z ponownym użyciem istniejącego pomocnikaUAFontDescriptorSymbolicz podklasy 4. Pełny pierwszy akapit §7.21.6 (osadzony program TrueType musi zawierać pasujące wpisy cmap) wymaga parsowania programu fontu TrueType i nadal oczekuje; powyższe reguły na poziomie słownika są praktyczną warstwą, którą ten audyt może zweryfikować bez parsera TrueType. - Reguły tablicy Differences w §7.21.6 (nazwy glifów wyłącznie AGL, obecność Microsoft Unicode cmap) pozostają poza zakresem z tego samego powodu — wymagają inspekcji programu fontu.
Version 3.56.9
Zmieniono
- Audyt PDF/UA-1 zyskuje pełną kontrolę ISO 14289-1 §7.18.4.
10027zgłasza adnotacje Widget, których/StructParentprzechodzi przez/ParentTreedrzewa struktury', ale nie trafia na element struktury z/S = Form. Poprzednia częściowa kontrola v3.56.7 (10026) wychwytywała tylko Widgets, które całkowicie nie mają/StructParent; nowa kontrola domyka regułę, podążając za wskaźnikiem drzewa liczb i weryfikując tag docelowy. - Nowy pomocnik
NumberTreeLookupimplementuje kształt drzewa liczb ISO 32000-1 §7.9.7 (płaski korzeń/Nums, pośrednie/Kidszakresowane przez/Limits). Przyszłe audyty, które muszą rozwiązywać wpisy stron/StructParentslub etykiety/PageLabels, mogą go użyć ponownie. - Weryfikacja tagu Form dla adnotacji Widget używa modelu dwupoziomowego: Widget bez
/StructParentjest zgłaszany jako10026; Widget, którego/StructParentistnieje, ale nie rozwiązuje się do/S = Form, jest zgłaszany jako bardziej szczegółowe10027. Zapobiega to podwójnemu liczeniu tego samego naruszenia pod oboma kodami.
Version 3.56.7
Zmieniono
- Gdy SetPDFUAMode jest aktywny i dokument jest zapisywany, wszystkie wpisy adnotacji
TrapNetsą teraz automatycznie usuwane z tablicy/Annotskażdej strony'. ISO 14289-1 §7.18.2 zabrania adnotacjiTrapNet; nowa korektaApplyPDFUAStripTrapNetwykonywana podczas zapisu dołącza do istniejącej rodzinyApplyPDFUATabOrder/ApplyPDFUAFormFieldTU/ApplyPDFUAAnnotContents/ApplyPDFUAEmbeddedAFRelationship, dzięki czemu dokumenty w trybie PDF/UA przestają po cichu emitować pozostałościTrapNet. - Audyt PDF/UA-1 zyskuje częściową kontrolę §7.18.4.
10026zgłasza adnotacje Widget bez/StructParent— Widget bez/StructParentnie może zostać osiągnięty z drzewa struktury i dlatego nie może być zagnieżdżony w tagu strukturyForm. Pełna weryfikacja strukturalna (rozwiązanie/StructParentprzezParentTreei potwierdzenie, że nadrzędny/StoForm) pozostaje na kolejne wydanie. - Po stronie zapisu GetPDFUADiagnostics zyskuje odpowiadający problem
WIDGET-NO-STRUCTPARENT:N. Istniejący komunikat TRAPNET-ANNOT informuje teraz również, że SetPDFUAMode automatycznie usuwa je podczas zapisu.
Version 3.56.6
Zmieniono
- Audyt PDF/UA-1 zyskuje dwie kontrole hierarchii nagłówków ISO 14289-1 §7.4.2.
10024zgłasza sytuację, gdy pierwszy element nagłówka w kolejności dokumentu nie jest H1 (lub H).10025zgłasza liczbę przeskoków poziomu nagłówków w sekwencji malejącej (np. H1, po którym następuje H3 bez H2). Obie kontrole współdzielą pojedyncze przejście pre-order po drzewie struktury, które dekoduje zagnieżdżone kształty/K(pojedynczy StructElem, tablica StructElems / IndRefs / MCRs). - Po stronie zapisu GetPDFUADiagnostics zyskuje odpowiadający problem
FIRST-HEADING-NOT-H1, zachowując parytet z czytnikiem10024. Wcześniej istniejąca kontrola zapisu HEADING-LEVEL-SKIP ma teraz kontrolę towarzyszącą, która wychwytuje także problemy w stylu "pierwszy nagłówek był H2".
Version 3.56.5
Zmieniono
- Gdy SetPDFUAMode jest aktywny, a dokument zostaje później zaszyfrowany, klucz uprawnień szyfrowania (
/Pw słowniku encrypt) ma teraz automatycznie ustawiany bit 10 (maska$200, "Extract text and graphics in support of accessibility"), nawet jeśli wywołujący nie uwzględniłppCanCopyAccesswTPDFExtraPermissionsprzekazanym do Encrypt. ISO 14289-1 §7.16 wymaga, aby każdy zaszyfrowany zgodny plik pozwalał na ekstrakcję dla dostępności, a ten bit łatwo przeoczyć. Ustawienie tego bitu jest zawsze bezpieczne — przyznaje tylko dodatkowy dostęp technologiom wspomagającym, nie innym ścieżkom ekstrakcji. - Po stronie zapisu GetPDFUADiagnostics zyskuje nowy problem
ENCRYPT-NO-ACCESS, który uruchamia się, gdy PDFUAMode jest włączony, a bit 10/Psłownika encrypt' jest wyczyszczony. Wychwytuje to przypadek brzegowy kolejności wywołań, w którym użytkownik najpierw wywołałEncrypt(), a dopiero potem SetPDFUAMode — diagnostyka każe użytkownikowi ponownie wywołaćEncrypt(), aby słownik encrypt został wyemitowany z poprawionym/P.
Version 3.56.4
Zmieniono
- Po stronie zapisu GetPDFUADiagnostics zyskuje pięć nowych kontroli ISO 14289-1, aby audyt dokumentu w pamięci wychwytywał te same naruszenia co audyt po stronie odczytu CheckFileCompliance ComplianceTest=2.
SUSPECTS-TRUEoznacza MarkInfo/Suspects=true (§7.1: pliki zgodne z PDF/UA wymagają Suspects=false).ROLEMAP-STANDARD-REMAP:Noznacza wywołania AddRoleMap, które przemapowałyby standardowy tag struktury — §7.1 zabrania przemapowywania standardowych tagów.DC-TITLE-MISSINGoznacza pusty XMP dc:title (oddzielnie od DOCINFO-TITLE-MISSING, który sprawdza /Info /Title).TRAPNET-ANNOT:Noznacza adnotacje TrapNet (§7.18.2 ich zabrania).ANNOT-PAGE-NO-TABS-S:Noznacza strony zawierające adnotacje, których /Tabs słownika strony nie jest /S (§7.18.3 wymaga na tych stronach kolejności tabulacji według drzewa struktury). - Audyty PDF/UA-1 po stronie zapisu i odczytu są teraz w przybliżeniu w parytecie: każdy problem zgłaszany przez audyt po stronie odczytu na zapisanym pliku jest także osiągalny z diagnostyki w pamięci, z uwzględnieniem konwencji formatu każdej funkcji (tekst rozdzielany nowymi liniami vs. lista ciągów z kodami NNNNN).
Version 3.56.3
Zmieniono
- Audyt PDF/UA-1 zyskuje kontrole fontów §7.21.
10020zgłasza każdy font spoza Standard-14, którego FontDescriptor nie maFontFile/FontFile2/FontFile3(§7.21.4.1: każdy renderowany font musi osadzać swój program).10021zgłasza potomków CIDFontType2 bez wpisu/CIDToGIDMap(§7.21.3.2).10022wskazuje fonty Standard 14 (Helvetica, Times, Courier, Symbol, ZapfDingbats oraz warianty bold / oblique), do których odwołano się bez osadzonego programu — §7.21.4 NOTE 5 jasno mówi, że nie ma zwolnienia z osadzania dla tych fontów.10023zgłasza fonty bez CMap/ToUnicode, które nie pasują do listy zwolnień §7.21.7 (predefiniowane kodowania MacRoman / MacExpert / WinAnsi, Type 0 z kolekcjami znaków Adobe-GB1 / CNS1 / Japan1 / Korea1, niesymboliczne TrueType). - Złożone fonty Type 0 są sprawdzane na obu warstwach:
/ToUnicodew samym słowniku nadrzędnym Type 0 oraz osadzanie //CIDToGIDMapw pierwszym potomku CIDFont. Fonty Type 3 pomijają kontrolę osadzania (ich glify są osadzone jako CharProcs), ale nadal uczestniczą w kontroli/ToUnicode. - Pomocniki PDFlibPDFA do podobnej pracy z fontami celowo nie zostały współdzielone — pół tuzina krótkich procedur (usuwanie prefiksu podzbioru, tabela nazw Standard-14, obecność FontFile, flaga Symbolic) zduplikowano lokalnie jako pomocniki
UA*, aby audyt PDF/A mógł dalej ewoluować bez psucia PDF/UA i odwrotnie.
Version 3.56.2
Zmieniono
- Audyt PDF/UA-1 zyskuje pięć kolejnych kontroli ISO 14289-1 obejmujących adnotacje, osadzone pliki i zawartość opcjonalną.
10015zgłasza adnotacje Link bez niepustego opisu alternatywnego/Contents(§7.18.5), aby czytniki ekranu mogły ogłaszać cele linków.10016i10017oznaczają słowniki FileSpec osadzonych plików, w których brakuje wymaganych kluczy nazwy pliku/Flub/UF(§7.11).10018oznacza słowniki konfiguracji zawartości opcjonalnej, które pomijają niepusty ciąg tekstowy/Name(§7.10).10019oznacza słowniki konfiguracji zawartości opcjonalnej, które zawierają zabroniony klucz/AS(§7.10). - Przejście po adnotacjach na stronę, które już obsługiwało kontrole TrapNet i
/Tabs /S, teraz w tym samym przebiegu zbiera także dane Link //Contents, utrzymując audyt na poziomie O(N) względem liczby obiektów.
Version 3.56.1
Zmieniono
- Audyt PDF/UA-1 zyskuje pięć nowych kontroli ISO 14289-1.
10010weryfikuje uprawnienie ekstrakcji dla dostępności (bit 10 klucza szyfrowania/P) w zaszyfrowanych plikach (§7.16).10011wykrywa dynamiczne formularze XFA przez element<dynamicRender>required</dynamicRender>wewnątrz pakietu XFA XDP (§7.15).10012oznacza Form XObjects, które zawierają wpis/Ref— referencyjne XObjects są zabronione (§7.20).10013oznacza adnotacjeTrapNet(§7.18.2).10014przechodzi po każdej stronie i zgłasza każdą stronę zawierającą adnotacje, której słownik strony nie ustawia/Tabs /S(§7.18.3), tak aby kolejność tabulacji podążała za drzewem struktury. - Wszystkie pięć nowych kodów przepływa przez tę samą parę uchwytów CheckFileCompliance + GetStringListItem, którą dodało poprzednie wydanie — nie ma nowej publicznej powierzchni API.
Version 3.56.0
Dodano
- Nowy audyt po stronie odczytu
CheckCompliancePDFUAwaliduje zewnętrzny PDF względem ISO 14289-1 (PDF/UA-1). Uzupełnia istniejącą kontrolę po stronie zapisu GetPDFUADiagnostics, akceptując dowolny wejściowy PDF (własny output, output skanera, treści zewnętrzne) i wypisując naruszenia PDF/UA-1 tak samo, jak CheckFileCompliance już zgłasza problemy PDF/A.
Zmieniono
- CheckFileCompliance akceptuje teraz
ComplianceTest = 2, aby uruchomić nowy audyt PDF/UA-1. Test PDF/A podComplianceTest = 1pozostaje bez zmian, a lista problemów nadal wraca przez istniejącą parę uchwytów GetStringListCount / GetStringListItem. - Pierwsza wersja obejmuje podstawowe bramki zgodności PDF/UA-1 z §5 (identyfikacja XMP
pdfuaid:part) i §7.1 (strumień katalogu/Metadata, znacznik tagged-PDF, drzewo struktury, preferencja tytułu przeglądarki, język dokumentu, XMPdc:title, wartość/Suspectsoraz zakaz przemapowywania standardowych tagów struktury). Emitowanych jest osiem kodów diagnostycznych — od10001do10009— dzięki czemu zakres liczbowy jest wizualnie oddzielony od kodów PDF/A00xxx. - Głębsze klauzule PDF/UA-1 (zabezpieczenia, adnotacje, XObjects, podzbiory fontów) są śledzone dla kolejnych wydań poprawek na bazie tego samego frameworka audytu.
Version 3.55.6
Zmieniono
- Każdy świeżo wygenerowany pakiet XMP zawiera teraz właściwość xmpMM:InstanceID w formacie uuid:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX. Identyfikator jest generowany przez Win32 CoCreateGuid i nadaje każdemu utworzonemu dokumentowi unikalny, niezależny od wersji odcisk zgodnie z zaleceniami ISO 19005-1 §6.7.2 (Cor2) oraz przewodników najlepszych praktyk PDF/A. Kompilacje inne niż Windows (gdzie pakiet XMP pozostaje pusty) pozostają bez zmian.
- Przestrzeń nazw xmpMM (http://ns.adobe.com/xap/1.0/mm/) jest teraz częścią SelectionNamespaces pakietu XMP; nowe pomocniki SetXMPMM i GenerateInstanceID stanowią podstawę emisji InstanceID oraz fundament dla przyszłej obsługi xmpMM:History / xmpMM:DerivedFrom.
- Schemat opisu PDF/A Extension Schema (pdfaExtension / pdfaSchema / pdfaProperty / pdfaType / pdfaField) nie jest dodawany w tym wydaniu. Tworzenie niestandardowego schematu rozszerzeń wymaga wieloetapowej konstrukcji bag / seq / właściwości strukturalnych wykraczającej poza obecny kształt SetDublinCore / SetXMPBasic; prace są śledzone dla przyszłego wydania. Dokumenty, które muszą deklarować niestandardowe właściwości XMP, nadal korzystają ze ścieżki LoadFromString.
Version 3.55.5
Zmieniono
- Dokumenty PDF/A mają teraz flagi adnotacji /F normalizowane podczas zapisu. ISO 19005-1 §6.5.3 wymaga, aby bit Print miał wartość 1, a bity Hidden / Invisible / NoView miały wartość 0 dla każdej adnotacji; writer stosuje teraz tę maskę podczas zapisu, więc wywołujący nie muszą pamiętać układu bitów. Przypadek /Subtype /Popup jest zwolniony — popupy są dziećmi innych adnotacji i tradycyjnie nie są drukowane.
- Flaga AcroForm /NeedAppearances jest teraz wymuszanie ustawiana na false podczas zapisu, gdy dokument jest w dowolnym trybie PDF/A. ISO 19005-1 §6.9 wymaga, aby flaga była nieobecna albo miała wartość false; wcześniej writer pozostawiał dowolną wartość ustawioną przez wywołującego, co tworzyło dokumenty proszące przeglądarkę o ponowne wygenerowanie appearance przy otwarciu i po cichu naruszało specyfikację, gdy wywołujący ustawił ją na true. Poprawka działa również dla dokumentów, w których flaga była wcześniej nieobecna — writer emituje jawne /NeedAppearances false, aby nie pozostawić walidatorowi żadnej niejednoznaczności.
Version 3.55.4
Zmieniono
- AddStandardFont odrzuca teraz wywołania w trybie PDF/A. ISO 19005-1 §6.3.4 unieważnia wyjątek z referencji PDF mówiący, że „Standard 14 may be unembedded”: każdy program fontu w zgodnym pliku musi być osadzony, a biblioteka nie dostarcza konturów Standard 14. Fasada zwraca po cichu 0; wywołujący powinni przejść na AddTrueTypeFont lub AddType1Font z rzeczywistym plikiem fontu.
- AddTrueTypeFont teraz po cichu promuje Embed=0 (bez osadzania) do Embed=1 (osadź pełny font), gdy aktywny jest tryb PDF/A. Ścieżka odwołania bez osadzonego fontu tworzyła PDF zależny od mechanizmu zastępowania fontów w przeglądarce przez systemową instalację Arial / Times / Courier, co narusza ISO 19005-1 §6.3.4. Istniejący wywołujący, którzy prosili o osadzanie (Embed=1 lub 2), pozostają bez zmian.
- Kontrola zgodności /Encoding dla niesymbolicznego TrueType (ISO 19005-1 §6.3.7 Cor2 wymaga WinAnsi lub MacRoman jako nazwy kodowania albo BaseEncoding, bez /Differences) nie została dodana w tym wydaniu, ponieważ biblioteka już emituje /WinAnsiEncoding dla niesymbolicznych podzbiorów TrueType, a głębsze egzekwowanie wymagałoby śledzenia rozdziału symbolic-vs-non-symbolic przez ścieżkę podzbioru. CheckCompliancePDFA 00034 / 00035 (dodane w v3.51.0) oznaczają wszelkie niezgodne wyjście podczas walidacji.
Version 3.55.3
Zmieniono
- Słowniki fontów TrueType-backed CIDFontType2 zawierają teraz jawnie /CIDToGIDMap /Identity. ISO 19005-1 §6.3.3.2 (Cor2) wymaga obecności tego wpisu dla każdego osadzonego Type 2 CIDFont; referencja PDF dopuszcza domyślne niejawne Identity, ale PDF/A wymaga jawnej wartości. Writer wcześniej całkowicie pomijał ten klucz, przez co veraPDF (oraz CheckCompliancePDFA 00033 dodane w v3.51.0) oznaczały plik. Nazwa /Identity odpowiada układowi GID-as-CID, który writer już wcześniej tworzył niejawnie, więc istniejące dokumenty renderują się identycznie.
- FontDescriptor /CharSet (dla podzbiorów Type 1) i /CIDSet (dla podzbiorów CIDFont) pozostają TODO; writer musiałby śledzić, które nazwy glifów / CIDs trafiły do podzbioru, aby poprawnie je wypełnić. CheckCompliancePDFA 00031 i 00032 (również dodane w v3.51.0) oznaczą brak, aby użytkownicy zobaczyli problem podczas walidacji.
Version 3.55.2
Zmieniono
- AddImageDirectFromString odrzuca teraz filtry niezgodne z PDF/A już w punkcie wejścia. Przekazanie Filter = 'LZWDecode' jest odrzucane dla każdej części PDF/A (ISO 19005-1 §6.1.10 oraz równoważne reguły ISO 19005-2 / -3). Przekazanie Filter = 'JBIG2Decode' lub 'JPXDecode' jest odrzucane dla PDF/A-1 (tryby 1 i 2). PDF/A-2 i PDF/A-3 dopuszczają JPXDecode zgodnie z ISO 19005-2 §6.2.8.3 z ograniczeniami podspecyfikacji (liczba kanałów koloru, jednolitość głębi bitowej, wymagania METH/APPROX), których bramka po stronie writera nie egzekwuje — wywołujący w tych trybach nadal muszą zapewnić zgodność strumienia JPEG 2000. Fasada zwraca po cichu 0, gdy żądany jest zabroniony filtr.
- Dane wejściowe TIFF, PNG, JPEG i JPEG 2000 ładowane przez AddImageFromFile / AddImageFromStream pozostają bez zmian: importer dekompresuje bajty źródłowe i ponownie koduje je z FlateDecode (lub DCTDecode dla ładunków JPEG), więc wejściowe LZW nigdy nie propaguje do łańcucha Filter w wyjściu. Walidator CheckCompliancePDFA dodany w v3.50.0 (00004) i v3.52.0 (00022, 00023) zapewnia drugą linię obrony podczas walidacji dla każdej pośredniej ścieżki, która nadal przepuści zabroniony filtr do wyjścia.
Version 3.55.1
Zmieniono
- AddLinkToHideField odrzuca teraz wywołania w trybie PDF/A. Poprzednie wydanie pozostawiło komentarz twierdzący, że akcja była zgodna z PDF/A, ale ISO 19005-1 Cor2 dodało /Hide do listy zabronionych akcji (§6.6.1), a ISO 19005-2 / -3 dziedziczą to ograniczenie. Fasada zwraca po cichu 0 przy wywołaniu w trybie PDF/A, tak jak AddLinkToJavaScript i AddLinkToImportData.
- AddSWFAnnotationFromFile odrzuca teraz wywołania w trybie PDF/A. Adnotacje SWF / RichMedia opakowują media Flash, które są zabronione przez ISO 19005-1 §6.5.2 (brak podtypów Movie / Sound) i wzmocnione przez ISO 19005-2 §6.3.1 (brak 3D / Sound / Screen / Movie). Fasada zwraca po cichu 0.
- AddEmbeddedFile i AddLinkToEmbeddedFile odrzucają teraz wywołania w trybach PDF/A-1 i PDF/A-2. ISO 19005-1 §6.1.11 zabrania /EF, a ISO 19005-2 §6.8 dopuszcza tylko osadzone pliki PDF/A; zamiast weryfikować rekurencyjną zgodność PDF/A dołączonego ładunku, writer po prostu odmawia wywołania w tych trybach. PDF/A-3 (SetPDFAMode 5 lub 6) pozostaje dozwolone — zobacz v3.55.0 dla automatycznego wstrzykiwania /AFRelationship.
- SetOpenActionMenu odrzuca teraz wartości MenuItem spoza białej listy {NextPage, PrevPage, FirstPage, LastPage}, gdy dokument jest w trybie PDF/A. ISO 19005-1 §6.6.1 ogranicza named actions do tego zestawu, więc wcześniej API po cichu tworzyło niezgodne słowniki Open-Action Find / Print / FullScreen, które veraPDF odrzucał.
- NewOptionalContentGroup odrzuca teraz wywołania w trybach PDF/A-1 (SetPDFAMode 1 lub 2). ISO 19005-1 §6.1.13 zabrania klucza Catalog /OCProperties. PDF/A-2 (tryby 3/4) i PDF/A-3 (tryby 5/6) dopuszczają optional content z ograniczeniami w odpowiednich §6.9, więc bramka uruchamia się tylko dla PDF/A-1.
Version 3.55.0
Zmieniono
- Dokumenty PDF/A-3 otrzymują teraz automatycznie wpis /AFRelationship przy każdym osadzonym pliku. Wcześniej plik PDF/A-3 utworzony biblioteką mógł nie przejść walidacji, ponieważ ISO 19005-3 Annex E, Table E.1 wymaga AFRelationship przy każdej specyfikacji pliku osadzonego. Writer wstrzykuje teraz skonfigurowaną wartość domyślną ('Unspecified' domyślnie) do każdego słownika FileSpec, który nie ma tego wpisu podczas zapisu, odzwierciedlając wcześniejsze automatyczne wstrzykiwanie PDF/UA AFRelationship. Automatyczne wstrzykiwanie uruchamiają tylko tryby PDF/A-3 (SetPDFAMode 5 = PDF/A-3b lub 6 = PDF/A-3a); PDF/A-1 i PDF/A-2 nadal całkowicie odrzucają pliki osadzone zgodnie z ISO 19005-1 §6.1.11 i ISO 19005-2 §6.8.
- SetPDFA3DefaultAFRelationship to nowe API, które nadpisuje wartość domyślną zapisywaną przez writera, gdy plik osadzony nie ma wpisu /AFRelationship. Akceptuje wartości ISO 19005-3 Table E.1: 'Source' (plik osadzony jest materiałem źródłowym, z którego powstała zawartość PDF), 'Data' (plik jest danymi strukturalnymi stojącymi za wizualną tabelą lub wykresem), 'Alternative' (alternatywne przedstawienie, takie jak wersja audio), 'Supplement' (uzupełniająca reprezentacja, taka jak forma MathML równania), 'Unspecified' (relacji nie da się scharakteryzować powyższymi wartościami) lub dowolną zarejestrowaną nazwę drugiej klasy. Pusty string resetuje do 'Unspecified'. Nadpisania per-file pozostają dostępne przez SetEmbeddedFileAFRelationship.
- Nowe API są udostępnione w fasadzie Delphi jako TPDFlib.SetPDFA3DefaultAFRelationship oraz przez DLL jako DLSetPDFA3DefaultAFRelationship (PWideChar) i DLSetPDFA3DefaultAFRelationshipA (PAnsiChar).
Version 3.54.0
Zmieniono
- LoadOutputIntentProfile to nowe API, które zastępuje dołączony profil sRGB OutputIntent zewnętrznym profilem ICC załadowanym z dysku. Jest wymagane przy tworzeniu dokumentów PDF/A w przestrzeniach kolorów DeviceCMYK lub DeviceGray, ponieważ biblioteka dostarcza tylko profil sRGB. Typowe użycie polega na wywołaniu najpierw SetPDFAMode (co inicjalizuje szkielet OutputIntent), a następnie LoadOutputIntentProfile('C:\\path\\to\\FOGRA39.icc', 'DeviceCMYK'), aby podmienić bajty profilu i oznaczyć dokument nową przestrzenią kolorów. Zwraca 1 przy powodzeniu, 0 przy braku pliku lub nieznanej przestrzeni kolorów. Udostępnione w fasadzie Delphi jako TPDFlib.LoadOutputIntentProfile oraz przez DLL jako DLLoadOutputIntentProfile (forma PWideChar) i DLLoadOutputIntentProfileA (forma PAnsiChar). ISO 19005-1 §6.2.2 dopuszcza dowolny zarejestrowany profil ICC w strumieniu DestOutputProfile.
- SetFillColorCMYK, SetTextColorCMYK, SetTextHighlightColorCMYK, SetTextUnderlineColorCMYK, AddSeparationColor, SetFillColorSep, SetLineColorSep, SetTextHighlightColorSep i SetTextColorSep teraz działają w trybie PDF/A, gdy profil OutputIntent dokumentu to DeviceCMYK. Wcześniej te API odrzucały każde wywołanie w trybie PDF/A niezależnie od OutputIntent, co uniemożliwiało tworzenie zgodnych dokumentów CMYK. Bramka ma teraz postać PDFAMode = 0 OR OutputIntentColorSpace = 'DeviceCMYK', zgodnie z regułą ISO 19005-1 §6.2.3.3, że DeviceCMYK jest dozwolone, gdy OutputIntent używa profilu CMYK, oraz ISO 19005-1 §6.2.3.4, które dopuszcza alternatywy Separation, których bazowa przestrzeń kolorów również jest zgodna.
- SetTextShader teraz działa w trybie PDF/A, gdy profil OutputIntent to DeviceRGB albo DeviceCMYK. Same shadery nie są zakazane przez PDF/A; walidator (po stronie odczytu) sprawdza, czy wewnętrzna przestrzeń kolorów shadera pasuje do OutputIntent. Poprzednie zachowanie ścisłego odrzucania blokowało zgodne użycie shaderów.
- Odblokowanie CMYK / Separation / Shader zależy od tagu OutputIntentColorSpace ustawionego przez AddOutputIntent i LoadOutputIntentProfile (wprowadzone w v3.53.0). Wywołanie SetPDFAMode bez LoadOutputIntentProfile zachowuje przestrzeń kolorów jako DeviceRGB (dołączony profil sRGB), więc wywołania CMYK nadal są domyślnie odrzucane — nowe zachowanie jest opcjonalne przez LoadOutputIntentProfile.
Version 3.53.0
Zmieniono
- Słownik OutputIntent zawiera teraz pełne pola szkieletu PDF/A zalecane przez ISO 19005-1 §6.2.2 i Adobe Acrobat preflight: /OutputCondition (czytelny dla człowieka opis warunku koloru), /Info (dłuższy tekst identyfikacyjny) oraz /RegistryName (URL rejestru, domyślnie http://www.color.org). Wartości domyślne to "sRGB IEC61966-2.1" / "sRGB IEC61966-2.1" / "http://www.color.org" dla starszych miejsc wywołania z jednym argumentem; nowe przeciążenie AddOutputIntent przyjmuje bezpośrednio cztery niestandardowe pola, aby wywołujący mogli wypełnić je dla własnych warunków koloru.
- AddOutputIntent zyskuje nowe przeciążenie z pięcioma argumentami: AddOutputIntent(ColorSpace, OutputConditionIdentifier, OutputCondition, Info, RegistryName). Starsza forma z jednym argumentem działa bez zmian; teraz deleguje do nowego przeciążenia z domyślnymi wartościami sRGB. Argument ColorSpace wybiera również liczbę komponentów /N zapisywaną do słownika osadzonego profilu ICC (3 dla DeviceRGB, 4 dla DeviceCMYK, 1 dla DeviceGray); sam osadzony profil pozostaje dołączonym strumieniem sRGB do czasu dostarczenia nadchodzącego API LoadOutputIntentProfile w v3.54.0.
- TPDFDocument udostępnia OutputIntentColorSpace jako właściwość do odczytu/zapisu śledzącą przestrzeń kolorów ostatniego wywołania AddOutputIntent. Staje się to warunkiem bramki dla ograniczeń po stronie writera dotyczących CMYK / Separation / Shader w v3.54.0, gdzie API kolorów, które dziś odrzucają każde wywołanie w trybie PDF/A, będą odrzucać je tylko wtedy, gdy przestrzeń kolorów nie pasuje do OutputIntent.
Version 3.52.0
Zmieniono
- CheckCompliancePDFA teraz audytuje adnotacje, stan graficzny, akcje i form XObjects, domykając zakres walidatora PDF/A po stronie odczytu dla rozdziałów ISO 19005-1 6.2-6.6 oraz równoważnych reguł różnicowych PDF/A-2/-3. Walidator zgłasza 14 nowych klas problemów (00050-00067): zabronione podtypy adnotacji (00050; ISO 19005-1 §6.5.2 zabrania FileAttachment / Sound / Movie dla PDF/A-1, a ISO 19005-2 §6.3.1 zabrania 3D / Sound / Screen / Movie dla PDF/A-2 i PDF/A-3), adnotacja /CA inna niż 1.0 (00051; §6.5.3), adnotacja /F brakująca albo z Print=0 / Hidden=1 / Invisible=1 / NoView=1 (00052; §6.5.3, z wyjątkiem /Subtype /Popup), adnotacja /AA (00054; §6.6.2), słownik appearance adnotacji z kluczami innymi niż /N lub niezgodną wartością /N (00055; §6.5.3 Cor2), adnotacja Widget z /A (00056; §6.9), ExtGState /TR (00058; §6.2.8), ExtGState /TR2 inne niż /Default (00059; §6.2.8), oraz tylko w PDF/A-1: ExtGState /SMask inne niż /None (00061; §6.4), /BM inne niż Normal lub Compatible (00062; §6.4), /CA lub /ca inne niż 1.0 (00063; §6.4).
- Audyt action-anywhere (00064, 00065) zastępuje kontrolę wyłącznie OpenAction z v3.50.0 pełnym przebiegiem, który oznacza zabronione wartości akcji /S (Launch, Sound, Movie, ResetForm, ImportData, JavaScript, Hide, SetState, NOP, Trans, GoTo3DView, Rendition, SetOCGState) oraz named actions, których /N jest poza {NextPage, PrevPage, FirstPage, LastPage}, niezależnie od miejsca występowania akcji (annotation /A, widget /A, outline /A, catalog /OpenAction itd.). ISO 19005-1 §6.6.1.
- Audyt XObject (00066, 00067) zgłasza PostScript i Reference XObjects, a także zabronione klucze w Form XObjects (/OPI, /PS, /Subtype2 = /PS) oraz Image XObjects (/Alternates, /OPI, /Interpolate true). ISO 19005-1 §6.2.4 - §6.2.7.
Version 3.51.0
Zmieniono
- CheckCompliancePDFA teraz audytuje zgodność fontów i przestrzeni kolorów oprócz kontroli strukturalnych dodanych w v3.50.0. Walidator zgłasza dziewięć nowych klas problemów: co najmniej jeden program fontu nie jest osadzony (00030; ISO 19005-1 §6.3.4 wymaga osadzenia każdego programu fontu, w tym substytucji Standard 14), podzbiór Type 1 bez /CharSet w FontDescriptor (00031; §6.3.5), podzbiór CIDFont bez /CIDSet (00032; §6.3.5), CIDFontType2 bez /CIDToGIDMap (00033; §6.3.3.2 Cor2), niesymboliczny TrueType z niezgodnym /Encoding (00034; §6.3.7 Cor2 wymaga bezpośrednio WinAnsi/MacRoman albo jako BaseEncoding, bez /Differences), symboliczny TrueType, który nadal zawiera /Encoding (00035; §6.3.7 Cor2), co najmniej jeden font bez /ToUnicode w dokumentach PDF/A-Na lub PDF/A-Nu (00036; zastosowano czteroklasowe wyłączenie §6.3.8), przestrzeń kolorów ICCBased, która nie osadza swojego strumienia profilu (00037; §6.2.3.2), oraz plik używający jednocześnie DeviceRGB i DeviceCMYK (00038; §6.2.3.3 zabrania mieszania).
- Kontrola /ToUnicode (00036) jest ograniczona do poziomów zgodności A i U, ponieważ tylko te poziomy wymagają mapowania Unicode zgodnie z ISO 19005-1 §6.3.8 i ISO 19005-2 §6.2.11.7. Pliki poziomu B (PDF/A-1b, PDF/A-2b, PDF/A-3b) nie są oznaczane. Czteroklasowe wyłączenie rozpoznaje predefiniowane kodowania (MacRomanEncoding, MacExpertEncoding, WinAnsiEncoding), Standard 14 Type 1 BaseFonts jako przybliżenie dla fontów Adobe Standard Latin / Symbol z nazwami glifów oraz fonty Type 0, których podrzędny CIDFont używa rejestrów Adobe-GB1, Adobe-CNS1, Adobe-Japan1 lub Adobe-Korea1.
- Audyt fontów przechodzi przez każdy słownik Font, klasyfikuje go według Subtype (Type1, MMType1, TrueType, Type3, Type0 z podrzędnym CIDFontType0 lub CIDFontType2), a następnie uruchamia odpowiednie kontrole. Złożone fonty Type 0 delegują kontrole osadzenia i podzbiorów do swojego podrzędnego CIDFont, zachowując /ToUnicode na wrapperze Type 0. Wykrywanie podzbiorów używa standardowej konwencji prefiksu sześciu wielkich liter.
Version 3.50.0
Zmieniono
- CheckCompliancePDFA zgłasza teraz 15 dodatkowych problemów niezgodności PDF/A, które walidator wcześniej pomijał: brakująca tablica trailer /ID (00013), brakujący strumień Document Catalog /Metadata (00014), /Filter zastosowany do strumienia /Metadata (00015), słowniki strumieni odwołujące się do plików zewnętrznych przez /F, /FFilter lub /FDecodeParms (00016), pliki osadzone deklarowane przez /EF w dowolnym słowniku specyfikacji pliku albo przez wpis Name tree /EmbeddedFiles w dokumentach PDF/A-1 (00017, 00018), /OpenAction wskazujące na zabroniony typ akcji (00019), słowniki /AA additional-action w Document Catalog lub dowolnej Page (00020, 00021), filtry JBIG2Decode lub JPXDecode w dokumentach PDF/A-1 (00022, 00023), filtry Crypt, których /Name nie jest /Identity (00024), /Requirements w Document Catalog (00025), /Perms z kluczami innymi niż /UR3 i /DocMDP (00026) oraz /AcroForm /NeedAppearances ustawione na true (00027). Walidator oznacza teraz zabronione typy akcji Catalog /OpenAction (/Launch, /Sound, /Movie, /ResetForm, /ImportData, /JavaScript, /Hide, /SetState, /NOP, /Trans, /GoTo3DView, /Rendition, /SetOCGState) oraz wartości named-action /N spoza listy dozwolonych {NextPage, PrevPage, FirstPage, LastPage} zgodnie z ISO 19005-1 §6.6.1.
- Kontrole specyficzne dla filtrów (JBIG2Decode, JPXDecode) i kontrole plików osadzonych (/EF, /EmbeddedFiles) pozostają ograniczone do PDF/A-1, ponieważ ISO 19005-2 §6.2.8.3 i §6.8 wyraźnie łagodzą te ograniczenia dla PDF/A-2 i PDF/A-3. Kontrole struktury dokumentu (/Metadata, /AcroForm /NeedAppearances, /OpenAction, /AA, /Requirements, /Perms) mają zastosowanie do każdej części PDF/A.
Naprawiono
- Parser PDFAID akceptuje sufiks zgodności U (PDF/A-2U, PDF/A-3U) obok istniejących wariantów A i B, więc CheckCompliancePDFA nie zgłasza już fałszywego ostrzeżenia "00005 PDFA Mark NOT Found or invalid" podczas skanowania pliku PDF/A-2U lub PDF/A-3U utworzonego przez inne narzędzie. Poziomy zgodności mapowania Unicode dodane w ISO 19005-2:2011 są teraz rozpoznawane przez walidator.
Version 3.49.0
Zmieniono
- AddLinkToImportData tworzy adnotację Link, której akcja jest akcją importu danych PDF (/S /ImportData), wypełniającą pola AcroForm dokumentu z zewnętrznego pliku FDF, gdy użytkownik kliknie link (ISO 32000-1 §12.6.4.8, Table 198). Parametr FileName jest używany jako słownik filespec, z tymi samymi regułami normalizacji ścieżki, których używają AddLinkToFile / AddLinkToFileEx (ukośniki odwrotne konwertowane na ukośniki zwykłe zgodnie z ISO 32000-1 §7.11.2.1). Bit 0 Options przełącza widoczną ramkę, a bity 1–3 wybierają tryb podświetlenia linku (Invert, Outline, Push), zgodnie z istniejącymi konwencjami AddLinkTo*. PDF 1.4 lub nowszy. NIEDOZWOLONE w PDF/A, ponieważ akcja odwołuje się do zasobu zewnętrznego; fasada po cichu zwraca 0 przy wywołaniu w trybie PDF/A. Udostępnione w bibliotece Delphi oraz interfejsie DLL jako DLAddLinkToImportData / DLAddLinkToImportDataA (forma PWideChar i PAnsiChar).
Version 3.48.0
Zmieniono
- AddLinkToHideField tworzy adnotację Link, której akcja jest akcją ukrywania PDF (/S /Hide), przełączającą widoczność jednego lub więcej pól AcroForm, gdy użytkownik kliknie link (ISO 32000-1 §12.6.4.10, Table 196). FieldNames akceptuje jedną lub więcej w pełni kwalifikowanych nazw pól rozdzielonych przecinkami, średnikami lub znakami końca wiersza; pojedyncza nazwa emituje /T jako string tekstowy, a dwie lub więcej nazw emituje /T jako tablicę, przy czym obie formy są dozwolone przez specyfikację. HideFlag wybiera kierunek widoczności: wartość niezerowa ukrywa wymienione pola (/H true), a zero je pokazuje (/H false). Bit 0 Options przełącza widoczną ramkę, a bity 1–3 wybierają tryb podświetlenia linku (Invert, Outline, Push), zgodnie z AddLinkToWeb / AddLinkToNamedAction. PDF 1.2 lub nowszy. Zgodne z PDF/A, ponieważ nie jest przywoływany żaden zasób zewnętrzny. Udostępnione w bibliotece Delphi oraz interfejsie DLL jako DLAddLinkToHideField / DLAddLinkToHideFieldA (forma PWideChar i PAnsiChar).
Version 3.47.0
Zmieniono
- AddLinkToNamedAction tworzy adnotację Link, której akcja jest named action PDF (/S /Named), uruchamiającą jedno z czterech standardowych poleceń nawigacji przeglądarki zdefiniowanych w ISO 32000-1 §12.6.4.11, Table 194: NextPage, PrevPage, FirstPage i LastPage. Parametr NamedActionType wybiera polecenie (0=NextPage, 1=PrevPage, 2=FirstPage, 3=LastPage); wartości spoza tego zakresu wracają do NextPage, aby writer zawsze emitował zgodną ze specyfikacją nazwę /N. Bit 0 Options przełącza widoczną ramkę, a bity 1–3 wybierają tryb podświetlenia linku (Invert, Outline, Push), zgodnie z istniejącymi konwencjami AddLinkToWeb / AddLinkToPage. Adnotacja wymaga PDF 1.1 lub nowszego i jest zgodna z PDF/A, ponieważ nie jest przywoływany żaden zasób zewnętrzny. Dostępne w bibliotece Delphi i interfejsach DLL.
Version 3.46.1
Zmieniono
- AddCaretAnnotation tworzy adnotację caret markup (PDF /Subtype /Caret) w podanym prostokącie, oznaczając pozycję na stronie, w której tekst lub treść zostały wstawione, pominięte albo w inny sposób wymagają uwagi recenzenta. Obsługuje dwa typy symboli (None i Paragraph) przez SymbolType (0 / 1), konfigurowalny kolor, opacity, tytuł, zawartość oraz znaczniki czasu utworzenia/modyfikacji. Zdefiniowane w ISO 32000-1 §12.5.6.11. PDF 1.5 lub nowszy. Dostępne w bibliotece Delphi i interfejsach DLL.
- Ten wpis domyka uzupełnianie adnotacji geometrycznych rozpoczęte w v3.44.0 Square+Circle. PDFlibPas tworzy teraz adnotacje Text, Stamp, FreeText, TextMarkup (Highlight/Underline/Squiggly/StrikeOut), Square, Circle, Line, Polygon, PolyLine, Ink i Caret, oprócz istniejącej obsługi Link, FileAttachment, SVG, U3D i SWF.
Version 3.46.0
Zmieniono
- AddInkAnnotation tworzy adnotację ink markup (PDF /Subtype /Ink) reprezentującą odręczne kreski lub dowolne znaki rysowane na stronie. Kreski są podawane jako pojedynczy string, w którym wiele kresek jest oddzielanych przez '|' lub nową linię, a w obrębie każdej kreski pary współrzędnych używają tego samego formatu ze spacją/przecinkiem/średnikiem/tabulatorem co AddPolygonAnnotation. Na przykład "100 100 110 105 120 110 | 200 200 210 205" opisuje dwie oddzielne kreski. Obsługuje konfigurowalną szerokość obramowania, kolor tuszu, opacity, tytuł, zawartość i znaczniki czasu. Zdefiniowane w ISO 32000-1 §12.5.6.13. PDF 1.3 lub nowszy. Dostępne w bibliotece Delphi i interfejsach DLL.
- Każda kreska musi zawierać parzystą liczbę wartości (co najmniej cztery), w przeciwnym razie wywołanie zwraca 0 i nie zapisuje adnotacji. /Rect jest obliczany automatycznie z łącznego zakresu wszystkich kresek plus niewielki padding, aby kreski pozostały wewnątrz prostokąta ograniczającego adnotacji.
Version 3.45.0
Zmieniono
- AddPolygonAnnotation tworzy zamkniętą adnotację polygon markup (PDF /Subtype /Polygon) z wierzchołkami podanymi jako string par współrzędnych rozdzielanych spacjami, przecinkami, średnikami lub tabulatorami (np. "100 100 200 100 200 200 100 200"). Obsługuje konfigurowalną szerokość obramowania, kolor obramowania, opcjonalny kolor wypełnienia wnętrza, opacity, tytuł, zawartość i znaczniki czasu. Zdefiniowane w ISO 32000-1 §12.5.6.9. PDF 1.5 lub nowszy. Dostępne w bibliotece Delphi i interfejsach DLL.
- AddPolyLineAnnotation tworzy otwartą adnotację polyline markup (PDF /Subtype /PolyLine) z tym samym formatem stringa wierzchołków i konfigurowalnymi stylami zakończeń linii na każdym końcu (None, Square, Circle, Diamond, OpenArrow, ClosedArrow, Butt, ROpenArrow, RClosedArrow, Slash). Zdefiniowane w ISO 32000-1 §12.5.6.9. PDF 1.5 lub nowszy. Dostępne w bibliotece Delphi i interfejsach DLL.
- Obie adnotacje wymagają co najmniej dwóch punktów wierzchołków (czterech liczb) oraz parzystej łącznej liczby liczb; wywołanie zwraca 0, jeśli string wierzchołków nie da się sparsować do poprawnej listy par. /Rect jest obliczany z zakresu wierzchołków plus padding proporcjonalny do szerokości obramowania, aby dekoracje końców pozostały widoczne.
- Obie adnotacje podnoszą wersję dokumentu do PDF 1.5, gdy są emitowane przy niższej blokadzie minimalnej wersji.
Version 3.44.1
Zmieniono
- AddLineAnnotation tworzy adnotację line markup (PDF /Subtype /Line) między dwoma punktami końcowymi, z konfigurowalną szerokością obramowania, kolorem linii, opcjonalnym kolorem wypełnienia wnętrza, stylami zakończeń linii dla obu końców (None, Square, Circle, Diamond, OpenArrow, ClosedArrow, Butt, ROpenArrow, RClosedArrow, Slash), opacity, tytułem, zawartością oraz znacznikami czasu utworzenia/modyfikacji. Zdefiniowane w ISO 32000-1 §12.5.6.7. PDF 1.3 lub nowszy. Dostępne w bibliotece Delphi i interfejsach DLL.
- Adnotacja /Rect jest obliczana z dwóch punktów końcowych plus padding proporcjonalny do szerokości obramowania, aby dekoracje końców pozostały wewnątrz prostokąta ograniczającego adnotacji.
Version 3.44.0
Zmieniono
- AddSquareAnnotation tworzy adnotację znacznika prostokątnego (PDF /Subtype /Square) w podanym prostokącie, z konfigurowalną szerokością obramowania, kolorem obramowania, opcjonalnym kolorem wypełnienia wnętrza, kryciem, tytułem, zawartością oraz znacznikami czasu utworzenia/modyfikacji. Zdefiniowano w ISO 32000-1 §12.5.6.8. PDF 1.3 lub nowszy. Dostępne w bibliotece Delphi oraz interfejsach DLL.
- AddCircleAnnotation tworzy adnotację znacznika eliptycznego (PDF /Subtype /Circle) wpisaną w podany prostokąt, z takim samym konfigurowalnym obramowaniem, wypełnieniem, kryciem, tytułem, zawartością i znacznikami czasu jak AddSquareAnnotation. Zdefiniowano w ISO 32000-1 §12.5.6.8. PDF 1.3 lub nowszy. Dostępne w bibliotece Delphi oraz interfejsach DLL.
- Obie nowe adnotacje automatycznie podnoszą wersję dokumentu do PDF 1.3, gdy są emitowane przy blokadzie niższej wersji minimalnej, i emitują standardowy zestaw pól adnotacji znacznikowej (/Type /Subtype /Rect /C /IC /BS /Border /CA /F /M /CreationDate /NM /T /Contents /Subj /P), dzięki czemu istniejące przepływy recenzji w Acrobat, Foxit i Edge mogą je edytować po utworzeniu.
Version 3.43.0
Zmieniono
- SetStructElemSpaceBefore i SetStructElemSpaceAfter ustawiają atrybuty /SpaceBefore i /SpaceAfter (właściciel Layout) dla aktualnie otwartego elementu struktury, wyrażając odstęp przed i po elementach blokowych w punktach. Zdefiniowano w ISO 32000-1 §14.8.5.4.2 Table 340. Dostępne w bibliotece Delphi, ActiveX (Dispids 73008051/73008052) oraz interfejsach DLL.
- SetStructElemStartIndent i SetStructElemEndIndent ustawiają atrybuty /StartIndent i /EndIndent (właściciel Layout), wyrażając wcięcie od krawędzi początkowej i końcowej prostokąta treści, zgodnych z trybem pisania, w punktach. Zdefiniowano w ISO 32000-1 §14.8.5.4.2 Table 340. Dostępne w bibliotece Delphi, ActiveX (Dispids 73008053/73008054) oraz interfejsach DLL.
- SetStructElemColor ustawia atrybut /Color (właściciel Layout) jako trójkę RGB (każda składowa 0.0-1.0), opisując kolor pierwszego planu elementu dla silników ponownego przepływu i dalszych narzędzi sprawdzających kontrast kolorów. Zdefiniowano w ISO 32000-1 §14.8.5.4.2 Table 340. Dostępne w bibliotece Delphi, ActiveX (Dispid 73008055) oraz interfejsach DLL.
Naprawiono
- Naprawiono błąd serializacji w BuildStructElemDictRef: jednowyrazowe numeryczne wartości atrybutów (takie jak SpaceBefore, SpaceAfter, StartIndent, EndIndent) były zapisywane jako nazwy PDF zamiast liczb PDF. Poprawka dotyczy zarówno gałęzi atrybutów z jednym właścicielem, jak i z wieloma właścicielami.
Version 3.42.0
Zmieniono
- Dodano trzy nowe sprawdzenia zgodności: kod 00006 oznacza dokumenty zaszyfrowane (szyfrowanie jest zabronione we wszystkich wersjach PDF/A); kod 00007 oznacza dokumenty bez wpisu OutputIntents w katalogu (wymaganego przez wszystkie wersje PDF/A); kody 00011 i 00012 oznaczają dokumenty bez MarkInfo lub StructTreeRoot, gdy poziom zgodności to -a (dostępność).
Naprawiono
- CheckCompliancePDFA teraz poprawnie weryfikuje wszystkie sześć trybów PDF/A (1a, 1b, 2a, 2b, 3a, 3b). Sprawdzenie PDFAID (kod 00005) akceptuje dowolny z sześciu poprawnych znaczników XMP zamiast tylko '1B'. Sprawdzenie górnego limitu wersji (00002) stosuje 1.4 dla PDF/A-1 oraz 1.7 dla PDF/A-2 i PDF/A-3.
- Sprawdzenie OCProperties (kod 00003) jest teraz warunkowe: dotyczy tylko dokumentów PDF/A-1, w których zawartość opcjonalna (warstwy) jest zabroniona. PDF/A-2 i PDF/A-3 dopuszczają warstwy i nie są już oznaczane.
Version 3.41.0
Zmieniono
- Tryb PDF/A egzekwuje teraz zabronione operacje na poziomie API. Gdy aktywny jest tryb PDF/A (dowolny z trybów 1-6), wywołanie SetEncryption, AddSeparationColor, SetFillColorCMYK, SetTextColorCMYK lub dowolnego innego API CMYK/Separation/Shader zwraca 0 i nie ma efektu, zgodnie z wymaganiem PDF/A's dotyczącym pojedynczego wyjściowego profilu sRGB.
- Przezroczystość jest zabroniona w PDF/A-1 (tryby 1 i 2): SetTransparency, SetBlendMode i SetPageTransparencyGroup zwracają 0 i nie wykonują operacji, gdy aktywny tryb to 1 lub 2. PDF/A-2 i PDF/A-3 (tryby 3-6) dopuszczają ograniczoną przezroczystość i nie są ograniczone.
- Akcje JavaScript są zabronione we wszystkich trybach PDF/A (1-6): SetOpenActionJavaScript, PageJavaScriptAction, DocJavaScriptAction, AddGlobalJavaScript i AddLinkToJavaScript zwracają 0 i nie wykonują operacji, gdy aktywny jest dowolny tryb PDF/A. ISO 19005-1 §6.6.1 jawnie zakazuje JavaScript w dokumentach PDF/A.
- API załączników plików (EmbedFile, AddFileAttachment) są blokowane w trybach PDF/A-1 i PDF/A-2 (1-4). Pozostają funkcjonalne w PDF/A-3 (tryby 5 i 6), który jawnie dopuszcza dowolne osadzone pliki.
Version 3.40.0
Dodano
- SetPDFAMode obsługuje teraz poziomy zgodności PDF/A-2 i PDF/A-3. Przekaż NewMode=3 dla PDF/A-2b, 4 dla PDF/A-2a, 5 dla PDF/A-3b lub 6 dla PDF/A-3a. PDF/A-2 docelowo używa PDF 1.7 i dopuszcza warstwy, formularze interaktywne, obrazy JPEG2000 oraz ograniczoną przezroczystość. PDF/A-3 rozszerza PDF/A-2, zezwalając na dowolne osadzone pliki (dowolny typ MIME). Wszystkie warianty -a automatycznie zapisują /MarkInfo oraz znaczniki struktury tagged-PDF wymagane przez poziom zgodności dostępności.
Zmieniono
- GetInformation(201) zwraca '1' do '6', zgodnie z aktywnym trybem PDF/A i nową numeracją trybów.
Naprawiono
- Naprawiono: SetPDFAMode(1) (PDF/A-1a) wcześniej nie wykonywał operacji z powodu wewnętrznego błędu routingu wprowadzonego w v3.20.0. Teraz poprawnie zapisuje /MarkInfo i /OutputIntents oraz ustawia XMP pdfaid:part=1/conformance=A.
Version 3.39.0
Zmieniono
- SetStructElemWritingMode ustawia atrybut /WritingMode (właściciel Layout) dla aktualnie otwartego elementu struktury. Poprawne wartości to LrTb (od lewej do prawej, domyślne dla alfabetów łacińskich), RlTb (od prawej do lewej, dla arabskiego i hebrajskiego) oraz TbRl (od góry do dołu, od prawej do lewej, dla tradycyjnego pionowego tekstu CJK). Zdefiniowano w ISO 32000-1 §14.8.5.4.2 Table 340. Dostępne w bibliotece Delphi, ActiveX (Dispid 73008049) oraz interfejsach DLL.
- SetStructElemListNumbering ustawia atrybut /ListNumbering (właściciel List) dla aktualnie otwartego elementu struktury. Obsługiwane wartości obejmują None, Disc, Circle, Square (znaczniki nieuporządkowane) oraz Decimal, UpperRoman, LowerRoman, UpperAlpha, LowerAlpha (numerowanie uporządkowane). Atrybut jest ustawiany na elemencie L (lista) i umożliwia technologiom wspomagającym prawidłowe ogłaszanie typu listy. Zdefiniowano w ISO 32000-1 §14.8.5.3.2 Table 336. Dostępne w bibliotece Delphi, ActiveX (Dispid 73008050) oraz interfejsach DLL.
Version 3.38.0
Zmieniono
- SetStructElemColSpan ustawia atrybut /ColSpan (właściciel Table) dla aktualnie otwartego elementu struktury, wskazując, ile kolumn obejmuje komórka. Zdefiniowano w ISO 32000-1 §14.8.5.7.2 Table 337. Dostępne w bibliotece Delphi, ActiveX (Dispid 73008047) oraz interfejsach DLL.
- SetStructElemRowSpan ustawia atrybut /RowSpan (właściciel Table) dla aktualnie otwartego elementu struktury, wskazując, ile wierszy obejmuje komórka. Zdefiniowano w ISO 32000-1 §14.8.5.7.2 Table 337. Dostępne w bibliotece Delphi, ActiveX (Dispid 73008048) oraz interfejsach DLL.
- Obie funkcje są wygodnymi opakowaniami równoważnymi wywołaniu AddTagAttribute z Owner='Table' i odpowiednią nazwą atrybutu. Uzupełniają SetStructElemScope dla w pełni opisanych komórek tabel w złożonych tabelach lub tabelach z nagłówkami obejmującymi wiele zakresów.
Version 3.37.2
Zmieniono
- GetPDFUADiagnostics zgłasza teraz FORM-NO-TOOLTIP:N, gdy N interaktywnych pól formularza (adnotacje Widget) nie ma wpisu TU (podpowiedź / nazwa dostępna). ISO 14289-1 §7.18.4 wymaga, aby wszystkie interaktywne pola formularzy zawierały wpis TU, tak aby technologia wspomagająca mogła ogłosić użytkownikowi cel pola, gdy pole otrzyma fokus. /TU jest nazwą dostępną odczytywaną na głos przez czytniki ekranu; różni się od /T, czyli częściowej nazwy pola używanej do dostępu programistycznego i przesyłania formularza.
Version 3.37.1
Zmieniono
- GetPDFUADiagnostics zgłasza teraz LIST-STRUCT:N, gdy N elementów struktury LI lub LBody pojawia się poza wymaganym elementem nadrzędnym. ISO 32000-1 §14.8.4.4 wymaga, aby LI było bezpośrednim dzieckiem L (lista), a LBody bezpośrednim dzieckiem LI (element listy). Niepoprawne zagnieżdżenie list uniemożliwia technologiom wspomagającym prawidłowe przechodzenie po treści listy i jej ogłaszanie oraz może powodować błędy walidacji struktury dokumentu w walidatorach PDF/UA-1.
Version 3.37.0
Zmieniono
- BeginTagEx2 to nowe API, które otwiera element struktury i ustawia wszystkie główne właściwości elementu w jednym wywołaniu. Oprócz parametrów TagType, AltText, ActualText i Lang z BeginTagEx, BeginTagEx2 przyjmuje Title (/T, dla panelu nawigacji Tags), ElemID (/ID, unikalny identyfikator elementu) oraz Expansion (/E, pełny tekst skrótu lub akronimu). Przekazanie pustego ciągu dla dowolnego z tych trzech dodatkowych parametrów jest równoważne pominięciu odpowiedniego settera. BeginTagEx2 ogranicza kod szablonowy dla dobrze opisanych elementów — zamiast wywoływać BeginTagEx, a następnie osobno SetStructElemTitle, SetStructElemID i SetStructElemExpansion, wszystkie siedem właściwości można ustawić w jednym wywołaniu. Funkcja jest dostępna w bibliotece Delphi, ActiveX (Dispid 73008046) oraz interfejsach DLL.
Version 3.36.1
Zmieniono
- GetPDFUADiagnostics zgłasza teraz TABLE-TH-NO-SCOPE:N, gdy N elementów struktury TH (komórka nagłówka tabeli) nie ma atrybutu Scope. ISO 32000-1 §14.8.4.3.4 Table 337 definiuje Scope (Row, Column lub Both) jako atrybut opisujący, do których komórek danych odnosi się komórka nagłówka. Bez niego czytniki ekranu i inne technologie wspomagające nie mogą niezawodnie powiązać komórek nagłówka z komórkami danych w złożonych tabelach lub tabelach z wieloma nagłówkami, czego wymaga ISO 14289-1 §7.5. Wywołaj SetStructElemAttr('Table','Scope', 'Column') (lub 'Row' / 'Both') bezpośrednio po oznaczeniu każdego elementu TH.
Version 3.36.0
Zmieniono
- SetStructElemExpansion to nowe API, które ustawia wpis /E (tekst rozwinięcia) dla aktualnie otwartego elementu struktury (ISO 32000-1 §14.9.5). Tekst rozwinięcia jest pełną zapisaną formą skrótu lub akronimu zawartego w elemencie — np. "World Wide Web" dla Span, którego tekst to "WWW". Czytniki ekranu odczytują rozwinięcie zamiast próbować wymawiać skrócone znaki, co jest krytyczne dla dostępności treści technicznych i naukowych. PDF/UA-1 (ISO 14289-1 §7.2) wymaga, aby język naturalny był jednoznacznie możliwy do określenia; /E jest standardowym mechanizmem dla skrótów i akronimów. Funkcja jest dostępna w bibliotece Delphi, ActiveX oraz interfejsach DLL.
Version 3.35.1
Zmieniono
- GetPDFUADiagnostics zgłasza teraz DOCINFO-TITLE-MISSING, gdy wpis /Title w słowniku informacji dokumentu jest nieobecny lub pusty. PDF/UA-1 (ISO 14289-1) wymaga tytułu dokumentu, aby czytniki ekranu mogły go ogłosić po otwarciu dokumentu. Istniejące sprawdzenie DISPLAYDOCTITLE-FALSE potwierdza, że tytuł jest pokazywany na pasku tytułu przeglądarki; DOCINFO-TITLE-MISSING jest uzupełniające — potwierdza, że sama wartość tytułu jest ustawiona. Wywołaj SetDocumentInfo('Title', ...), aby podać wartość.
Version 3.35.0
Zmieniono
- SetStructElemTitle to nowe API, które ustawia wpis /T (tytuł) dla aktualnie otwartego elementu struktury (ISO 32000-1 §14.7.2 Table 324). Tytuł jest czytelną dla człowieka etykietą identyfikującą konkretną instancję elementu — na przykład "Chapter 1", "Summary Table" lub "Figure 3: Quarterly Sales" — i jest wyświetlany w panelu nawigacji Tags przeglądarek PDF oraz używany przez narzędzia naprawy dostępności. /T różni się od /Alt (tekst alternatywny dla użytkowników z ograniczeniami renderowania) i /ActualText (korekta tekstu na poziomie glifów); jest najbardziej przydatny na nietekstowych elementach kontenerowych, takich jak Table, Figure, Form, Sect i Div. Przekaż pusty ciąg, aby wyczyścić wcześniej ustawioną wartość. Funkcja jest dostępna w bibliotece Delphi, ActiveX oraz interfejsach DLL.
Version 3.34.0
Zmieniono
- SetStructElemAltText to nowe API, które ustawia wpis /Alt dla aktualnie otwartego elementu struktury (ISO 32000-1 §14.9.3). Jest równoważne przekazaniu AltText do BeginTag, ale pozwala ustawić lub zaktualizować opis tekstu alternatywnego po otwarciu elementu — przydatne, gdy opis jest obliczany oddzielnie od typu elementu. PDF/UA-1 (ISO 14289-1 §7.5) wymaga tekstu Alt dla elementów Figure i Formula; GetPDFUADiagnostics już zgłasza FIGURE-NO-ALT:N dla brakujących wartości. Funkcja jest dostępna w bibliotece Delphi, ActiveX oraz interfejsach DLL.
Version 3.33.1
Dodano
- GetPDFUADiagnostics zawiera teraz sprawdzenie ROLEMAP-UNMAPPED:N, które wykrywa niestandardowe nazwy typów elementów struktury użyte w dokumencie bez wpisu w słowniku /RoleMap. ISO 14289-1 §7.1 i ISO 32000-1 §14.7.3 wymagają, aby każdy niestandardowy typ struktury był mapowany na standardowy typ PDF (taki jak P, Span lub Figure), tak aby technologia wspomagająca mogła określić, jak obsłużyć element. Gdy zostanie znalezionych N niezmapowanych typów, opis problemu zawiera listę nazw typów, aby wywołujący wiedzieli, które wpisy AddRoleMap są potrzebne. Wszystkie 49 standardowych typów struktury zdefiniowanych w ISO 32000-1 Table 333 (PDF 1.7) jest rozpoznawanych i wykluczanych z raportu.
Version 3.33.0
Zmieniono
- SetStructElemLang to nowe API, które ustawia wpis /Lang dla aktualnie otwartego elementu struktury (ISO 32000-1 §14.9.2). Znacznik języka zastępuje język na poziomie dokumentu zadeklarowany przez SetDocumentLanguage lub SetPDFUAMode dla elementu i wszystkich jego potomków, umożliwiając dokumentom wielojęzycznym oznaczanie każdego zakresu właściwym znacznikiem języka BCP 47 (np. 'en-US', 'fr', 'zh-Hant-TW'). Czytniki ekranu używają /Lang na poziomie elementu, aby wybrać odpowiedni silnik lub głos zamiany tekstu na mowę podczas głośnego czytania dokumentu. Funkcja jest dostępna w bibliotece Delphi, ActiveX oraz interfejsach DLL.
Version 3.32.0
Zmieniono
- SetStructElemActualText to nowe API, które ustawia wpis /ActualText dla aktualnie otwartego elementu struktury (ISO 32000-1 §14.9.4). Użyj go, aby określić dokładny tekst Unicode reprezentowany przez sekwencję glifów, gdy ekstrakcja ze strumienia treści dawałaby niepoprawne wyniki — najczęstsze przypadki to glify ligatur OpenType (U+FB00 ff, U+FB01 fi, U+FB02 fl) oraz skróty z nieoczywistymi rozwinięciami. ActualText uzupełnia, a nie zastępuje renderowaną treść; nadpisuje to, co technologie wspomagające i ekstraktory tekstu odczytują dla tego elementu, bez tłumienia renderowania wizualnego. Funkcja jest dostępna w bibliotece Delphi, ActiveX oraz interfejsach DLL.
Version 3.31.1
Zmieniono
- GetPDFUADiagnostics sprawdza teraz elementy struktury Formula oprócz elementów Figure przy zgłaszaniu brakującego tekstu Alt (FIGURE-NO-ALT:N). ISO 32000-1 §14.9.3 wymaga opisów alternatywnych zarówno dla figur graficznych, jak i formuł matematycznych; wcześniej skanowane były tylko elementy Figure.
- GetPDFUADiagnostics zgłasza teraz PDF-VERSION-LOW, gdy wersja PDF dokumentu jest niższa niż 1.7. PDF/UA-1 (ISO 14289-1) jest zdefiniowany względem PDF 1.7 (ISO 32000-1:2008); dokumenty w PDF 1.5 lub 1.6 nie spełniałyby wymagań specyfikacji bazowej. Wywołaj SetPDFUAMode, aby automatycznie podnieść wersję do 1.7.
Version 3.31.0
Naprawiono
- Identyfikatory elementów struktury i powiązanie nagłówków tabel są teraz obsługiwane. SetStructElemID przypisuje unikalny identyfikator ciągu znaków (/ID) do aktualnie otwartego elementu struktury; identyfikatory są zbierane w drzewie nazw /IDTree w korzeniu drzewa struktury podczas zapisywania dokumentu, umożliwiając narzędziom dostępności i odwołaniom krzyżowym lokalizowanie elementów według ID (ISO 32000-1 §14.7.4). SetStructElemHeaders wiąże bieżącą komórkę tabeli (TD lub TH) z jedną lub większą liczbą komórek nagłówka za pomocą rozdzielonej przecinkami listy wcześniej przypisanych identyfikatorów, zapisując tablicę /Headers w słowniku właściciela atrybutów Table (ISO 32000-1 §14.8.5.7.2). Razem te dwie funkcje obsługują złożone znaczniki tabel dla PDF/UA-1 (ISO 14289-1 §7.10) i WCAG 2.x SC 1.3.1. Obie funkcje są dostępne w bibliotece Delphi, ActiveX oraz interfejsach DLL. AddTagAttribute teraz również poprawnie obsługuje atrybut /Headers z wartościami rozdzielanymi przecinkami zapisywanymi jako tablice ciągów tekstowych PDF.
Version 3.30.1
Dodano
- GetPDFUADiagnostics zawiera teraz sprawdzenie HEADING-LEVEL-SKIP:N, które wykrywa przeskoki poziomów nagłówków w kolejności dokumentu (np. H1 bezpośrednio po którym następuje H3 bez H2 pomiędzy). Sprawdzenie wykonuje przejście pre-order całego drzewa elementów struktury i zlicza każde wystąpienie, w którym następny poziom nagłówka przekracza poprzedni o więcej niż jeden. Ogólne elementy H są traktowane jako H1. Powrót do nagłówka wyższego poziomu (H3 → H1) nie jest liczony jako przeskok. WCAG 2.x Success Criterion 1.3.1 i ISO 14289-1 §7.1 wymagają, aby nagłówki były zagnieżdżane bez luk.
Version 3.30.0
Zmieniono
- Atrybuty elementów struktury są teraz obsługiwane dla dokumentów tagged PDF i PDF/UA. Trzy nowe funkcje API umożliwiają dołączanie atrybutów do elementu struktury aktualnie budowanego na stosie znaczników: AddTagAttribute (ogólnego przeznaczenia, dowolny owner/name/value), SetStructElemScope (wygodne opakowanie ustawiające atrybut /Scope pod właścicielem Table, dla komórek nagłówka TH — ISO 32000-1 §14.8.5.7.2) oraz SetStructElemBBox (wygodne opakowanie ustawiające atrybut /BBox pod właścicielem Layout, dla figur i innych wizualnie pozycjonowanych elementów — ISO 32000-1 §14.8.5.4). Podczas zapisywania dokumentu atrybuty są zapisywane jako słowniki atrybutów /A w każdym elemencie struktury; wiele atrybutów od tego samego właściciela jest grupowanych w jeden słownik, a atrybuty od różnych właścicieli są zapisywane jako tablica słowników. Wszystkie trzy funkcje są dostępne w bibliotece Delphi, ActiveX oraz interfejsach DLL.
Version 3.29.1
Dodano
- GetPDFUADiagnostics zawiera teraz dwa dodatkowe sprawdzenia: czy jakiekolwiek elementy struktury Figure w dokumencie nie mają wartości tekstu Alt (zgłaszane jako FIGURE-NO-ALT:N, zgodnie z ISO 14289-1 §7.5 i ISO 32000-1 §14.9.3) oraz czy jakiekolwiek elementy struktury nadal są otwarte, ponieważ EndTag nie zostało wywołane (zgłaszane jako STRUCT-UNCLOSED:N). Sprawdzenie figur wykonuje pełne rekurencyjne przejście drzewa elementów struktury, obejmując elementy na wszystkich poziomach zagnieżdżenia.
Version 3.29.0
Zmieniono
- GetPDFUADiagnostics to nowe API diagnostyczne, które sprawdza dokument pod kątem potencjalnych problemów zgodności z PDF/UA-1 (ISO 14289-1) i zwraca rozdzieloną znakami nowego wiersza listę ustaleń. Wykonywanych jest sześć sprawdzeń: czy ustawiono MarkInfo/Marked (tagged PDF), czy katalog dokumentu ma wpis /Lang, czy ViewerPreferences/DisplayDocTitle ma wartość true, czy metadane XMP zawierają identyfikator pdfuaid:part, liczba niewyłączonych adnotacji bez wpisu Contents oraz liczba osadzonych plików bez wpisu AFRelationship. Każde ustalenie jest identyfikowane krótkim kodem (np. LANG-MISSING, ANNOT-NO-CONTENTS:3), po którym następuje czytelny dla człowieka opis. Zwraca pusty ciąg, gdy nie znaleziono problemów. Dostępne w bibliotece Delphi, ActiveX oraz interfejsach DLL.
Version 3.28.5
Zmieniono
- Ulepszenie dostępności adnotacji PDF/UA-1: gdy adnotacja FileAttachment nie ma wpisu Contents ani pola /T, nazwa pliku z osadzonej specyfikacji pliku adnotacji (/FS /UF lub /F) jest teraz używana jako zastępczy opis dostępny. Uzupełnia to łańcuch zastępczy Contents adnotacji: /T → Link URI → Stamp name → FileAttachment filename. Czytniki ekranu otrzymują nazwę załączonego pliku zamiast ciszy, spełniając ISO 14289-1 §7.18.1 dla najczęstszych typów adnotacji.
Version 3.28.4
Zmieniono
- Ulepszenie dostępności adnotacji PDF/UA-1: gdy adnotacja Stamp nie ma wpisu Contents (lub ma pusty) ani pola /T, nazwa typu stempla z wpisu /Name adnotacji jest teraz używana jako zastępczy opis dostępny (np. "Approved", "Draft", "Confidential", "Final"). Rozszerza to łańcuch zastępczy Contents adnotacji wprowadzony w v3.28.3, aby obejmował adnotacje stempla, które są powszechne w przepływach pracy obejmujących dokumenty recenzowane lub zatwierdzane i często nie mają jawnej wartości Contents.
Version 3.28.3
Zmieniono
- Ulepszenie dostępności adnotacji PDF/UA-1: gdy adnotacja Link nie ma wpisu Contents (lub ma pusty) ani pola /T, URI z akcji URI adnotacji jest teraz używany jako zastępczy opis dostępny. Dotyczy to tylko podczas przetwarzania SetPDFUAMode i tylko adnotacji Link, które zawierają akcję /URI. Czytniki ekranu otrzymują adres URL jako etykietę ostatniej szansy, spełniając ISO 14289-1 §7.18.1 w typowym przypadku, gdy autorzy tworzą hiperłącza bez podania czytelnego dla człowieka opisu.
Version 3.28.2
Zmieniono
- SetEmbeddedFileAFRelationship to nowe API do jawnego ustawiania wartości AFRelationship w słowniku specyfikacji pliku osadzonego pliku. Wymagane przez ISO 14289-1 (PDF/UA-1) §7.11, pozwala wywołującym określić semantyczną relację osadzonego pliku z treścią dokumentu przez wybór jednej z pięciu poprawnych wartości: Source, Data, Alternative, Supplement lub Unspecified. Gdy SetPDFUAMode jest aktywny, każdemu osadzonemu plikowi bez klucza AFRelationship automatycznie przypisywane jest Unspecified; użyj tej funkcji, aby nadpisać tę wartość domyślną przed zapisaniem. Dostępne w bibliotece Delphi, ActiveX oraz interfejsach DLL.
Version 3.28.1
Zmieniono
- Gdy SetPDFUAMode jest wywoływane dla dokumentu, którego metadane XMP zawierają ogólny domyślny tytuł biblioteki zamiast tytułu specyficznego dla dokumentu, tytuł jest teraz automatycznie zastępowany wartością z wpisu /Info Title dokumentu (jeśli jest obecny). Zapewnia to, że pakiet XMP pdfuaid:part-1 odzwierciedla rzeczywisty tytuł dokumentu zamiast symbolu zastępczego, spełniając oczekiwania weryfikatorów PDF/UA-1.
- Parser XMP (LoadFromString) odczytuje teraz wartość dc:title z istniejących metadanych XMP podczas ładowania dokumentu, dzięki czemu ponowny zapis PDF, który już ma dc:title, poprawnie zachowuje ten tytuł zamiast przywracać domyślny symbol zastępczy.
Version 3.28.0
Zmieniono
- BeginArtifactEx(ArtifactType, ArtifactSubtype) to nowe API tagged-PDF, które rozszerza BeginArtifact, aby wyrazić zarówno /Type artefaktu, jak i Pagination /Subtype w jednym wywołaniu. Gdy oba parametry są niepuste, zapisywany operator to /Artifact << /Type /T /Subtype /S >> BMC, co umożliwia w pełni określone artefakty Pagination, takie jak nagłówki i stopki, zgodnie z ISO 32000-1 §14.8.2.2.1. Jeśli tylko jeden parametr jest niepusty, używana jest odpowiednia forma z jednym kluczem. Eksportowane są także punkty wejścia DLL DLBeginArtifactEx i DLBeginArtifactExA.
Version 3.27.2
Naprawiono
- BeginArtifact poprawnie rozróżnia teraz typy artefaktów od podtypów paginacji. Gdy argumentem jest Pagination, Layout lub Page (typy artefaktów zgodnie z ISO 32000-1 §14.8.2.2.1 Table 330), operator oznaczonej treści zapisuje /Type zamiast /Subtype. Inne wartości, takie jak Header, Footer i Watermark, nadal są zapisywane jako /Subtype. Poprawia to wcześniejsze nieprawidłowe wyjście, które zapisywało /Subtype /Pagination, gdy wywołujący zamierzał oznaczyć artefakt paginacji.
Version 3.27.1
Zmieniono
- Gdy tryb PDF/UA jest aktywny, a dokument zawiera pliki osadzone, każdy słownik specyfikacji pliku bez wpisu AFRelationship otrzymuje go teraz automatycznie podczas zapisu. Zapisywana wartość to /Unspecified, co spełnia wymóg ISO 14289-1 §7.11, aby każdy plik osadzony miał klucz AFRelationship. Dotyczy to zarówno plików dodanych przez EmbedFile, jak i plików osadzonych już obecnych w załadowanym dokumencie.
Version 3.27.0
Zmieniono
- AddRoleMap(CustomType, StandardType) to nowe API tagged-PDF, które rejestruje mapowanie z niestandardowej nazwy typu elementu struktury na standardowy typ struktury PDF. Podczas zapisu mapowania są zapisywane w słowniku RoleMap w korzeniu drzewa struktury, spełniając wymóg ISO 14289-1 §7.1 dla dokumentów używających nazw znaczników specyficznych dla aplikacji. Można zarejestrować wiele mapowań; zduplikowane klucze są nadpisywane przez ostatnie wywołanie. Eksportowane są także punkty wejścia DLL DLAddRoleMap i DLAddRoleMapA.
Version 3.26.0
Zmieniono
- BeginTagEx(TagType, AltText, ActualText, Lang) to nowe API tagged-PDF, które rozszerza BeginTag o jawny atrybut języka naturalnego. Gdy Lang jest niepusty, jest zapisywany w atrybucie /Lang elementu struktury's, umożliwiając adnotację języka dla poszczególnych elementów wymaganą przez ISO 14289-1 §7.2 dla dokumentów wielojęzycznych. Przekaż pusty ciąg Lang, aby zachowywać się identycznie jak BeginTag. Eksportowane są także punkty wejścia DLL DLBeginTagEx i DLBeginTagExA.
Version 3.25.1
Zmieniono
- Niepodzbiorowane czcionki TrueType ładowane z domyślną stroną kodową Windows (WinAnsiEncoding) otrzymują teraz strumień ToUnicode CMap, umożliwiając niezawodne wyodrębnianie tekstu Unicode oraz kopiowanie/wklejanie dla tych czcionek. Wcześniej strumień ToUnicode był zapisywany tylko wtedy, gdy obecne było jawne nadpisanie strony kodowej lub tablica Differences; powszechna ścieżka domyślnego kodowania go nie miała.
- Ta sama poprawka dotyczy czcionek TrueType ładowanych z jawną niedomyślną stroną kodową, ale bez tablicy Differences, oraz czcionek ładowanych za pomocą formatu packaged-font.
Version 3.25.0
Zmieniono
- Gdy tryb PDF/UA jest aktywny, niezwolnione adnotacje (wszystkie typy z wyjątkiem Widget, PrinterMark i TrapNet), które nie mają niepustego wpisu Contents, otrzymują go teraz automatycznie podczas zapisu. Wartość /T (tytuł / autor) adnotacji's jest używana jako wartość zastępcza, spełniając ISO 14289-1 §7.18.1 dla adnotacji, które mają tytuł, ale nie mają jawnego dostępnego opisu.
Version 3.24.0
Zmieniono
- Gdy tryb PDF/UA jest aktywny, interaktywne pola formularza, które nie mają wpisu TU (podpowiedź / opis alternatywny), otrzymują go teraz automatycznie podczas zapisu. Częściowa nazwa pola (wpis /T) pola's jest używana jako wartość zastępcza, zapewniając, że czytniki ekranu mogą zidentyfikować każde pole. Przyciski Push button są poprawnie wyłączone z tego wymogu zgodnie z ISO 14289-1 §7.18.4.
Version 3.23.1
Zmieniono
- GetInformation(200) zwraca '1', gdy tryb PDF/UA-1 jest aktywny w wybranym dokumencie, umożliwiając wywołującym sprawdzanie stanu trybu zgodności w czasie wykonywania.
- GetInformation(201) zwraca '1' dla PDF/A-1a, '2' dla PDF/A-1b albo pusty ciąg, gdy tryb PDF/A jest wyłączony.
- GetInformation(313) zwraca ciąg wersji PDF, do której aktualnie zablokowany jest cel zapisu, albo pusty ciąg dla dokumentów z wersjonowaniem swobodnym.
Naprawiono
- GetInformation(311) i GetInformation(312) poprawnie zwracają teraz ciąg wymagań wersji oraz nazwę funkcji z najnowszego konfliktu blokady wersji (wcześniej zapowiedziane we wpisie v3.20.3, ale jeszcze niezaimplementowane).
Version 3.23.0
Zmieniono
- SetMarkInfo(Marked) jest teraz publicznym API, pozwalającym ustawić flagę MarkInfo.Marked niezależnie od pełnej konfiguracji PDF/UA-1 wykonywanej przez SetPDFUAMode. Gdy Marked ma wartość 1, MarkInfo.Suspects jest także ustawiane na false, zgodnie z wymogiem ISO 14289-1 §7.18.6.
- Gdy tryb PDF/UA jest aktywny, wszystkie strony automatycznie otrzymują wpis /Tabs /S podczas zapisu, spełniając wymaganie kolejności tabulacji opartej na strukturze z ISO 14289-1 §7.18.4.
- Dodano dokumentację referencyjną HTML dla SetPDFUAMode, SetDocumentLanguage, SetMarkInfo, BeginTag, EndTag, BeginArtifact i EndArtifact, z pełnymi tabelami składni i przykładami użycia.
Version 3.22.0
Zmieniono
- BeginTag(TagType, AltText, ActualText) otwiera element struktury tagged-PDF w bieżącym strumieniu treści, zapisując operator BDC z automatycznie przypisanym MCID i rejestrując element w drzewie struktury dokumentu. TagType to dowolny standardowy typ struktury PDF (P, H1, Figure, Table itd.). AltText i ActualText są opcjonalnymi ciągami dostępności zakodowanymi jako ciągi tekstowe PDF (UTF-16BE).
- EndTag zamyka ostatnio otwarty element struktury, zapisując pasujący operator EMC do strumienia treści.
- BeginArtifact(SubType) oznacza region treści jako artefakt PDF (artefakt paginacji, tło itd.), zapisując operator BMC. SubType jest opcjonalny; gdy jest podany, jest zapisywany jako /Artifact << /Subtype /SubType >>.
- EndArtifact zamyka region artefaktu operatorem EMC.
- Podczas zapisu, gdy zarejestrowano jakiekolwiek elementy struktury znacznikowanej, biblioteka automatycznie buduje kompletny StructTreeRoot, przypisuje klucze StructParents do dotkniętych stron i zapisuje drzewo numerów ParentTree, spełniając wymagania ISO 32000-1 §14.7 dla tagged PDF.
- Standardowe czcionki Type 1 (rodziny Helvetica, Times, Courier, Symbol) oraz osadzone czcionki Type 1 z kodowaniem WinAnsi otrzymują teraz strumień ToUnicode CMap, umożliwiając niezawodne wyodrębnianie tekstu Unicode oraz kopiowanie/wklejanie dla tych typów czcionek.
Version 3.21.0
Zmieniono
- SetPDFUAMode(Language) aktywuje tryb zgodności PDF/UA-1 (ISO 14289-1): automatycznie podnosi dokument do PDF 1.7, zapisuje MarkInfo.Marked i MarkInfo.Suspects, włącza DisplayDocTitle w ViewerPreferences, ustawia Catalog.Lang, gdy Language jest niepusty, oraz zapisuje wpis przestrzeni nazw XMP pdfuaid:part = 1 wymagany przez ISO 14289-1 Section 6.7.11.
- SetDocumentLanguage(Language) zapisuje wpis Catalog /Lang bezpośrednio, pozwalając zadeklarować język dokumentu niezależnie od trybu PDF/UA.
- MarkInfo.Suspects jest teraz ustawiane na false zawsze, gdy MarkInfo.Marked jest ustawione na true, spełniając wymaganie struktury tagged-PDF z ISO 14289-1 (Section 7.18.6).
- Encrypt wymusza teraz flagę uprawnienia CanCopyAccess (kopiowanie treści dla dostępności), gdy dokument jest w trybie PDF/UA, zgodnie z wymogiem ISO 14289-1 Section 7.17.
Naprawiono
- Pola formularza Choice (lista rozwijana) nie niosą już bezsensownej zakodowanej na stałe wartości podpowiedzi; TU pozostaje nieustawione, aby wywołujący mógł przypisać znaczącą etykietę przez API właściwości pola formularza.
Version 3.20.3
Zmieniono
- Encrypt i AddSWFAnnotationFromFile zwracają teraz natychmiast 0 z LastErrorCode 602, gdy wersja zapisu jest zablokowana poniżej minimum wymaganego przez wybraną siłę szyfrowania lub typ adnotacji, zamiast po cichu kontynuować i kończyć niepowodzeniem dopiero podczas zapisu.
- GetInformation(311) i GetInformation(312) odzwierciedlają teraz konfliktowe wymaganie wersji w czasie zapisu, gdy zablokowana wersja blokuje funkcje poziomu rozszerzeń, takie jak AES-256 lub adnotacje RichMedia.
Version 3.20.2
Zmieniono
- AddU3DAnnotationFromFile automatycznie podnosi teraz wersję dokumentu do PDF 1.6, gdy adnotacja 3D jest dodawana do dokumentu o niższej wersji, zgodnie z zachowaniem automatycznego podnoszenia wersji wszystkich innych punktów wejścia API PDF 1.6+.
Version 3.20.1
Zmieniono
- Cele zapisu PDF 1.2 są teraz egzekwowane jako ścisłe kontrakty PDF 1.2. Zapisywanie obiektów PDF 1.3+, takich jak dane page TrimBox, pod celem PDF 1.2 kończy się niepowodzeniem przed zapisaniem wyjścia, zamiast emitować plik o mieszanej wersji.
- Zgodność z poziomem rozszerzeń Adobe PDF 1.7 jest teraz częścią kontroli preflight zapisu. AESV3, AES-256, RichMedia, Projection, słowniki geoprzestrzenne i podfiltry podpisów ETSI są sprawdzane względem wymaganego ExtensionLevel.
- Szyfrowanie AES-256, adnotacje RichMedia, słowniki geoprzestrzenne i podfiltry podpisów ETSI deklarują teraz odpowiadający wpis Adobe Extensions, gdy PDFlib automatycznie podnosi dokument do treści rozszerzeń PDF 1.7.
- Zapisy Append używają teraz tej samej bramki zgodności wersji co pełne zapisy.
- Dołączone opcjonalne biblioteki DLL środowiska uruchomieniowego PDFium zostały odświeżone dla Win32 i Win64. GDI+ pozostaje domyślnym rendererem; PDFium pozostaje opcjonalny przez SetPDFiumFileName i SelectRenderer(3).
- Walidacja: zestawy Delphi Win32 i Win64 DUnitX przeszły po 207/207 testów każdy, a C++Builder Win64x GoogleTest przeszedł 61 testów z pominiętymi 2 istniejącymi testami zależnymi od przykładów.
Version 3.20.0
Zmieniono
- Osiem kolejnych punktów wejścia writer PDFlib przechodzi teraz przez Phase 3 EnsureMinVersion, dzięki czemu wersja dokumentu automatycznie podnosi się do minimum wymaganego przez emitowaną funkcję: SetDocumentMetadata (PDF 1.4 - strumień /Metadata XMP) SetPDFAMode(1 or 2) (PDF 1.4 - /MarkInfo + /OutputIntents) PageJavaScriptAction (PDF 1.5 - Page /AA + JavaScript) DocJavaScriptAction (PDF 1.4 - Catalog /AA + JavaScript) SetTabOrderMode (PDF 1.5 - Page /Tabs) NewOptionalContentGroup (PDF 1.5 - /Type /OCG) SetNeedAppearances (PDF 1.5 - AcroForm /NeedAppearances) NewFormField(ftSignature) (PDF 1.5 - AcroForm /SigFlags AppendOnly)
- W połączeniu z zestawem v3.15.0 (SetTransparency, SetPageUserUnit, Encrypt, SetPageLayout) i zestawem v3.17.0 (osiem wpisów JavaScript / embedded-file / XFA / SWF), PDFlib automatycznie podnosi teraz FVersion w dwudziestu jeden punktach wejścia writer.
- NewOptionalContentGroup wcześniej podnosiło FVersion bezpośrednio; teraz przechodzi przez EnsureMinVersion, dzięki czemu LockSaveVersion jest respektowane, a podniesienie jest rejestrowane w AutoBumpedFeatures.
Version 3.19.0
Zmieniono
- Zgodność wersji PDF podczas zapisu i ładowania rozpoznaje teraz także cztery wcześniej odroczone funkcje: Btn /Ff bit 15 NoToggleToOff (tylko przyciski radiowe) -> PDF 1.4 DeviceN /Subtype /NChannel (udoskonalenie przestrzeni kolorów) -> PDF 1.6 FontFile3 /Subtype /OpenType (typ programu czcionki) -> PDF 1.6 Sig /SubFilter ETSI.CAdES.detached or ETSI.RFC3161 -> PDF 1.7
- Reguła NChannel dopasowuje formę tablicy przestrzeni kolorów DeviceN [/DeviceN names alternateSpace tintTransform attributes], gdy słownik attributes pod indeksem 4 zawiera /Subtype /NChannel.
- Reguła FontFile3 OpenType uruchamia się tylko wtedy, gdy strumień jest osiągany przez klucz nadrzędny o nazwie 'FontFile3', więc niepowiązane strumienie, które przypadkowo zawierają /Subtype /OpenType, nie są oznaczane.
- Tabela PDFFeatureRules zawiera teraz 103 reguły (99 + 4 nowe).
Version 3.18.6
Zmieniono
- Zgodność wersji PDF podczas zapisu i ładowania rozpoznaje teraz /AA (akcje dodatkowe) ze świadomością typu kontenera: Catalog /AA (wyzwalacze na poziomie dokumentu) -> PDF 1.4 Annot /AA (wyzwalacze adnotacji) -> PDF 1.4 Page /AA (wyzwalacze strony) -> PDF 1.5
- Formularzowe /AA (PDF 1.2) pozostaje objęte istniejącym kontraktem zapisu PDF 1.3; żadna reguła nie jest potrzebna.
- Tabela PDFFeatureRules zawiera teraz 99 reguł (96 + 3 nowe).
Version 3.18.5
Dodano
- Nowa reguła: AcroForm /NeedAppearances jest rozpoznawane jako funkcja PDF 1.5 zgodnie z PDF 1.5 Table 218.
Zmieniono
- Tabela PDFFeatureRules zawiera teraz 96 reguł (95 + 1 nowa).
Naprawiono
- Zgodność wersji PDF podczas zapisu i ładowania teraz poprawnie klasyfikuje Page /Tabs jako funkcję PDF 1.5; wcześniej była błędnie klasyfikowana jako PDF 1.4. Dokument zmian specyfikacji PDF 1.4 (Adobe TN #5409) nie wymienia /Tabs, a PDF 1.5 Table 8.10 wprowadza "Tabs (Optional; PDF 1.5)".
Version 3.18.4
Dodano
- Pokrycie regresyjne zlib-ng obejmuje teraz ładunki o rozmiarach granicznych, dane linii skanowania podobne do PNG, zapisane strumienie wieloblokowe oraz znane strumienie zlib w runnerach testów Delphi i C++Builder.
Zmieniono
- PDFlibZLib teraz zawsze używa dołączonego statycznego backendu obiektowego zlib-ng w zwykłych kompilacjach biblioteki, usuwając pozostałą ścieżkę awaryjną System.ZLib.
- Walidacja: zestawy Delphi Win32 i Win64 DUnitX przeszły po 194/194 każdy, a C++Builder Win64x GoogleTest przeszedł 58 testów z 2 istniejącymi testami zależnymi od próbek pominiętymi.
Version 3.18.3
Zmieniono
- Dema Delphi i C++Builder generujące wyjście PDF lub tekstowe teraz automatycznie otwierają wygenerowany dokument po pomyślnym zapisie.
- Pakiet instalatora teraz trzyma artefakty kompilacji poza folderami demo i sprawia, że próbki C++Builder oraz moduły DLL i ActiveX/OCX są komponentami opcjonalnymi; odpowiadające im pliki są instalowane tylko po wybraniu komponentu.
Version 3.18.2
Zmieniono
- Dema Delphi i C++Builder EditFormField teraz czyszczą /NeedAppearances przed aktualizacją wartości pól, dzięki czemu każde edytowane pole tekstowe otrzymuje odświeżony normalny strumień wyglądu w zapisanym PDF.
- Dzięki temu zapisany strumień /AP pozostaje zsynchronizowany z przechowywaną wartością /V i unika różnic zależnych od przeglądarki, w których ustawienie fokusu na polu ujawnia tekst brakujący w statycznym wyglądzie pola.
Version 3.18.1
Zmieniono
- Zgodność wersji PDF podczas zapisu i ładowania teraz rozpoznaje także flagi formularzowego pola /Ff na poziomie bitów oraz bit AcroForm /SigFlags AppendOnly: /Ff bit 21 (FileSelect, mask 1048576) -> PDF 1.4 /Ff bit 22 (MultiSelect, mask 2097152) -> PDF 1.4 /Ff bit 23 (DoNotSpellCheck, mask 4194304) -> PDF 1.4 /Ff bit 24 (DoNotScroll, mask 8388608) -> PDF 1.4 /Ff bit 25 (Comb, mask 16777216) -> PDF 1.5 /Ff bit 26 (RichText / RadiosInUnison, 33554432) -> PDF 1.5 /Ff bit 27 (CommitOnSelChange, mask 67108864) -> PDF 1.5 /SigFlags bit 2 (AppendOnly, mask 2) -> PDF 1.5
- Dziedziczenie /Parent nie jest śledzone: tylko słowniki, które jawnie zawierają /Ff lub /SigFlags, uruchamiają reguły.
- Tabela PDFFeatureRules zawiera teraz 95 reguł (87 + 8 nowych na poziomie bitów).
- Walidacja: zestawy Delphi Win32 i Win64 DUnitX przeszły po 191/191 każdy, a C++Builder Win64x GoogleTest przeszedł 57/57.
Version 3.18.0
Zmieniono
- Zgodność wersji PDF podczas zapisu i ładowania teraz rozpoznaje także dziewięć kolejnych funkcji na poziomie podkluczy i bitów: flagi adnotacji na poziomie bitów (/F mask): Locked (128) -> PDF 1.4 ToggleNoView (256) -> PDF 1.5 LockedContents (512) -> PDF 1.7 wyróżniające podklucze katalogu i strony: /BoxColorInfo (page) -> PDF 1.4 /Permissions, /Legal, /PresSteps -> PDF 1.5 /VP (page geospatial viewport) -> PDF 1.6 /Collection (catalog portable collection) -> PDF 1.7
- Tabela PDFFeatureRules zawiera teraz 87 reguł (78 na poziomie rozdziałów + 9 na poziomie podkluczy / bitów).
- Walidacja: zestawy Delphi Win32 i Win64 DUnitX przeszły po 189/189 każdy, a C++Builder Win64x GoogleTest przeszedł 57/57.
Version 3.17.0
Zmieniono
- Osiem kolejnych punktów wejścia writera PDFlib teraz przechodzi przez Phase 3 EnsureMinVersion, dzięki czemu wersja dokumentu automatycznie podnosi się do minimum wymaganego przez emitowaną funkcję: AddLinkToJavaScript, SetOpenActionJavaScript, AddGlobalJavaScript, FormFieldJavaScriptAction (PDF 1.3 - JavaScript actions) AddEmbeddedFile, AddFileAttachment (PDF 1.3 - file attachments) SetXFAFromString (PDF 1.5 - XFA forms) AddSWFAnnotationFromFile (PDF 1.7 - RichMedia annotation)
- W połączeniu z zestawem v3.15.0 (SetTransparency, SetPageUserUnit, Encrypt, SetPageLayout) PDFlib obejmuje teraz trzynaście wysokowersyjnych punktów wejścia writera od początku do końca.
- Walidacja: zestawy Delphi Win32 i Win64 DUnitX przeszły po 187/187 każdy, a C++Builder Win64x GoogleTest przeszedł 57/57.
Version 3.16.3
Dodano
- Nowe API PDFlib: LockSaveVersion(Version) przypina dokument do Version i powstrzymuje Phase 3 writer-side EnsureMinVersion przed automatycznym podniesieniem powyżej niej. UnlockSaveVersion czyści blokadę.
Zmieniono
- Brama podczas zapisu pozostaje bez zmian: funkcje emitowane przez writera powyżej zablokowanej wersji nadal generują LastErrorCode 602 podczas zapisu, zamiast po cichu podnosić nagłówek.
- Walidacja: zestawy Delphi Win32 i Win64 DUnitX przeszły po 184/184 każdy, a C++Builder Win64x GoogleTest przeszedł 57/57.
Version 3.16.2
Zmieniono
- Załadowane pliki PDF udostępniają teraz widok tylko funkcji wnoszących wkład do wykrywania funkcji podczas ładowania przez GetInformation(103) ("ContributorFeatures"). Lista zawiera tylko funkcje, których minimalna wymagana wersja jest ściśle większa niż HeaderVersion (key 100), więc bezpośrednio odpowiada na pytanie "why is the effective version higher than the file header?".
- GetInformation(101) ("DetectedFeatures") pozostaje bez zmian i nadal wymienia każdą dopasowaną funkcję niezależnie od wkładu.
- Walidacja: zestawy Delphi Win32 i Win64 DUnitX przeszły po 181/181 każdy, a C++Builder Win64x GoogleTest przeszedł 57/57.
Version 3.16.1
Dodano
- Rozszerzono pokrycie testów wykrywania po stronie loadera o sześć dodatkowych syntetycznych fixture: przezroczystość ExtGState na stronie (bez podniesienia wersji), Catalog /MarkInfo (PDF 1.3 -> PDF 1.4), /OCProperties + zawartość OCG (PDF 1.4 -> PDF 1.5), /Type /3DStream (PDF 1.5 -> PDF 1.6), fixture łączący wiele funkcji oraz sprawdzenie stabilności snapshotu.
Zmieniono
- Walidacja: zestawy Delphi Win32 i Win64 DUnitX przeszły po 179/179 każdy, a C++Builder Win64x GoogleTest przeszedł 57/57.
Version 3.16.0
Dodano
- Nowe klucze GetInformation: 100 zwraca HeaderVersion (literalne %PDF-X.Y), 101 zwraca DetectedFeatures (funkcje dopasowane podczas ładowania, rozdzielane CRLF), 102 zwraca AutoBumpedFeatures (funkcje rozdzielane CRLF, które wyzwoliły writer-side EnsureMinVersion).
Zmieniono
- Załadowane dokumenty PDF przechodzą teraz przez przebieg wykrywania wersji sterowany zawartością: każdy obiekt pośredni jest przechodzony przez tabelę funkcji do minimalnej wersji używaną przez bramę zapisu, a FVersion jest podnoszona powyżej literalnej wartości nagłówka %PDF-X.Y, gdy zawartość faktycznie wymaga wyższej wersji. Na przykład wpis strony /UserUnit podnosi wersję efektywną do PDF 1.6, nawet gdy nagłówek pliku wskazuje PDF 1.4.
- Brama podczas zapisu pozostaje bez zmian: dokumenty, których wersja efektywna została podniesiona przy ładowaniu, a następnie jawnie obniżona za pomocą SetInformation(0, ...), nadal generują LastErrorCode 602 podczas zapisu.
- Walidacja: zestawy Delphi Win32 i Win64 DUnitX przeszły po 173/173 każdy, a C++Builder Win64x GoogleTest przeszedł 57/57.
Version 3.15.0
Zmieniono
- Punkty wejścia writera, które tworzą funkcje wymagające określonej minimalnej wersji PDF, teraz automatycznie podnoszą wersję PDF dokumentu. Wywołanie SetTransparency na dokumencie oznaczonym jako PDF 1.3 teraz awansuje nagłówek do PDF 1.4 zamiast kończyć zapis niepowodzeniem z LastErrorCode 602.
- To samo automatyczne podniesienie podłączono do SetPageUserUnit (>=1.6), Encrypt z Strength 1/2/3/4 (>=1.4/1.6/1.7/1.7 odpowiednio) oraz dwustronicznych wariantów SetPageLayout (>=1.5).
- Zmiana zachowania względem 3.14.x: aplikacje, które wcześniej polegały na bramie v3.12.6 "save target rejects writer-emitted features", teraz kończą się powodzeniem w podniesionej wersji. Załadowane pliki PDF, które już zawierają funkcje wyższej wersji, nadal przechodzą przez istniejącą bramę zapisu, więc załadowanie tagowanego PDF i wybranie PDF 1.3 nadal kończy się niepowodzeniem z LastErrorCode 602.
- Walidacja: zestawy Delphi Win32 i Win64 DUnitX przeszły po 170/170 każdy, a C++Builder Win64x GoogleTest przeszedł 57/57.
Version 3.14.3
Zmieniono
- Zgodność wersji PDF podczas zapisu teraz rozpoznaje także pozostałe typy słowników 3D PDF 1.6 (/Type /3DStream /3DRef /3DBackground /3DRenderMode /3DLightingScheme /3DCrossSection /3DNode) oraz podtypy adnotacji PDF 1.7 Redact, RichMedia i Projection, wraz z towarzyszącymi słownikami /Type /Requirement i /ReqHandler.
- Walidacja: zestawy Delphi Win32 i Win64 DUnitX przeszły po 168/168 każdy, a C++Builder Win64x GoogleTest przeszedł 57/57.
Version 3.14.2
Zmieniono
- Zgodność wersji PDF podczas zapisu teraz rozpoznaje także funkcje PDF 1.5: formularze /XFA, /AlternatePresentations, drzewo nazw /Renditions, słowniki multimedialne /Type /Rendition /MediaCriteria /MediaPermissions /MediaPlayers oraz podtyp adnotacji Screen.
- Zapis jako PDF 1.4 teraz odrzuca dokumenty zawierające te funkcje z LastErrorCode 602.
- Walidacja: zestawy Delphi Win32 i Win64 DUnitX przeszły po 166/166 każdy, a C++Builder Win64x GoogleTest przeszedł 57/57.
Version 3.14.1
Zmieniono
- Zgodność wersji PDF podczas zapisu teraz rozpoznaje także funkcje PDF 1.4: tagowany-PDF /StructTreeRoot /MarkInfo i słowniki StructElem, wpisy dokumentu /Lang i strony /Tabs, słowniki /OutputIntents i /OutputIntent, podpis uprawnień użycia /UR3 oraz podtypy adnotacji PDF 1.4 Polygon, PolyLine, Caret, Ink, Popup i Watermark.
- Zapis jako PDF 1.3 teraz odrzuca dokumenty zawierające te funkcje z LastErrorCode 602.
- Walidacja: zestawy Delphi Win32 i Win64 DUnitX przeszly po 165/165 testow kazdy, a C++Builder Win64x GoogleTest przeszedl 57/57.
Version 3.14.0
Zmieniono
- Zgodnosc wersji PDF podczas zapisu rozpoznaje teraz takze funkcje PDF 1.3, takie jak gladkie cieniowanie, obiekty funkcji, przestrzenie kolorow ICCBased i DeviceN, wpisy stron /TrimBox /BleedBox /ArtBox, /ToUnicode CMaps, zalaczniki plikow oraz adnotacje /Sound i /Movie, slowniki /Type /Filespec i /Type /EmbeddedFile, klucze /Group /EF /Alternates /Mask oraz akcje JavaScript.
- Wywolania PDF 1.2 sa teraz zapisywane zgodnie z kontraktem PDF 1.3: literalny naglowek %PDF-1.2 jest zachowywany, ale bramka akceptuje funkcje PDF 1.3. Funkcje PDF 1.4 i pozniejsze nadal sa odrzucane z LastErrorCode 602.
- Walidacja: zestawy Delphi Win32 i Win64 DUnitX przeszly po 162/162 testy kazdy, a C++Builder Win64x GoogleTest przeszedl 57/57.
Version 3.13.0
Zmieniono
- Przebudowano bramke zgodnosci wersji PDF, ktora odrzuca funkcje z pozniejszych wersji podczas zapisu, przenoszac ja do dedykowanego modulu, aby zestaw regul mogl rosnac bez czestych zmian w rdzeniu dokumentu.
- Brak zmiany zachowania widocznej dla uzytkownika wzgledem v3.12.7: te same funkcje spoza wersji sa nadal odrzucane z LastErrorCode 602.
- Walidacja: zestawy Delphi Win32 i Win64 DUnitX przeszly po 155/155 testow kazdy, a C++Builder Win64x GoogleTest przeszedl 57/57.
Version 3.12.7
Dodano
- Rozszerzono automatyczne pokrycie testami dla przeplywu pracy renderowania z bezposrednim dostepem PdfToImage w zestawach Delphi DUnitX i C++Builder GoogleTest.
Zmieniono
- Graficzny runner testow Delphi VCL rejestruje teraz zestawy Syntax i XRef, odpowiadajac pokryciu runnera konsolowego.
- Walidacja: zestawy Delphi Win32 i Win64 DUnitX przeszly po 147/147 testow kazdy, a C++Builder Win64x GoogleTest przeszedl 57/57.
Version 3.12.6
Zmieniono
- Zapisywanie jako PDF 1.3, 1.4, 1.5, 1.6 lub 1.7 wymusza teraz wybrana wersje jako kontrakt wyjscia pelnego zapisu.
- Pelne zapisy usuwaja nadpisania /Version w katalogu, usuwaja nieobslugiwane wpisy rozszerzen katalogu i metadanych dla nizszych celow oraz pomijaja strumienie metadanych XMP z PDF 1.4 podczas zapisu jako PDF 1.3.
- SaveToFile, SaveToString i SaveToStream koncza sie teraz niepowodzeniem z LastErrorCode 602, gdy wybrana docelowa wersja PDF jest nizsza niz funkcje nadal obecne w dokumencie, takie jak przezroczystosc, zawartosc opcjonalna, JPX, UserUnit, 3D lub funkcje AES crypt-filter.
Version 3.12.5
Dodano
- Dodano pokrycie regresyjne dla nieznanych sekwencji ucieczki w lancuchach literalnych oraz mieszanych sekwencji ucieczki osemkowych/nieosemkowych.
Zmieniono
- Ulepszono parsowanie lancuchow literalnych PDF 1.7, aby nieznane sekwencje ucieczki ignorowaly odwrotny ukosnik zgodnie ze standardem.
- Osemkowe sekwencje ucieczki w lancuchach literalnych zuzywaja teraz tylko cyfry osemkowe i zachowuja nastepujaca po nich cyfre nieosemkowa jako zwykle dane lancucha.
- Walidacja: zestawy Delphi Win32 i Win64 DUnitX przeszly po 141/141 testow kazdy.
Version 3.12.4
Dodano
- Dodano pokrycie regresyjne dla ogranicznikow nazw w postaci prawego nawiasu klamrowego oraz rzadkich wpisow obiektow skompresowanych w strumieniu xref.
Zmieniono
- Ulepszono parsowanie leksykalne PDF 1.7, dzieki czemu obiekty nazw zatrzymuja sie teraz poprawnie na ograniczniku prawego nawiasu klamrowego.
- Walidacja: zestawy Delphi Win32 i Win64 DUnitX przeszly po 139/139 testow kazdy.
Naprawiono
- Naprawiono ladowanie SmartAccess dla wpisow obiektow skompresowanych w strumieniu xref, ktorych numer strumienia obiektow jest wiekszy niz dlugosc PDF w bajtach.
Version 3.12.3
Dodano
- Nowe zaszyfrowane pliki PDF AES zapisuja teraz wartosci Length filtrów szyfrowania jako dlugosci w bitach, zgodnie z kontraktem slownika filtra szyfrowania PDF 1.7.
Zmieniono
- Ulepszono zgodnosc zaszyfrowanych dokumentow PDF 1.7 dla plikow standardowego mechanizmu zabezpieczen, ktore uzywaja StrF, StmF, EFF, Identity, None lub nazwanych filtrow szyfrowania w stylu StdCF.
- Strumienie metadanych respektuja teraz EncryptMetadata=false podczas przeplywow odszyfrowywania, szyfrowania i kopiowania/zapisu, zamiast byc przetwarzane jak zwykle strumienie.
- Strumienie osadzonych plikow zawieraja teraz /Type /EmbeddedFile i uzywaja sciezki decyzyjnej filtra szyfrowania osadzonych plikow, gdy zaszyfrowane dokumenty sa ladowane lub zapisywane.
- Zewnetrzne strumienie osadzonych plikow promuja teraz FDecodeParms do DecodeParms, gdy FFilter jest promowany do Filter, zachowujac parametry dekodowania strumienia.
- Wartosci Prev/XRefStm strumienia XRef oraz duze przesuniecia numeryczne zachowuja teraz 64-bitowa precyzje w sciezkach parsera i SmartAccess.
- Walidacja: zestawy Delphi Win32 i Win64 DUnitX przeszly po 137/137 testow kazdy.
Version 3.12.2
Zmieniono
- Ulepszono zgodnosc dekodowania strumieni PDF 1.7. Ogolne dekodowanie strumieni respektuje teraz /DP jako alias DecodeParms, rozwiazuje posrednie wpisy tablic parametrow dekodowania i akceptuje standardowe skroty filtrow /AHx i /LZW.
- Wyjscie PDF dla duzych plikow zapisuje teraz przesuniecia xref, startxref, linearyzacji i ByteRange podpisu cyfrowego przez sciezki formatowania 64-bitowego, zamiast zawezac te wartosci przez 32-bitowe pomocniki calkowitoliczbowe.
- Zaladowane dokumenty traktuja teraz wpis /Version katalogu jako efektywna wersje PDF, gdy jest nowszy niz wersja w naglowku pliku.
- Walidacja: zestawy Delphi Win32 i Win64 DUnitX przeszly po 134/134 testy kazdy.
Naprawiono
- Przepisane trailery xref-stream nie zachowuja juz kluczy DecodeParms przeznaczonych tylko dla strumieni, gdy PDFlibPas zapisuje je jako klasyczne slowniki trailera.
Version 3.12.1
Zmieniono
- Wygenerowane pliki PDF otwieraja sie teraz z pierwsza strona dopasowana do dostepnej wysokosci okna przegladarki's, dzieki czemu cala pierwsza strona jest widoczna od gory do dolu przy najwiekszym powiekszeniu mieszczacym sie w oknie. Skonfiguruj niestandardowe OpenAction (SetOpenActionDestination, SetOpenActionMenu, SetOpenActionJavaScript) w dokumencie, aby zastapic to domyslne ustawienie.
Version 3.12.0
Dodano
- Dodano 32-bajtowo wyrownane atrapy CRT malloc/calloc/realloc/free dla statycznych bibliotek C i naprawiono TPDFJPEGImage.Compress, aby zwalnial bufory jpeg_mem_dest przez te sama sciezke C free, ktora je przydzielila.
- Rozszerzono publiczne notatki walidacyjne, aby wskazac scisle automatyczne pokrycie stojace za tym wydaniem: kompilacje biblioteki, rundy kompresji, wyjscie HelloWorld /FlateDecode, renderowanie JPEG, przeplywy pracy obrazow, czcionki, formularze, zabezpieczenia, podpisywanie, drukowanie oraz przeplywy pracy wywiedzione z dem C++Builder.
Zmieniono
- Statyczne backendy Windows zawieraja teraz obiekty libjpeg-turbo NASM SIMD dla Win32 i Win64 oraz obiekty dyspozycji zlib-ng x86 SIMD dla zestawu Win64x zlib-ng.
- Przerobiono skrypty przebudowy zlib-ng, aby kompilacje Win64x bcc64x i diagnostyczne kompilacje MSVC kompilowaly ogolne pliki zrodlowe oraz pliki SSE2, SSSE3, SSE4.1/SSE4.2, PCLMULQDQ i AVX2 z flagami funkcji dla poszczegolnych plikow, zamiast polegac na jednym globalnym przelaczniku kompilatora.
Version 3.11.0
Dodano
- Dodano maly obiekt mostka zlib-ng dla kompilacji Win64, aby kod Pascal zachowal stabilne punkty wejscia zgodne z zlib, podczas gdy Delphi i C++Builder uzywaja wlasnych zestawow obiektow zgodnych z linkerem.
Zmieniono
- Przelaczono kompresje i dekompresje Windows Flate na zlib-ng w trybie zgodnym z zlib. Win32, Delphi Win64 i C++Builder Win64x lacza teraz dopasowane ABI zestawy statycznych obiektow zlib-ng z Lib\thirdparty\Win32, Lib\thirdparty\Win64 i Lib\thirdparty\Win64x.
- Zaktualizowano wszystkie projekty demo C++Builder, aby definiowaly PDFLIB_CPPBUILDER, zgodnie z runnerem GoogleTest i aby zapobiec linkowaniu przez dema Win64x obiektow zlib-ng Delphi Win64.
Naprawiono
- Sciezka Win64 nie przechodzi juz przez jednostke Delphi's System.ZLib, wiec kompresja/dekompresja strumieni PDF moze korzystac z backendu zlib-ng tak samo jak kompilacja 32-bitowa.
Version 3.10.3
Dodano
- Rozszerzono zestaw C++Builder GoogleTest tak, aby obejmowal kazde demo w Demo\C++Builder. Uklad fazy 1 z 7 zestawami urosl do 15 zestawow / 52 przypadkow GoogleTest, wszystkie przechodza na Win64x. Nowo objete dema: AddFormattedTitle, AddTextImage, AddTrueTypeSubsettedFont, AddWebLink, CanvasText, CaptureToNewSize, CopyPageRanges, CreateWithImage, CreateWithImageToStream, DoInTheStream, DrawWrappedText, EditFormField, EmbeddedFonts, ExtractAnnotAttach, ExtractEmbeddedFonts, ExtractImage, ImageToPdf, ImportEMF, MultiFunction (przelacznik renderera), PageOperations, PdfDecrypt, PdfPermission, PrintPDF, TextMeasure, TextPaging.
Version 3.10.2
Dodano
- Dodano runner C++Builder GoogleTest w Tests\C++Builder, ktory testuje Lib\PDFlibrary.pas przez te same naglowki HPP wygenerowane przez {$JPHNE}, ktorych uzywaja dema C++Builder. Pierwsza faza odzwierciedla siedem podstawowych scenariuszy Delphi (HelloWorld, DrawShapes, CreateTable, PdfEncrypt, ExtractText, PdfSigning, renderowanie PdfToImage) jako 17 przypadkow GoogleTest, wszystkie przechodza na Win64x.
- Rozszerzono zestaw Delphi DUnitX o Tests.Print obejmujacy dema PrintPDF i ShowPrinterBins (enumeracja domyslnej drukarki, konfiguracja drukarki niestandardowej, opcje drukowania, zadanie drukowania z przekierowaniem do pliku) oraz test przelacznika renderera w Tests.Render sprawdzajacy wybor silnika GDI+ / PDFium / Cairo w demie MultiFunction's na tym samym zrodlowym PDF.
Version 3.10.1
Dodano
- Dodano 57 nazwanych rozmiarów stron do SetPageSize, dzięki czemu te same kanoniczne nazwy rozmiarów stron działają również tutaj: SIZE8X11, QUADA0, DOUBA0, B0PLUS, ENVB4/B5/C6/DL/MONARCH, ENV9/10/11, ANSIA/B/C/D/E, ARCHA/B/C/D/E1/E, SHIROKU, G1K, USBC/EUBC/ASBC, ID1/ID2/ID3, ONEINCH/TWOINCH/L2INCH/USVISA, P2R..P24R / S8R / P4D photo prints, plus the Chinese / Taiwanese octavo and sextodecimo sheet formats LARGE/STANDARD/CROWN/ROC 8K and the matching 16K halves.
Version 3.10.0
Dodano
- Dodano natywne wersje C++Builder dla każdego przykładu Delphi w Demo. Dema tworzenia PDF, manipulowania stronami, czcionek, obrazów, zabezpieczeń, podpisywania, renderowania i drukowania można teraz budować i uruchamiać z C++Builder bez żadnej nakładki po stronie Delphi.
- Dodano krótki angielski plik Readme.txt do każdego folderu demo Delphi, opisujący, co pokazuje demo, na którym API się koncentruje i jak je uruchomić; przegląd HTML w Demo\Delphi\index.html zawiera linki do wszystkich dem pogrupowanych tematycznie.
Zmieniono
- Każde nowe demo znajduje się w Demo\C++Builder\<Name>\ jako projekt konsolowy, który bezpośrednio używa Lib\PDFlibrary.pas i zawiera pliki wejściowe potrzebne do uruchomienia.
- Odzwierciedlono ten sam Readme.txt dla każdego demo C++Builder, z sekcją Run przeredagowaną dla przepływu pracy konsoli (argumenty argv zamiast Open/SaveDialogs); odpowiadający Demo\C++Builder\index.html wymienia każde demo C++Builder w tych samych grupach tematycznych.
Naprawiono
- Naprawiono wyciek pamięci w demie ImportEMF (instancja TPDFlib była tworzona, ale nigdy nie zwalniana).
Version 3.9.14
Zmieniono
- Uporządkowano dema zawijania tekstu i paginacji HTML, tak aby każde skupiało się na własnym API i uruchamiało się z jednego przycisku.
- Zmieniono nazwy dwóch projektów demo (EmbeddedFonts i PdfPermission), aby skompilowane pliki wykonywalne odpowiadały nazwom folderów zamiast starszym nazwom prototypowym.
Naprawiono
- Naprawiono demo kopiowania zakresu stron, tak aby faktycznie kopiowało strony, zamiast zawsze zgłaszać niepowodzenie.
Version 3.9.13
Dodano
- Wprowadzono zautomatyzowany zestaw testów DUnitX (uruchamiacze konsolowe i VCL GUI) obejmujący jednostki narzędziowe — bufor, AES, ZLib, Unicode i haszowanie skrótów — oraz przepływy pracy na poziomie biblioteki, w tym tworzenie dokumentów, zapis do pliku i zapis do strumienia, rundy ładowania i zapisu oraz szyfrowanie AES-128/AES-256.
Naprawiono
- Naprawiono błąd pozycji strumienia w wewnętrznym czytniku bufora: odczyty dwubajtowych słów przesuwały kursor odczytu o cztery bajty zamiast o dwa. W buforach dłuższych niż dwa bajty kolejne odczyty trafiały pod niewłaściwy offset i po cichu zwracały nieprawidłowe dane. Efekt był najbardziej widoczny podczas parsowania binarnych struktur danych przeplatających odczyty bajtów i słów.
Version 3.9.12
Zmieniono
- Renderowanie obrazów GDI+ domyślnie używa teraz gładkiej, wysokiej jakości interpolacji bikubicznej przy skalowaniu obrazów rastrowych do rozdzielczości ekranu lub eksportu. Wcześniej domyślne było najbliższe sąsiedztwo, co powodowało widoczne schodkowe artefakty na małych obrazach (logo, miniatury) powiększanych do podglądu ekranowego lub eksportu high-DPI. Wywołujący, którzy wolą ostrzejszy tryb najbliższego sąsiedztwa, mogą przywrócić stare zachowanie przez SetGDIPlusOptions.
Version 3.9.11
Naprawiono
- Naprawiono renderowanie Cairo obrazów PDF używających przezroczystości klucza koloru (tablica zakresu kolorów /Mask w słowniku obrazu). Wcześniej, gdy strona zawierała obraz z taką formą przezroczystości, renderer Cairo całkowicie pomijał obraz zamiast komponować go na tle strony. Poprawka wyprowadza kanał alfa dla każdego piksela z zadeklarowanych zakresów klucza koloru i renderuje wynik jako obraz przezroczysty, dając wynik wizualnie zgodny z rendererem GDI+.
Version 3.9.10
Naprawiono
- Naprawiono regresję renderowania Cairo, w której cała zawartość strony następująca po sekwencji przyciętego obrazu była błędnie ograniczana do prostokąta przycinania obrazu's. Strony PDF, które zapisują stan graficzny, stosują ścieżkę przycinania, malują obraz, a następnie przywracają stan — powszechna technika układu dla obrazów w ramkach lub z obramowaniem — renderowały cały późniejszy tekst, kształty i grafikę tylko wewnątrz przyciętego regionu. Zapisywanie i przywracanie stanu Cairo jest teraz poprawnie mapowane na operatory PDF q/Q, więc region przycinania jest odrzucany po narysowaniu obrazu.
Version 3.9.9
Dodano
- Dodano silnik renderowania PDF oparty na Cairo jako trzecią opcję renderowania obok GDI+ i PDFium. Wywołaj SelectRenderer(2) przed renderowaniem, aby go aktywować; silnik wymaga cairo.dll z dołączonego folderu DLL\Cairo. Renderowanie Cairo obsługuje te same tryby wyjścia co GDI+: eksport do pliku i strumienia bitmapy (BMP, JPEG, PNG, GIF, TIFF, G4 TIFF), renderowanie do kontekstu urządzenia oraz bezpośrednie wyjście na drukarkę.
Zmieniono
- Demo MultiFunction View/Print udostępnia teraz trójstanowy selektor renderera, dzięki czemu użytkownicy mogą porównywać wyniki GDI+, PDFium i Cairo obok siebie na tym samym dokumencie bez żadnych zmian w kodzie.
Version 3.9.8
Naprawiono
- Wyciszono dwie fałszywe diagnostyki kompilatora w nakładce Win32 C-runtime, które pojawiały się w RAD Studio 13.1 i nowszych. Ostrzeżenie o wycofaniu (W1000) było zgłaszane, ponieważ osłona możliwości wersji kompilatora nie była propagowana do kompilatorów nowszych niż Delphi 2009, przez co kompilowały one względem wycofanego API menedżera pamięci. Wskazówka o nieużywanej zmiennej (H2164) była zgłaszana dla wewnętrznej zmiennej zgodności potrzebnej tylko dla kompilacji Delphi 7; jest ona teraz ograniczona do bloku warunkowego tej wersji's. Oba problemy dotyczyły wyłącznie diagnostyki i nie miały wpływu na działanie w czasie wykonywania.
Version 3.9.7
Dodano
- Dodano opcjonalne renderowanie stron oparte na PDFium w Windows, w tym renderowanie strumienia BMP, renderowanie do kontekstu urządzenia, renderowanie w pamięci i wyjście na drukarkę.
Zmieniono
- Zaktualizowano demo Delphi MultiFunction View/Print o selektor renderera, dzięki któremu użytkownicy mogą przełączać się między istniejącym rendererem GDI+ i PDFium.
Version 3.9.6
Dodano
- Dodano oddzielne skrypty Inno Setup dla pełnego pakietu PDFlibPas i pakietu próbnego, z wyłączeniami ukierunkowanymi na wydanie dla metadanych kontroli źródeł, wyników budowania, pamięci podręcznych IDE, lokalnych plików agentów oraz dołączonych drzew źródeł firm trzecich, które nie są częścią wysyłanego pakietu.
Zmieniono
- Instalator próbny buduje i pakuje teraz próbne biblioteki binarne dla RAD Studio 11.3, 12.3 i 13.1 oraz próbne dema Delphi, zanim zostanie wygenerowany plik wykonywalny instalatora.
Version 3.9.5
Naprawiono
- Naprawiono kompilacje biblioteki Win32 pod RAD Studio 9.0 / Delphi XE2. Skrypt budowania przekazywał flagę katalogu wyjściowego DCU, która istnieje dopiero od Delphi 2010; kompilator XE2's interpretował tę flagę inaczej, tworząc zniekształconą ścieżkę wyjściową i błąd krytyczny, zanim przetworzono jakikolwiek plik źródłowy. Skrypt teraz automatycznie wybiera odpowiednią flagę na podstawie docelowej wersji kompilatora.
- Poprawiono powiązaną osłonę wersji kompilatora w źródle biblioteki, która wywoływała kwalifikowaną nazwą funkcję środowiska wykonawczego wprowadzoną w XE4 pod warunkiem XE2+. Kompilacje docelowe dla XE2 i XE3 rozwiązują teraz właściwy import zgodności.
Version 3.9.4
Naprawiono
- Naprawiono konfigurację drukarki dla drukarek sieciowych i współdzielonych przez serwer, stosując podajnik papieru, nośnik, dupleks, jakość i inne ustawienia druku przez uchwyt DEVMODE drukarki zamiast uchwytu kontekstu urządzenia drukarki.
Version 3.9.3
Zmieniono
- Odświeżono dołączony backend AES do źródeł AES Briana Gladmana's z 2018 roku zarówno na Win32, jak i Win64. Powtarzalne skrypty budowania pozwalają teraz w dowolnym momencie odbudować statyczne obiekty AES ze źródeł. W trakcie procesu wykryto i naprawiono defekt ABI w wiązaniach Pascal: funkcjom szyfrowania i deszyfrowania AES-CBC brakowało deklaracji konwencji wywołań C, więc kompilacje Win32 po cichu przekazywały argumenty w niewłaściwej kolejności rejestrów, potencjalnie tworząc nieprawidłowe zaszyfrowane wyjście. Kompilacje Win64 nie były dotknięte, ponieważ platforma wymusza jednolitą konwencję wywołań.
Bezpieczeństwo
- Wzmocniono skrypty odbudowy firm trzecich, aby skrypty zlib, JPEG i CRT-stub oparte na MSVC można było uruchamiać zarówno z katalogu głównego repozytorium, jak i z katalogu thirdparty; wcześniej wymagały ustawienia katalogu roboczego na folder thirdparty.
Version 3.9.2
Naprawiono
- Zaktualizowano backend JPEG 2000 ze starszego OpenJPEG 1.5 do OpenJPEG 2.5.4 zarówno na Win32, jak i Win64. Obie platformy używają teraz statycznego linkowania obiektów, więc kodowanie i dekodowanie JPEG 2000 działa bez dodatkowej biblioteki DLL w czasie wykonywania. Nowoczesny kodek wnosi aktualną obsługę nagłówków JP2/J2K, API strumieniowe sterowane callbackami oraz skumulowane poprawki błędów i bezpieczeństwa z projektu upstream. Publiczne API TJpeg2000Bitmap pozostaje bez zmian.
Version 3.9.1
Naprawiono
- Naprawiono renderowanie stron JPEG i eksport obrazów po aktualizacji libjpeg-turbo, przywracając konwersję PdfToImage JPG oraz wyjście TPDFJPEGImage.SaveToStream na Win32 i Win64.
- Poprawiono wiązania ABI Win32 libjpeg-turbo, tak aby callbacki, wyrównanie struktur, pola boolean i miejsca docelowe JPEG oparte na pamięci odpowiadały libjpeg-turbo 3.1.90.
- Naprawiono dekompresję strumienia Win32 FlateDecode z dołączonym backendem zlib 1.3.2, przywracając ładowanie strumieni xref PDF dla plików takich jak przykładowy dokument PdfToImage.
Version 3.9.0
Zmieniono
- Zaktualizowano dołączony backend JPEG 2000 ze starszego OpenJPEG 1.5 do OpenJPEG 2.5.4. Ładowanie i zapisywanie JPEG 2000 używa teraz nowoczesnego kodeka, API strumieniowego sterowanego callbackami i aktualnej obsługi nagłówków JP2/J2K, zachowując publiczne API TJpeg2000Bitmap.
Naprawiono
- Wyjście JPEG 2000 automatycznie wybiera teraz prawidłową liczbę rozdzielczości OpenJPEG dla małych obrazów, a statyczny backend Win32 nie zależy już od brakujących eksportów pomocniczych MSVCRT.
Version 3.8.1
Naprawiono
- Wyeliminowano wszystkie 16 kosmetycznych ostrzeżeń linkera W1028 "Bad global symbol definition" na Win32 i Win64. Zmiany nazw na poziomie źródeł usuwają nadmiarowe duplikaty po stronie Pascal (jpeg_std_error i stuby alokatora jmemnobs są teraz rozwiązywane wyłącznie z warstwy obj); trzy pozostałe symbole obj bcc32 / vc64 (jpeg_natural_order, jpeg_aritab, jpeg_nbits_table), które muszą pozostać rozwiązywane przez linker względem danych po stronie Pascal, mają teraz usunięte nazwy symboli COFF przez przebieg postprocessingu ObjConv podczas thirdparty\build-jpeg-vc64.bat. Brak zmiany publicznego API; czyste wyjście linkera dla kompilacji Delphi Win32 i Win64.
Version 3.8.0
Bezpieczeństwo
- Kodek JPEG Win64 zaktualizowano z libjpeg w stylu IJG do libjpeg-turbo 3.1.90, kończąc migrację JPEG rozpoczętą w v3.7.0 (Win32). Ścieżki Win32 i Win64 współdzielą teraz ten sam nowoczesny kodek JPEG, z tymi samymi wewnętrznymi pętlami zoptymalizowanymi pod SIMD i ponad 30 skumulowanymi poprawkami CVE / fuzz z upstream. Publiczne API PDFlibPas pozostaje bez zmian.
Version 3.7.0
Bezpieczeństwo
- Kodek JPEG Win32 zaktualizowano z IJG libjpeg-6b do libjpeg-turbo 3.1.90. Znacznie szybsze kodowanie/dekodowanie JPEG dzięki wewnętrznym pętlom zoptymalizowanym pod SIMD oraz ponad 30 poprawkom CVE / fuzz zgromadzonym w upstream libjpeg-turbo. Publiczne API PDFlibPas (klasa TPDFJPEGImage, funkcje DumpJPEG) pozostaje bez zmian; istniejące ścieżki kodu PDF/JPEG działają szybciej bez wymagania zmian w źródłach.
Version 3.6.0
Zmieniono
- Ścieżka Win64 zlib pozostaje bez zmian w tym wydaniu - nadal używa jednostki System.ZLib dołączonej do Delphi.
- Aktywowano nakładkę CRT PDFlibCLibs.pas linkowaną w czasie linkowania dla Win64 (wprowadzoną w v3.5.0) dla ścieżki Win32 zlib, dostarczając symbole memcpy / memset / malloc / free, do których odwołują się nowe pliki obj zlib 1.3.2.
Bezpieczeństwo
- Win32 zlib zaktualizowano z 1.2.x do 1.3.2. Obejmuje standardowe ponad 25 poprawek CVE / fuzz zgromadzonych upstream od 1.2.8 oraz nowe punkty wejścia inflateBack9 / inflateTree9 używane przez strumienie z 64-bitowym oknem. Publiczne API PDFlibPas (DeflateStr / InflateStr / InflateStrParms) pozostaje bez zmian.
Version 3.5.0
Dodano
- Dodano infrastrukturę budowania dla OpenJPEG 2.5.4. Samo drzewo źródeł OpenJPEG jest pobierane niezależnie przez użytkownika (git clone uclouvain/openjpeg do Lib/thirdparty/OpenJPEG/), dzięki czemu można je aktualizować bez dotykania konfiguracji budowania PDFlibPas's.
- Dodano Lib/PDFlibCLibs.pas, shim CRT czasu linkowania Win64 używany przez backend Win64. Wypełnia on lukę między plikami obj C skompilowanymi przez MSVC a linkerami Win64 Delphi (dcc64 / Win64x ld.lld / BCB ilink64), które nie dołączają automatycznie msvcrt.dll.
Zmieniono
- Dodano do repozytorium świeżą infrastrukturę budowania dla dołączonych bibliotek C obrazów / kompresji: zlib 1.3.2, libjpeg-turbo 3.1.90, libtiff 4.7.1. Skrypty budowania dla Embarcadero bcc32 (Win32) i MSVC cl.exe (Win64) znajdują się w Lib/thirdparty/ obok drzew źródeł, dzięki czemu każdy z RAD Studio + VS2022 może odbudować statyczne pliki obj z czystego źródła.
Version 3.4.0
Bezpieczeństwo
- Wzmocniono generowanie klucza szyfrowania, wektora inicjalizacji AES i bloku uprawnień Perms przed przewidywalnymi źródłami liczb losowych. Zaszyfrowane pliki PDF utworzone na systemach uruchomionych w podobnym czasie zegarowym nie są już trywialnie korelowalne; dokumenty AES-256 zachowują teraz pełną siłę klucza.
- Wzmocniono parsowanie słownika obrazów przed zniekształconymi lub wrogimi plikami PDF deklarującymi nierozsądne wartości Width, Height, BitsPerComponent lub liczby komponentów DeviceN. Wartości spoza zakresu są ograniczane przed jakąkolwiek arytmetyką bufora pikseli, zapobiegając awariom podczas otwierania takich plików.
- Wzmocniono przechodzenie po odsyłaczach krzyżowych i drzewie stron przed dokumentami, których łańcuchy /Prev xref lub linki stron /Parent tworzą cykl albo są nadmiernie głębokie. Czytnik odrzuca teraz zniekształcone struktury czysto, zamiast rekurencyjnie działać aż do wyczerpania stosu.
Version 3.3.1
Dodano
- Dodano komentarze z uzasadnieniem bezpośrednio przy poprawkach renderowania w PDFlibRenderer.pas, które były już obecne w początkowej bazie Git. Komentarze dokumentują, dlaczego SetPen skaluje szerokości kreski według aktywnej transformacji płótna oraz dlaczego operatory d0/d1 CharProc czcionki Type 3 muszą zużywać swoje operandy. Zachowanie w czasie wykonywania nie uległo zmianie.
Naprawiono
- Uproszczono skrypty budowania Windows dla poszczególnych komponentów. Foldery DLL/, OCX/ i Dylib/ nie zawierają już oddzielnych wariantów build12-* / build13-*: każda platforma ma teraz pojedynczy skrypt build-Win32 / build-Win64, który przypina się do najnowszego RAD Studio i akceptuje opcjonalny argument "debug".
Version 3.3.0
Naprawiono
- Naprawiono renderowanie kresek po transformacji w PDFlibRenderer.pas. SetPen stosuje teraz skalę bieżącej transformacji płótna do szerokości linii PDF przed wywołaniem Picasso, zapobiegając zbyt dużym lub zbyt małym kreskom na ścieżkach, których współrzędne zostały już przekształcone. Naprawia to kontury glifów Type 3, które mogły być renderowane jako grube, nieregularne bloki.
- Naprawiono obsługę d0/d1 CharProc czcionki Type 3 w parserze strumienia zawartości. d0 zużywa teraz swoje dwa operandy szerokości, a d1 zużywa swoje sześć operandów szerokości/ramki ograniczającej, zanim zostaną wykonane późniejsze polecenia rysowania, zapobiegając uszkadzaniu geometrii glifu lub ścieżki przez nieaktualne operandy.