Informacje o wersjach PDFium Delphi Component
Historia wersji funkcji widocznych dla użytkownika, poprawek, ulepszeń podglądu, generowania dokumentów, wyjścia PDF/A, renderowania i aktualizacji dokumentacji PDFium Delphi Component
Ostatnie wydanie
- Najnowsza wersja: 3.137.1; Data wydania:
Version 3.137.1
Naprawiono (Fixed)
- Internetowe kontrole unieważnień OpenSSL zachowują poprzedni status CRL, powód, błąd natywny i dotknięty certyfikat, gdy nie ma dowodów OCSP ani respondera, co pozwala zachować dokładną diagnostykę wygasłych CRL
Version 3.137.0
Dodano (Added)
- Natywne buildy Free Pascal/LCL obsługują Linux Qt6 i macOS Cocoa z rozwiązywaniem czcionek platformy, prywatnym magazynem tymczasowym oraz ładowaniem, edycją, formularzami, zapisem i renderowaniem dokumentów
- Podpisywanie w macOS Keychain obsługuje ścieżkę odpytywania lokalnego Keychain i ograniczony eksport offline łańcucha certyfikatów, z natywnymi transportami podpisów i znaczników czasu dla Free Pascal i Delphi
- Renderowanie równoległe raportuje rzeczywistą ścieżkę modułu, adres inicjalizacji i wynik zwolnienia każdego workera oraz odrzuca natywne ładowarki ponownie używające istniejącego obrazu PDFium
Naprawiono (Fixed)
- Wiązania PDFium dla Unix zachowują szerokości LP64 unsigned-long w wywołaniach zwrotnych i buforach, w tym odczyty własnych strumieni powyżej 4 GiB
- Natywne renderowanie LCL respektuje kolejność bajtów bitmapy i układ kanałów, zachowując kolory w wyjściu Cocoa i renderowaniu do kontekstu urządzenia
- Renderowanie bitmapowe, kafelkowe i progresywne zachowuje alfa przezroczystego tła dla clNone i clDefault niezależnie od natywnego zapytania o przezroczystość strony
- Podpisywanie poprawnie rozpoznaje algorytmy klucza publicznego certyfikatu, w tym klucze EC; weryfikacja CMS na macOS zachowuje niezależne wyniki zewnętrznego podpisu i znacznika czasu oraz jawnie raportuje nieobsługiwane weryfikacje RSA-PSS
- Walidacja znaczników czasu PAdES wymaga krytycznego, wyłącznego EKU id-kp-timeStamping; OpenSSL ocenia podstawowe łańcuchy TSA bez błędnego stosowania przeznaczenia certyfikatu S/MIME
- Atomowe zatwierdzanie plików w Unix zachowuje nową bazę przyrostową, gdy po podmianie nie powiedzie się opróżnienie katalogu, ujawniając wyjątek zapisu i niekompletny wynik trwałości
Zmieniono (Changed)
- Futures POSIX w Delphi przyjmują domyślny priorytet wątku i odrzucają nieobsługiwane żądania priorytetu przed uruchomieniem workera
Version 3.136.0
Dodano (Added)
- Opcjonalne transformacje ICC LittleCMS i konwersja kolorów dokumentu korzystają z oryginalnych komponentów tekstu, wektorów i obrazów 8-bitowych lub 16-bitowych, zachowują wybrane kolory spot i jawnie raportują nieobsługiwaną zawartość
- Złożona redakcja zachowuje obsługiwaną zawartość w zagnieżdżonych Form XObject, wypełnionych zakrzywionych ścieżkach oraz obróconych, odbitych lub ściętych obrazach, ze skończonymi budżetami geometrii i szczegółowymi raportami usuwania
- Odczyt aktywnych obiektów udostępnia niezależne budżety dla treści obiektu i skompresowanych strumieni obiektów przed materializacją i dekodowaniem
Bezpieczeństwo (Security)
- Redakcja odrzuca tekst zastępczy Tagged, XFA, warstwy optional-content, przycinanie tekstu i niemożliwe do zweryfikowania stany malowania, w tym operatory rozdzielone między strumieniami zawartości, zapobiegając eksportowi nieobsługiwanej semantyki wrażliwych treści
Version 3.135.0
Dodano (Added)
- Porównanie adnotacji i widgetów AcroForm raportuje zmiany właściwości niezależnie od pikseli strony, używając stabilnych nazw, jawnych mapowań stron, raportów niejednoznaczności i granic nakładek przed/po
- Komórki tabel obsługują mieszane style tekstu i obrazy z tekstem alternatywnym, opcjonalną kontynuację komórek rozpiętych między stronami, wiersze sum częściowych i etykiety kontynuacji, zachowując relacje Tagged PDF
Naprawiono (Fixed)
- Generowanie układu tagowanego inicjalizuje bibliotekę natywną przed sprawdzeniem możliwości, dzięki czemu może być pierwszą operacją na nowym komponencie dokumentu
- Wielokrotne podstawienia w jednym obiekcie tekstowym są dopasowywane jednorazowo do jego pierwotnych granic, z wymuszeniem ogólnej minimalnej skali poziomej i bez zbędnych pośrednich edycji
Version 3.134.0
Dodano (Added)
- Scalanie nawigacji zachowuje nazwane cele i wewnętrzne linki stron przy wybranych, przetasowanych i powtórzonych stronach, z jawnymi zasadami kolizji i weryfikacją transakcyjną
- Zastępowanie tekstu ze stylem dodaje zweryfikowane plany źródłowe, niezależne podglądy, ponowne użycie natywnych czcionek, jawny fallback, ograniczone dopasowanie poziome i wycofanie po nieudanych lub anulowanych edycjach
- Podpisywanie OpenSSL przyjmuje jawnie skonfigurowane klucze prywatne i łańcuchy certyfikatów dla RSA-PSS, RSA PKCS#1 v1.5 i ECDSA, w tym rozwiązywanie domyślnego podpisującego poza Windows
- Weryfikacja OpenSSL dodaje uwierzytelnione offline i ograniczone online dowody OCSP, tożsamości certyfikatów awaryjnych oraz opcjonalną diagnostykę dla każdego sygnatariusza CMS
- Weryfikator FPC macOS Security.framework raportuje niezależne wyniki kryptograficzne, zaufania do łańcucha i unieważnień, z jawnymi kotwicami zaufania i dostarczonymi dowodami OCSP
Naprawiono (Fixed)
- Ekstrakcja URI adnotacji linku dostarcza kompletny natywny bufor, wraz z terminatorem, dzięki czemu poprawne cele są zwracane prawidłowo
Version 3.133.0
Dodano (Added)
- Transakcyjne scalanie AcroForm obsługuje wybrane strony, odrzucanie pól, zmiany nazw, przestrzenie nazw i zgodne współdzielone pola tekstowe/list, z izolowanymi zasobami, wyglądami i kolejnością obliczeń
- Opcjonalny dostawca kodów kreskowych generuje Code128, QR, DataMatrix i PDF417 oraz rozpoznaje obrazy w skali szarości, z jawnymi zależnościami natywnymi i skończonymi budżetami przetwarzania
Naprawiono (Fixed)
- FormField odczytuje odziedziczone wartości nadrzędne i spójnie zatwierdza edycje tekstu we współdzielonych widgetach, z trwałymi wartościami po zapisie i ponownym otwarciu oraz kontrolami tylko do odczytu
- Regeneracja wyglądu odziedziczonych widgetów tekstowych przywraca ich wartości nadrzędne bez pozostawiania cienia wartości widgetu, a udane przypisanie pola unieważnia współdzielone cache stron
Version 3.132.0
Dodano (Added)
- Opcjonalne wyrównanie stron identyfikuje wstawione, usunięte i przeniesione strony, z ograniczonymi zmianami tekstu Unicode, połączonymi regionami wizualnymi i eksportowalnymi nakładkami porównawczymi
- Transakcyjne scalanie nawigacji zachowuje hierarchię zakładek, style, akcje URI i przemapowane cele przy wybranych, powtórzonych i przetasowanych importach stron
- Opcjonalny dostawca OCR Tesseract obsługuje jawną diagnostykę zależności, geometrię słów Unicode, anulowanie i budżety rozpoznawania, z zapisem warstwy przeszukiwalnej i weryfikacją po ponownym otwarciu
Bezpieczeństwo (Security)
- Polityka RSA-PSS ocenia kompletne parametry podpisu i ograniczonego klucza publicznego, odrzuając wadliwe DER oraz niezgodne ograniczenia skrótu, maski, soli i traileru
Naprawiono (Fixed)
- Weryfikacja zapisu zakładek nie odrzuca już zakładek liści z powodu różnicy stanu rozwinięcia dotyczącej wyłącznie gałęzi
Version 3.131.0
Dodano (Added)
- WatermarkStamp przyjmuje teraz PDF celu i PDF stempla, interwał stron celu oraz wyjście z samymi numerami stron, z proporcjonalnym rozmieszczeniem dla mieszanych rozmiarów stron
- MergePDF pokazuje teraz podgląd wybranych stron i interwału docelowego każdego wejścia przed scaleniem oraz obsługuje pojedyncze wejście do ekstrakcji stron
Naprawiono (Fixed)
- MergePDF waliduje każde źródło przed importem i zatrzymuje się przy nieczytelnych wejściach, nieprawidłowych zakresach, nieudanych importach lub anulowaniu, zamiast zapisywać niekompletne scalenie
- WatermarkStamp zachowuje swoje pliki źródłowe i szablonowe oraz niezawodnie zapisuje numery stron, nawet gdy obie nakładki stempla są wyłączone
Zmieniono (Changed)
- Każdy katalog natywnych dem skupiono na 22 kompletnych przepływach pracy, a SecurityAudit i XfdfLab przeniesiono do Miscellaneous, z poprawionymi ścieżkami projektów i nawigacją
Usunięto (Removed)
- Usunięto stały przewodnik po AnnotationsLab; tworzenie, inspekcja i wymiana adnotacji pozostają objęte przykładami XFDF i ekstrakcji treści oraz testami API
Version 3.130.0
Zmieniono (Changed)
- Każdy katalog natywnych dem został uporządkowany wokół 24 kompletnych przepływów pracy, z dziewięcioma skoncentrowanymi tematami API w Miscellaneous i osobnym przewodnikiem po wyborze pierwszego dema
- Skoncentrowane przykłady dotyczące adnotacji, dostępności, czcionek, nawigacji, eksportu tekstu, renderowania obrazów stron, preferencji drukowania, interakcji i XFA pozostają dostępne z własnym kodem źródłowym i dołączonymi danymi wejściowymi
Usunięto (Removed)
- Usunięto minimalne projekty CJKTextLab i RTLTextLab; tworzenie dokumentów z tekstem Unicode pozostaje dostępne w CreatePDF, a API tekstu kształtowanego pozostają udokumentowane w dokumentacji API
Naprawiono (Fixed)
- Naprawiono przewodnik po API dostępności w C++Builder, który zawodził podczas eksportu skryptu mowy
- Naprawiono przykład adnotacji w C++Builder używający błędnych przesunięć tablicowych dla współrzędnych podświetleń
Version 3.129.0
Zmieniono (Changed)
- Każde natywne demo jest teraz samodzielne: logika przykładów trafiła do projektów, które z niej korzystają, pokazowe pliki PDF dołączono do właściwych projektów przeglądania i ekstrakcji, a katalog Demo/Shared został usunięty
- Działające offline przewodniki po funkcjach, podglądy na żywo, edytowalne formularze, wypełnione raporty, załączniki, nawigacja, preferencje drukowania i inspekcja statycznego XFA pozostają dostępne także wtedy, gdy projekty są kopiowane osobno
- FontProperties otwiera się z już wyświetlonymi rzeczywistymi metrykami czcionek i znaków, a po otwarciu innego dokumentu natychmiast analizuje pierwszy obiekt tekstowy
Naprawiono (Fixed)
- Wyrównano rozmieszczenie i tło paska funkcji PDFViewer między natywnymi wariantami, a FontProperties zwalnia teraz swoje powiązanie z przeglądarką przed zamknięciem
Version 3.128.0
Dodano (Added)
- Dodano działający offline, sześciostronicowy pokaz dema z prawdziwym tekstem, wykresami wektorowymi, osadzonymi obrazami, tabelą, polami AcroForm, zakładkami, linkami, adnotacjami i załącznikami
- Dodano scenariusze przeglądania jednym kliknięciem — wyszukiwanie tekstu, układy dwustronicowe, czytanie nocne, inspekcję dokumentu i eksplorację formularzy — we wszystkich natywnych wariantach PDFViewer
Zmieniono (Changed)
- CreatePDF otwiera teraz dwustronicowy podgląd na żywo z edytowalnymi metadanymi i opcjami treści, prawdziwymi obiektami obrazów i adnotacji oraz opcjonalną stroną Unicode przed zapisem
- Skoncentrowane próbki przeglądania, wyszukiwania, ekstrakcji, formularzy i nawigacji otwierają teraz wypełnione przepływy pracy; próbki załączników, preferencji drukowania i statycznego XFA zawierają rzeczywiste dane specyficzne dla danej funkcji
Naprawiono (Fixed)
- Naprawiono obsługę cyklu życia i fokusu w przeglądarce podczas uruchamiania, podmiany dokumentu, regeneracji podglądu i zamykania
- Naprawiono edytor wartości w demie FormFill dla Lazarusa, który pozostawał wyłączony po wybraniu pierwszego pola podczas uruchamiania
- Naprawiono wiązanie dokumentu w SearchAndSelect oraz raporty ekstrakcji pomijające pola formularzy na dalszych stronach albo odpytujące niedostępne nagłówki plików dla próbek generowanych w pamięci
Version 3.127.0
Zmieniono (Changed)
- Dema MultiPageViewer korzystają z wbudowanych w przeglądarkę API zaznaczania tekstu i schowka, dzięki czemu zaznaczanie pozostaje spójne we wszystkich układach stron, a osobny tryb zaznaczania podwójnym kliknięciem został usunięty
- Przewodnik po przykładach przypisuje wszystkim 35 tematom dem ich odrębne przepływy pracy, a konsolowe przykłady dostępności, przyjmowania dokumentów i preflight dla Delphi i Lazarusa współdzielą implementacje w Pascalu
Dodano (Added)
- XfdfLab potrafi zapisać PDF po zaimportowaniu XFDF: wersja GUI pod Delphi oferuje Save PDF, a warianty konsolowe przyjmują jawną drugą ścieżkę wyjściową
Naprawiono (Fixed)
- Dema MultiPageViewer dla C++Buildera i Lazarusa otwierają się bez nieobsługiwanych właściwości formularzy, a wszystkie dema MultiPageViewer odłączają swój dokument przed zamknięciem
- Warsztat dostępności dla Lazarusa generuje miniatury stron JPEG do swojego raportu przeglądu w HTML
- Dema ExtractImages tworzą dwustronicową próbkę z prawdziwymi osadzonymi obiektami obrazów, więc domyślny przepływ ekstrakcji zwraca cztery obrazy
- Konsolowa próbka round-trip XFDF zachowuje treści adnotacji i dane autora oraz odrzuca konfliktujące lub już istniejące ścieżki wyjściowe PDF przed zapisem
Version 3.126.2
Naprawiono (Fixed)
- Wyświetlanie pełnego XFA działa z domyślnymi ustawieniami zaznaczania tekstu, zastępuje zaznaczony tekst podczas wprowadzania z klawiatury, respektuje pola tylko do odczytu i wyłączone zdarzenia formularzy oraz odświeża wyświetlane uchwyty stron po zmianach dynamicznego układu
- Biblioteki V8 dla Windows odrzucają wadliwe atrybuty XDP, zduplikowane atrybuty, nieprawidłowe użycie przestrzeni nazw i niezgodne deklaracje XML, zanim zmienią zapisywany strumień XFA
Bezpieczeństwo (Security)
- Analiza rewizji podpisu zachowuje własność treści strony, gdy widgety i obiekty wyglądu odwołują się do tego samego grafu obiektów, przez co późniejsze edycje strony nie zostają uznane za dozwolone aktualizacje formularza lub adnotacji w trybie DocMDP
- Blokady FieldMDP pozostają skuteczne, gdy zablokowane pole i adnotacja współdzielą pośredni obiekt wartości
Version 3.126.1
Naprawiono (Fixed)
- Dynamiczna repaginacja XFA aktualizuje teraz
TPdf.PageCountiOnXfaPageCountChangedo rzeczywistą całkowitą liczbę stron po dodaniu lub usunięciu stron, dzięki czemu nawigacja hosta pozostaje zgodna z układem formularza - Zaktualizowane biblioteki V8 dla Windows odświeżają geometrię widgetów wejściowych po zmianach dynamicznego układu XFA, więc tekst i obszary klikalne pól pozostają zgodne, gdy pole przenosi się na inną stronę
Version 3.126.0
Dodano (Added)
- Zaktualizowane biblioteki V8 dla Win32 i Win64 zachowują komentarze XML i instrukcje przetwarzania spoza aktywnych pakietów datasets i formularzy przy zapisie obsługiwanych dokumentów XFA z pojedynczym strumieniem, w tym danych wejściowych UTF-8 i UTF-16
Naprawiono (Fixed)
- Zapis XFA z pojedynczym strumieniem odrzuca nieprawidłowe kodowanie UTF-8 lub UTF-16, niedokończone znaczniki, błędne odwołania do encji i wadliwe instrukcje przetwarzania, zamiast cicho przepisywać takie dane wejściowe; nieobsługiwane konstrukcje w aktywnych pakietach danych, deklaracje DTD i XMLDSig nadal kończą się jawnym błędem zapisu
- Kopiowanie, wycinanie i wklejanie tekstu formularzy w przeglądarce ponawiają krótko próbę, gdy inny wątek lub aplikacja trzyma schowek Windows, pozwalając chwilowej kolizji wygasnąć; nieudane wycinanie nadal zachowuje pierwotny tekst pola
Version 3.125.3
Naprawiono (Fixed)
- Zaktualizowane zwykłe biblioteki
pdfium.dlldla Win32 i Win64 zgłaszają teraz niepowodzenie, gdy zawiedzie końcowy buforowany zapis PDF, zgodnie z naprawą dostarczoną wcześniej w bibliotekach V8
Version 3.125.2
Naprawiono (Fixed)
- Zaktualizowane biblioteki V8 dla Windows zachowują edytowany tekst XFA podczas zapisu i ponownego otwarcia, w tym puste wartości, pierwotne białe znaki, łamania linii i znaki dodatkowych płaszczyzn Unicode, dla tablic pakietów i obsługiwanych dokumentów XDP z pojedynczym strumieniem
- Błędy eksportu pakietów XFA i awarie końcowego zapisu buforowanego zgłaszają teraz niepowodzenie zapisu w zaktualizowanych bibliotekach V8, bez czyszczenia stanu modyfikacji dokumentu; dokumenty z pojedynczym strumieniem zawierające nieobsługiwane konstrukcje XML lub podpisy XML są odrzucane
- Zaktualizowane biblioteki V8 zachowują platformę i isolate V8 jawnie dostarczone przez aplikację hosta podczas inicjalizacji i zwalniania PDFium
- Jawna ścieżka w
LibraryNamewybiera teraz dokładnie to środowisko uruchomieniowe w obu trybach silnika, łącznie zEnableV8Engine=True; brakująca jawna ścieżka kończy się błędem zamiast ładowania innej dołączonej biblioteki
Version 3.125.1
Naprawiono (Fixed)
ValidatePdfFilesParallelnie uszkadza już współdzielonego silnika PDFium: wątki robocze otwierały i przeglądały dokumenty równolegle, przez co część dokumentów kończyła się błędami ładowania lub naruszeniami dostępu, co mogło zawiesić proces lub zepsuć późniejsze operacje PDF; część PDFium każdego dokumentu jest teraz przetwarzana pojedynczo, a ocena reguł nadal działa równolegle- Dokument, którego nie można otworzyć podczas walidacji wsadowej, zgłasza teraz rzeczywisty błąd ładowania zamiast następnego po nim komunikatu „brak aktywnego dokumentu PDF”
Version 3.125.0
Dodano (Added)
PdfLibraryConfigurationSupportErrorinformuje, czyTPdfLibraryConfigurationda się użyć z buildem PDFium o podanych możliwościach Skia i Fontations
Naprawiono (Fixed)
- Żądanie
prpSkiawobec builda PDFium bez Skia lubpfbpFontationswobec builda bez Fontations powoduje teraz, że ładowanie biblioteki zgłaszaEPdfError, zamiast trafiać na natywną kontrolę, która zatrzymywała proces lub zostawiała PDFium w połowie zainicjalizowany; konfiguracja pozostaje niezapieczętowana, więc aplikacja może wybrać inne ustawienia i załadować bibliotekę ponownie
Version 3.124.0
Zmieniono (Changed)
- Walidacja PAdES stosuje teraz zestawy podpisów ETSI TS 119 312 do podpisów RSA zamiast akceptować każdy algorytm RSA:
AlgorithmPolicyStatusprzyjmujepcsInvaliddla skrótów MD2, MD4 i MD5 orazpcsIndeterminatedla SHA-1 i skrótów 112-bitowych, takich jak SHA-224, które nie są już uznawane w bieżącej walidacji; podpisy SHA-1 zachowują swój ogólny wynik integralności i są oznaczane do przeglądu, a nie odrzucane - Podpis RSA, którego
digestAlgorithmróżni się od skrótu ustalonego przez jego algorytm podpisu (na przykład sha256WithRSAEncryption ze skrótem SHA-1), jest teraz raportowany jakoppeiSignatureAlgorithmMismatchi nie przechodzi integralności, podobnie jak algorytmy podpisu RSA użyte na kluczu podpisującego innym niż RSA - Podpisy RSA, których certyfikatu podpisującego nie można znaleźć, raportują teraz
pcsIndeterminate, zgodnie z istniejącym zachowaniem ECDSA; nierozpoznane skróty i OID RSA niebędące podpisami raportująpcsUnsupported - Podpisy RSA PKCS #1 v1.5 ze skrótami SHA3 oraz historyczny identyfikator OIW sha1WithRSASignature są teraz rozpoznawane jako RSA
Version 3.123.0
Dodano (Added)
PdfNativeRendererTypepodaje, który renderer wybieraTPdfRendererPreferencedla danego builda PDFium, przy czymprpDefaultrozstrzyga się na Skia w środowiskach z obsługą Skia i na AGG w pozostałych przypadkach
Naprawiono (Fixed)
- Włączenie
BrotliEnabledlubIsolatePerDocumentwConfigurePdfLibrarynie przełącza już renderowania ze Skia na AGG, gdy preferencja renderera pozostaje naprpDefault; dołączone środowiska z obsługą Skia zachowują teraz swój domyślny renderer, więc wyjście stron nie zmienia się już od tych niezwiązanych opcji
Version 3.122.2
Naprawiono (Fixed)
- Buildy Free Pascal i Lazarusa przekazują teraz nazwy plików i hasła do PDFium jako UTF-8 w każdej ścieżce ładowania (plik, pamięć, strumień niestandardowy i ładowanie progresywne), więc dokumenty w folderach z chińskimi, japońskimi lub innymi nazwami spoza ASCII oraz zaszyfrowane dokumenty z hasłami spoza ASCII otwierają się nawet wtedy, gdy program nie używa trybu łańcuchów UTF-8 Lazarusa
Version 3.122.1
Naprawiono (Fixed)
LastLoadReportjest teraz zastępowany przy każdym nieudanym ładowaniu: nieudaneActive:= True, które pozostawia komponent nieaktywny bez zgłaszania wyjątku, oraz nieudane zwykłe wywołaniaLoadDocumentlubLoadCustomDocumentraportująplsFailedz tekstem błędu, więc kod wsadowy ponownie używający jednegoTPdfnie dostaje już poprzedniego pliku zgłoszonego jako wczytany- Strona pomocy
Activeopisuje teraz rzeczywiste zachowanie przy niepowodzeniu (bez wyjątku, komponent pozostaje nieaktywny, szczegóły wLastLoadReport) oraz to, żeFileNamemożna zmienić tylko przy nieaktywnym komponencie
Version 3.122.0
Dodano (Added)
EPdfAssocFilesErrorwFPdfAssocFileswyjaśnia, dlaczegoInjectAssociateFilesnie mógł wstrzyknąć plików: brak czytelnego trailer lub katalogu w źródle alboTargetPageujemny albo wskazujący nieistniejącą stronę; strumień docelowy pozostaje niezmieniony
Zmieniono (Changed)
SaveAsWithAssociateFilesiSaveAsWithAssociateFilesToStreamzgłaszają terazEPdfError, gdyTAssocFilesOptions.TargetPagewykracza poza0..PageCount; takie wartości były wcześniej przypinane do katalogu dokumentu, wbrew udokumentowanemu zachowaniu
Naprawiono (Fixed)
SaveAsWithAssociateFilesiSaveAsWithAssociateFilesToStreamzwracają terazFalse, gdy zapisanego dokumentu nie da się sparsować pod kątem wstrzyknięcia, zamiast zapisać go bez zmian i zwrócićTruebez żądanych plikówSaveAsWithAssociateFilesnie obcina już istniejącego pliku docelowego przed wygenerowaniem wyjścia; odrzucony lub nieudany zapis pozostawia plik nietknięty
Version 3.121.4
Naprawiono (Fixed)
- Pliki powiązane na poziomie strony (
TAssocFilesOptions.TargetPage) są teraz dołączane do strony o tej pozycji w kolejności stron dokumentu; wcześniej pliki mogły trafić na inną stronę, gdy obiekty stron były zapisane w pliku w innej kolejności niż wyświetlane, na przykład po zmianie kolejności lub wstawieniu stron
Version 3.121.3
Naprawiono (Fixed)
- Pliki powiązane zapisywane przez
SaveAsWithAssociateFileszachowują teraz w nienaruszonym stanie chińskie, japońskie i inne nazwy plików oraz opisy spoza ASCII:/UFi/Descsą zapisywane jako łańcuchy tekstowe PDF w Unicode zamiast przechodzić przez systemową stronę kodową ANSI (Delphi) lub być emitowane jako surowe bajty UTF-8 (Free Pascal) - Historyczna nazwa pliku
/Fjest teraz zawsze przenośnym drukowalnym ASCII, ze znakami spoza ASCII zastąpionymi przez_, więc czytniki dekodujące/Fwłasną stroną kodową nie pokazują już mojibake
Version 3.121.2
Naprawiono (Fixed)
- Pliki powiązane kodują teraz typy MIME jako poprawne nazwy PDF, więc wartości takie jak
text/plainnie prowadzą już do zniekształconych słowników osadzonych plików ani nie blokują walidacji PDF/A-3
Version 3.121.1
Naprawiono (Fixed)
- Odczyt adnotacji i zapisanie zmian z powrotem nie tworzy już pustych strumieni wyglądu rollover i down, gdy te strumienie nie istnieją, co zachowuje wymagania PDF/A dotyczące wyglądu adnotacji
Version 3.121.0
Dodano (Added)
- Weryfikacja CMS w OpenSSL potrafi pobierać certyfikaty pośrednie AIA przez HTTP(S) oraz listy CRL, gdy włączona jest opcja
OnlineRetrieval, ze wspólnym limitem czasu, licznikiem żądań i limitem rozmiaru odpowiedzi; pobrane certyfikaty pozostają niezaufane, dopóki nie potwierdzi ich skonfigurowany łańcuch zaufania - Pobieranie online używa WinHTTP w Windows i dostępnej biblioteki libcurl w FPC na Unixie, zachowuje walidację certyfikatów HTTPS, a nieobsługiwane konfiguracje transportu sygnalizuje przez istniejącą diagnostykę możliwości
Naprawiono (Fixed)
- Klasyczne przebudowywanie odwołań krzyżowych alokuje tabelę wyjściową jednokrotnie i wypełnia bezpośrednio sloty obiektów, unikając kwadratowej pracy przy dużych, rzadkich numerach obiektów, zachowując przy tym limity zasobów parsera i najnowsze generacje obiektów
- Wyjście PDF/X-1a wymaga strukturalnie poprawnego profilu drukarki ICC v2 w CMYK zamiast po cichu osadzać domyślny profil RGB; niepoprawne profile kończą się błędem, zanim istniejący plik docelowy zostanie otwarty do nadpisania
- Walidacja PDF/X-1a sprawdza osadzony profil i jego deklarację czterech komponentów, a raporty preflight identyfikują niepoprawne profile wyjściowe; domyślne etykiety output-condition wynikają z dostarczonego profilu, a etykiety podane jawnie przez wywołującego pozostają zachowane
Version 3.120.4
Naprawiono (Fixed)
- Tryb wsadowy demo ekstrakcji tabel znów przetwarza każdy PDF w folderze: współdzielona instancja dokumentu pozostawała aktywna między plikami, więc drugi i kolejne pliki zgłaszały błąd przypisania i były raportowane jako nieudane; teraz każdy dokument dostaje własną instancję w wydaniach Delphi, Lazarus i C++Builder
- Przykładowy dokument demo znaku wodnego zachowuje strony w kolejności tworzenia (1, 2, 3, 4) zamiast przenosić pierwszą stronę na koniec wywołaniem wstawiania pod indeksem
- Dema XFA i XFDF raportują nieudane otwarcie dokumentu komunikatem zamiast nieobsłużonego wyjątku, demo załączników potrafi zacząć nowy dokument, gdy inny jest już wczytany, a przeglądarka Lazarus zwalnia bitmapę, którą zapisuje
- Demo drukowania w Delphi stosuje teraz ustawienia orientacji, dupleksu, skali szarości, jakości i DPI do zadania drukowania, respektuje liczbę kopii wybraną w oknie drukowania, pomija strony, których nie udało się wyrenderować, i przywraca podgląd po wydruku
- Dema interaktywne, których loader połykał błędy otwierania, nie pokazują już mylącego stanu wczytano, pliki wyjściowe ekstrakcji dostają BOM UTF-8, konsolowe dema CJK i RTL przełączają konsolę na UTF-8 przed wypisaniem wyekstrahowanego tekstu, a pole confidence parsuje liczby dziesiętne niezależnie od ustawień regionalnych systemu
- Test znacznika czasu PAdES faktycznie asertuje teraz, że walidator osiąga poziom B-T po wstrzyknięciu znacznika czasu podpisu, używając dokumentu testowego z wewnętrznie spójnym ByteRange
- Testy pokrycia API i PDF/A nie traktują już każdej porażki ładowania jako pominięcia środowiskowego, gdy pdfium.dll jest wczytany, a nowy test regresyjny pokrywa odszyfrowywanie dokumentów, których wartości stringów są serializowane jako literały przez obce biblioteki zapisu
Version 3.120.3
Naprawiono (Fixed)
EncryptDocumentBytesnie gubi już obiektów rewizji bazowej, gdy źródłowy PDF był zapisywany przyrostowo: klasyczny łańcuch odwołań krzyżowych jest teraz przechodzony przez/Prevod najnowszych, z pierwszeństwem nowszych wpisów, źródło jest odrzucane, gdy jest już zaszyfrowane, słowo kluczowestreammusi zamykać słownik, zanim zostanie potraktowane jako dane strumienia, a zasięg ostatniego obiektu jest ograniczony źródłowym xref zamiast pierwszymendobjw jego bajtach- Zaszyfrowane dokumenty, których wartości stringów są serializowane jako literały — tworzone przez obce biblioteki zapisu — odszyfrowują się teraz zamiast kończyć się błędem uwierzytelniania
- Wstrzykiwanie znaczników PDF/E nie numeruje już syntezowanego słownika Info tak samo jak osadzonego strumienia profilu ICC, gdy źródłowy trailer nie ma
/Info, co sprawiało, że przyrostowy xref wskazywał/DestOutputProfilena zły obiekt - Walidacja PDF/X porównuje wartość XMP
pdfxid:GTS_PDFXVersionpo przycięciu otaczających białych znaków, więc poprawnie wyściełany XMP w postaci elementowej nie zgłasza już fałszywej niezgodności Info - Walidacja PDF/UA rozpoznaje XMP
pdfuaid:partw postaci atrybutowej, rozwija strumienie obiektów przed skanami bajtów jak pozostałe walidatory standardów, sprawdza bit szyfrowania/Ptakże dla dokumentów ze strumieniami odwołań krzyżowych i wymaga niepustej wartościdc:title; wstrzykiwanie znaczników nie emituje już pustego wpisu tytułu - Wstrzykiwanie znaczników PDF/VT nie zbiera i nie przepisuje już każdego obiektu strony dwukrotnie, gdy źródło niesie uszkodzoną hierarchię DPart, która nie przeszła walidacji po tym, jak lista stron została już wypełniona
- Podpisywanie na poziomie PAdES B-T lub wyższym bez
TsaUrlzgłasza teraz wyjątek zamiast po cichu tworzyć podpis B-B, a znacznik czasu dokumentu B-LTA wyprowadza własny nonce zamiast ponownie wysyłać nonce wywołującego - Wstrzykiwanie znacznika czasu podpisu CMS odrzuca dane wejściowe z wieloma podpisującymi zamiast po cichu gubić wszystkie SignerInfo po pierwszym, wersja SignedData staje się 3 przy sid z subjectKeyIdentifier,
certReq FALSEjest pomijane w żądaniach znacznika czasu zgodnie z DER, a awaria transportu WinHTTP w środku treści jest raportowana jako błąd transportu, a nie jako ucięta treść DER - Osadzanie fontów systemowych rozwiązuje rzeczywistą kroję TrueType Collection dla żądanej rodziny i wyodrębnia ją jako samodzielny font, więc żądanie niepierwszej kroji z
.ttc(na przykład NSimSun) nie osadza i nie renderuje już kroji 0 BuildToUnicodeCMappoprawnie paruje glify ze znakami z par zastępczych i emituje mapowania uzupełniające jako wpisy bfchar, zamiast przesuwać każdy wpis po pierwszym znaku astralnym- Wstawianie tekstu kształtowanego, tekstu CID i OCR sprawdza wynik wstawienia na stronę przed zarejestrowaniem obiektu do wycofania, więc nieudane wstawienie nie zostawi już wiszącego uchwytu niszczonego dwa razy
- Wykrywanie słowa kluczowego stream w kompresorze i naprawie ToUnicode akceptuje końcówkę wiersza jako samego CR, dozwoloną przez ISO 32000-1 7.3.8.1
Zmieniono (Changed)
- Kompilacja pakietu trial Win64x dla C++Builder usuwa nieaktualny COFF-owy
PDFiumPas.libpo poprzedniej pełnej kompilacji, więc dwa warianty bibliotek importu nie mogą się razem rozesłać, instalator FULL nie pakuje już plików deweloperskich obecnych wyłącznie lokalnie (packagefiles.xml, dokumenty statusu) w regule łapiącej wszystko, a kompilacje demo po instalacji przypinają katalog główny IDE przez zmiennąPDFiumPas_BDS_ROOT, którą skrypty kompilacji faktycznie czytają
Version 3.120.2
Naprawiono (Fixed)
- Tekst wstawiony przez
AddText,SetText, generowanie layoutu i warstwę wyszukiwania OCR ekstrahuje się teraz z dokładnymi punktami kodowymi zarówno z żywego dokumentu, jak i po zapisie: spacje nie wracają już jako U+00A0, a dywizy jako U+00AD przy obecnej kompilacji PDFium - Fonty systemowe są osadzane jako fonty CID kluczowane punktem kodowym, z jednym CID na znak Unicode i jawnym
CIDToGIDMap, więc glif współdzielony przez kilka znaków (spacja i twarda spacja, dywiz i miękki dywiz, Omega i znak oma) wraca w każdym podglądzie wiernie dla każdego z nich; fonty bez podtablicy cmap Unicode zachowują poprzednią ścieżkę osadzania
Version 3.120.1
Naprawiono (Fixed)
- Dokumenty zapisane z fontami subsettingowymi nie psują już wyekstrahowanego tekstu przy ponownym wczytaniu: serializowana przez pdfium mapa ToUnicode CMap potrafiła mapować jeden CID na dwa różne punkty kodowe (spacje jako U+00A0, dywizy jako U+00AD), a każdy pełny zapis naprawia teraz te sprzeczne mapowania w miejscu, zostawiając strukturę CMap identyczną bajt w bajt, więc czytnik PDFium, MuPDF i qpdf ekstrahują wszystkie oryginalne znaki
- Zapisy przyrostowe, aktualizacje sparse i dokumenty ze strumieniami odwołań krzyżowych nie są nigdy przepisywane przez naprawę i przechodzą bez zmian; pliki bez sprzecznego mapowania są kopiowane bajt po bajcie
- Zatwierdzone do repozytorium testowe
sample.pdfzostało wygenerowane ponownie naprawioną ścieżką zapisu, a testy polityki ładowania lokalizują teraz wpisy xref dynamicznie zamiast zakodowanych na stałe offsetów pliku testowego
Version 3.120.0
Dodano (Added)
- Zakładki raportują styl tekstu konspektu:
TBookmark.Styleniesie flagi kursywy i pogrubienia odczytane przez nowe wiązanieFPDFBookmark_GetStyle, aBookmarkStyleFeaturesAvailablemówi, czy wczytana biblioteka pdfium.dll go eksportuje - Załączniki ujawniają swoją relację pliku powiązanego z PDF 2.0:
AttachmentRelationship[], poleRelationshipwTPdfAttachmentMetadatai wTPdfAnnotationAttachmentczytają nazwę/AFRelationshipprzez nowe wiązanieFPDFAttachment_GetAFRelationship, chronione przezAttachmentRelationshipFeaturesAvailable GetObjectRenderedStrokePatternrastrowuje wzór kafelkowy, którym rysowana jest ścieżka obiektu, do bitmapy należącej do wywołującego, przez nowe wiązanieFPDFPageObj_GetRenderedStrokePattern;StrokePatternRenderingFeaturesAvailableraportuje ten eksportTPdfLibraryConfiguration.IsolatePerDocumentodwzorowuje flagęm_IsolatePerDocumentzFPDF_LIBRARY_CONFIGw wersji 7, więc kompilacje V8 mogą dawać każdemu dokumentowi własny isolate;ConfigurePdfLibraryodrzuca tę flagę razem z jawnymV8Isolate
Zmieniono (Changed)
- Wszystkie 476 publicznych eksportów bieżących nagłówków PDFium jest związanych; trzy nowe punkty wejścia ładują się tolerancyjnie, więc wdrożenia ze starszą biblioteką pdfium.dll dalej działają, a odpowiadające im funkcje raportują puste wyniki lub
nil
Version 3.119.1
Naprawiono (Fixed)
- Walidacja zaufania offline w Windows ogranicza też pobieranie danych unieważnień do buforowanych danych, blokując niejawne żądania sieciowe CRL lub OCSP, gdy pobieranie online jest wyłączone
- Awarie unieważnień w Windows zachowują niezależny błąd zaufania łańcucha i udostępniają powody unieważnień oraz natywną diagnostykę wynikom PAdES i raportom dowodowym
Version 3.119.0
Dodano (Added)
- Walidacja zaufania PAdES i raporty dowodowe udostępniają osobne powody unieważnień i natywne kody błędów dla podpisów dokumentu i znaczników czasu, łącznie z polami JSON i doklejonymi kolumnami CSV
Version 3.118.0
Dodano (Added)
- Wyniki weryfikacji CMS udostępniają
RevocationReasoniRevocationError, z diagnostyką OpenSSL dla wygasłych, niedostępnych i nieprawidłowych lokalnych list CRL
Naprawiono (Fixed)
- OpenSSL raportuje jawnie unieważnione certyfikaty jako nieważne, gdy zaufanie łańcucha się powiodło, a lokalna weryfikacja CRL potwierdza unieważnienie, zachowując przy tym osobne wyniki podpisu i zaufania
Version 3.117.1
Naprawiono (Fixed)
- Zapisy z jawną wersją akceptują poprawne formularze wielostronicowe ze strumieniami odwołań krzyżowych skompresowanymi predyktorem, zamiast błędnie zgłaszać uszkodzoną sekcję odwołań krzyżowych
Version 3.117.0
Dodano (Added)
- Wykrywanie tabel czyta także krawędzie i cieniowanie narysowane jako wypełnione prostokąty: wypełniony prostokąt nie grubszy niż nowy
MaxRulingThicknessstaje się linią siatki, a większy wypełniony prostokąt wnosi swoje krawędzie, dzięki czemu tabele wyeksportowane z Worda, Dokumentów Google i przeglądarek są teraz znajdowane jako siatki z liniami i scalonymi wierszami podpisów, a nie fragmenty oparte na białych znakach.DetectFilledRulingswyłącza to zachowanie - Współrzędne linii siatki są przyciągane w obrębie
RulingSnapToleranceprzed złożeniem siatki, co skleja kawałki krawędzi poszczególnych komórek, podwójne krawędzie i wypełnione komórki oddzielone niewielkim odstępem w jedną tabelę - Linie siatki wewnątrz form XObject biorą udział w wykrywaniu przez złożone macierze obiektów, sterowane przez
IncludeFormXObjects ExtractDocumentTablesłączy fragmenty kontynuacji kończące się tam, gdzie kończy się zawartość strony i wznawiające się tam, gdzie zaczyna się zawartość następnej, a nie tylko fragmenty dotykające krawędzi strony, i traktuje pojedynczy wiersz przechodzący na kolejną stronę jako część swojego łańcucha- TableExtractionLab udostępnia
DetectFilledRulingsw panelu opcji w wariantach Delphi, Lazarus i C++Builder
Zmieniono (Changed)
- Wykrywanie oparte na białych znakach ignoruje słowa należące już do siatki z liniami i wymaga, aby każda granica kolumny była wolnym od tekstu korytarzem przez wiersze, które oddziela, dzięki czemu akapity justowane i listy punktowane nie są już zgłaszane jako tabele
- Kandydat na kontynuację, którego pierwszy wiersz to jedna komórka na całą szerokość, jest traktowany jako nowa tabela z podpisem, a nie dalsza część poprzedniej
MinRowsprzyjmuje 1 dla siatek z liniami; wykrywanie oparte na białych znakach zachowuje dolną granicę dwóch wierszy, a domyślny budżetMaxRulingSegmentsrośnie do 16384, bo prostokąty krawędzi poszczególnych komórek przychodzą w znacznie większej liczbie niż rysowane linie siatki- Tekst komórki jest składany linia po linii z nakładających się ram słów, więc słowa o ramach glifów różniących się wysokością zachowują kolejność od lewej do prawej
TPdf.AboutInfo, metadane pakietu Lazarus oraz metadane wersji instalatora zgłaszają 3.117.0
Version 3.116.4
Dodano (Added)
- TableExtractionLab zyskuje wsadowe przetwarzanie folderów:
Batch folderuruchamiaExtractDocumentTablesdla każdego PDF-a w wybranym folderze, wypisuje liczbę tabel na dokument, oznacza dokumenty bez warstwy tekstowej do OCR i nie pozwala, aby uszkodzone lub zablokowane pliki przerywały cały przebieg Export all CSVzapisuje każdą wykrytą tabelę jako<document>-<n>-page<p>-t<i>.csvw podfolderzetablesprzy przebiegach wsadowych albo obok wczytanego dokumentu dla pojedynczego pliku- Wybór presetów wykrywania udostępnia dostrojone
TPdfTableExtractionOptions: Default, Compact columns (MinColumnGap4 zAlignmentTolerance5 dla ciasnych eksportów z edytorów tekstu) oraz Compact + wide rows (MaxRowGapFactor6 dla interlinii 1.5-2x) - Dokumenty, które pod presetem Default nie dają żadnej tabeli, są jeden raz ponawiane z Compact columns zarówno przy ekstrakcji pojedynczego dokumentu, jak i wsadowej, a wiersze wsadu raportują, który preset dał wynik
Naprawiono (Fixed)
- Ekstrakcja wsadowa otwiera każdy dokument we własnej instancji
TPdfzamiast przeładowywać jedną współdzieloną kontrolkę, co usuwa ciche błędy wczytywania, które ujawniały się jako błędy nieaktywnej kontrolki w połowie przebiegu po folderze
Zmieniono (Changed)
TPdf.AboutInfo, metadane pakietu Lazarus oraz metadane wersji instalatora zgłaszają 3.116.4
Version 3.116.3
Zmieniono (Changed)
- Przykład TableExtractionLab we wszystkich trzech toolchainach zapisuje teraz wygenerowany dokument przykładowy do
TableExtractionSample.pdfobok pliku wykonywalnego demo zamiast trzymać go wyłącznie w pamięci; gdy folder nie jest zapisywalny, lab wraca do poprzedniego zachowania w pamięci i zgłasza to w linii statusu TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają 3.116.3
Version 3.116.2
Naprawiono (Fixed)
- Biblioteka przestała się kompilować na starszych wydaniach Delphi. 64-bitowy helper ticków oraz kodeki XML listy zaufanych i produkcji odwoływały się do
GetTickCount64iCP_UTF8z jednostek RTL, które tylko nowsze kompilatory wnoszą, writer HTML reflow osadzał literał ciągu CSS przekraczający limit 255 elementów, jaki te kompilatory nakładają na pojedynczy literał, a scalanie datasetów XFA dokonywało przypisania międzyTBytesa zwykłym polem tablicy dynamicznej, co kompilatory sprzed XE7 odrzucają. Teraz starsze kompilatory wiążąGetTickCount64z kernel32 i deklarująCP_UTF8lokalnie, gdy RTL tego nie robi, arkusz stylów trafia jako sklejone krótkie literały, a ładunek pakietu jest kopiowany element po elemencie
Zmieniono (Changed)
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają 3.116.2
Version 3.116.1
Dodano (Added)
Demo\Delphi\TableExtractionLab,Demo\CBuilder\TableExtractionLabiDemo\Lazarus\TableExtractionLabzamieniają wykrywanie tabel w jeden przepływ pracy. Lab buduje dokument przykładowy z tabelą z liniami i scalonymi komórkami nagłówka, tabelą wyrównaną białymi znakami bez linii oraz długą tabelą łamiącą się przez granicę stron, po czym uruchamiaExtractTableslubExtractDocumentTablesi wypisuje wiersze, kolumny, rozpiętości, flagi nagłówków, tryb wykrywania, pewność i grupy kontynuacji- Lab eksportuje wybraną tabelę przez
TPdfTable.ToCsviTPdfTable.ToJson, edytujeDetectRuledTables,DetectWhitespaceTables,DetectContinuationsiMinConfidencez panelu opcji i kopiuje pełny raport do schowka TPdf.AboutInfo, metadane pakietu Lazarus oraz metadane wersji instalatora zgłaszają 3.116.1
Version 3.114.21
Naprawiono (Fixed)
- Walidacja PDF/A zgłaszała odwołanie do pliku zewnętrznego w każdym dokumencie zawierającym adnotację. ISO 19005-1 §6.1.7 zabrania
/F,/FFilteri/FDecodeParmsw słowniku obiektu strumienia, ale sprawdzenie szukało tych nazw w całym pliku, a/Fto jednocześnie klucz flag adnotacji, który §6.5.3 wymaga w każdej adnotacji. Teraz sprawdzenie zagląda wyłącznie do środka słowników obiektów strumieni
Version 3.114.20
Naprawiono (Fixed)
- Podpisy RSASSA-PSS niosły źle sformowane parametry algorytmu we wszystkich trzech backendach podpisywania. RFC 4055 nadaje znaczniki wszystkim czterem polom RSASSA-PSS-params; długość soli była zapisywana jako goły integer, który parser czyta jako początek innego pola, a pole trailer było zapisywane, choć jego wartość równa się domyślnej, którą DER wymaga pomijać. Weryfikator albo nie umiał sparsować parametrów, albo spadał do domyślnej 20-bajtowej soli, podczas gdy podpis używał 32, więc podpisy PSS były odrzucane. Podpisy PKCS#1 v1.5 i ECDSA pozostały nietknięte
Version 3.114.19
Naprawiono (Fixed)
- Żądanie znacznika czasu ze skrótem innym niż SHA-256 budowało żądanie deklarujące tamten algorytm, niosące jednak skrót SHA-256, co urząd znaczników czasu odrzuca albo — gorzej — opatruje znacznikiem takim, jakim przyszło. Liczonym skrótem jest wyłącznie SHA-256, więc każdy inny identyfikator jest teraz odrzucany od razu; pusty identyfikator nadal wybiera domyślny SHA-256. Przykład PDF Viewer dla Lazarusa i C++Buildera wiązał też handler rozwijania zakładek, który plik formularza nazywa, ale kod nie definiuje, co wysypuje się przy wczytaniu formularza; handler przeniesiono z przykładu Delphi
Version 3.114.18
Naprawiono (Fixed)
- Przykłady XFA Lab i XFDF Lab dla Delphi oraz przykład XFA Lab dla Lazarusa wysypywały się przy starcie. Każdy buduje swoje kontrolki w handlerze tworzenia formularza, ale zasób formularza nie był ani obecny, ani zlinkowany, więc tworzenie formularza głównego kończyło się błędem resource-not-found, a handler nigdy się nie wykonywał. Wszystkie trzy mają teraz plik formularza i dyrektywę, która go osadza
Version 3.114.17
Naprawiono (Fixed)
- Dwa zasoby natywne były źle obsłużone, gdy operacja wysypywała się w połowie. Nieudane renderowanie miniatury zwalniało docelową bitmapę przed zamknięciem renderowania natywnego, a gdy render rysował bezpośrednio w pikselach tej bitmapy, teardown czytał już zwolnioną pamięć. Nieudana alokacja bitmapy w
AddBitmapzostawiała świeżo utworzony obiekt obrazu bez właściciela i bez drogi powrotu do niego
Version 3.114.16
Naprawiono (Fixed)
- Czytanie tekstu FDF dawało złe znaki powyżej
0x7E. Tablica PDFDocEncoding w załączniku D.2 ISO 32000-1 zaczyna się od0x80od punktora, ale mapowanie zaczynało ją od0x7F, więc cały blok do0x9Fbył przesunięty o jedną pozycję: sztylet czytał się jako punktór, półpauza jako wielokropek i tak dalej aż do zcaron, który wypadał całkiem poza koniec. Brakowało też Euro na0xA0, które wracało jako spacja niełamliwa. Nazwy i wartości pól w importowanym FDF dekodują się teraz poprawnie
Version 3.114.15
Naprawiono (Fixed)
- Walidacja zaufania w dokumencie, którego trailer lub katalogu nie da się odczytać, zapisywała za końcem tablicy. Przebieg zgodności poddaje się wtedy bez zapisania jakichkolwiek podpisów, podczas gdy uruchamiany zaraz potem kolektor pracuje bezpośrednio na strumieniu bajtów i wciąż może znaleźć słowniki podpisów, więc do pustej tablicy trafiał jeden wpis na znaleziony słownik. Liczba jest teraz ograniczana do wyniku przebiegu zgodności
Version 3.114.14
Naprawiono (Fixed)
- Wykonywanie planu naprawy PDF/A stosowało kroki, które planista zablokował. Krok jest blokowany, gdy dokument niesie podpisy, krok unieważniłby je, a wywołujący na to nie zezwolił; egzekutor testował wyłącznie poziom bezpieczeństwa kroku, który nie wyraża tego warunku, więc podpisany dokument mógł stracić ważność podpisów przez automatyczną naprawę, której plan już odmówił. Zablokowane kroki są teraz pomijane i liczone jako pominięte
Version 3.114.13
Naprawiono (Fixed)
- Dodawanie znacznika czasu podpisu do wartości CMS, której zbiór certyfikatów był większy niż 127 bajtów — a to każdy prawdziwy certyfikat — psuło wynik. Helper lokalizujący początek struktury zagnieżdżonej szedł wstecz po oktetach długości i wziął ostatni za pierwszy, więc wycięty wycinek zaczynał się daleko przed żądaną strukturą. Długość nagłówka jest teraz wyliczana z długości zawartości, co DER stanowi jednoznacznie. Samosprawdzenia tego nie wykryły, bo ich certyfikaty w fixture były na tyle małe, że wystarczała im forma krótka
Version 3.114.12
Naprawiono (Fixed)
- Atrybuty podpisane były emitowane w kolejności budowania, a nie posortowane według ich kodowań, czego wymaga X.690 §11.6 od DER SET OF. Weryfikator, który przed liczeniem skrótu ponownie koduje zbiór atrybutów — tak robią OpenSSL i BouncyCastle — liczył w efekcie inny skrót i uznawał zdrowy podpis PAdES za nieważny. Podpisy produkowane przez tę bibliotekę przechodzą teraz weryfikację w tych stosach; walidacja przez warstwę Windows pozostawała bez wpływu, bo liczy skrót z bajtów takich, jakie przyszły
Version 3.114.11
Naprawiono (Fixed)
- Ujemny DER INTEGER szeroki na więcej niż dwa bajty zawartości był kodowany złą wartością. Writer symuluje przesunięcie arytmetyczne przez ponowne wstrzyknięcie znaku po przesunięciu logicznym, ale użyta maska ustawiała wszystkie bity nad najniższym bajtem zamiast tylko bajtu opróżnionego przez przesunięcie, więc wartość bezwzględna wciąż trzymająca się w pozostałych bajtach była nadpisywana. Na przykład -100000 kodowało się jako -34464. Nonce żądań znaczników czasu i każdy inny podpisany integer tej wielkości kodują się teraz poprawnie
Version 3.114.10
Naprawiono (Fixed)
- Walidacja PDF/A nigdy nie zgłaszała części constant alpha reguły przezroczystości z ISO 19005-1 §6.4. Helper buduje klucz wyszukiwania przez dodanie ukośnika na początku, a wywołujący przekazał już jeden, więc szukano
//CAi nic nie pasowało. Oba testy alpha przyjmowały też wyłącznie dokładne teksty1i1.0, przez co w pełni nieprzezroczyste/CA 1.00było oznaczane jako naruszenie; wartość jeden jest teraz rozpoznawana niezależnie od zapisu
Version 3.114.9
Naprawiono (Fixed)
- Akcja URI na poziomie strony zwracała poszarpany tekst. Ścieżka wraca z warstwy natywnej jako bajty UTF-8 i była zapisywana prosto do szerokiego ciągu, co skleja bajty w pary 16-bitowych jednostek kodu i zostawia resztę bufora z tym, co akurat leżało w pamięci.
GetPageActionURIdekoduje teraz bajty tak samo, jak robiła to już ścieżka akcji na poziomie dokumentu
Version 3.114.8
Bezpieczeństwo (Security)
- Na celach innych niż Windows losowe bajty stojące za każdym kluczem szyfrowania, solą i wektorem inicjalizacyjnym pochodziły z PRNG środowiska, którego ziarno jest stałe, dopóki program nie wywoła
Randomize. Każdy proces produkował więc ten sam klucz szyfrowania pliku, te same sole/UEi/OE, te same bajty/Permsi te same nonce AES-GCM, przez co zaszyfrowane wyjście z builda Free Pascal na Linuxie lub macOS daje się trywialnie odzyskać, a nonce GCM powtarza się pod stałym kluczem. Bajty pochodzą teraz z/dev/urandom, a niedostępna pula kernela podnosi wyjątek zamiast spadać do wartości domyślnych — tak jak niedostępnyCryptGenRandomrobił to już na Windows
Version 3.114.7
Naprawiono (Fixed)
- Źle sformowany strumień obiektów mógł sprawić, że punkty wejścia kompresji i naprawy czytały za końcem zdekodowanego bufora. Ofsety członków deklarowane przez strumień są teraz sprawdzane pod kątem zakresu i kolejności rosnącej od razu po sparsowaniu nagłówka, zadeklarowana liczba członków większa niż mieści nagłówek jest odrzucana przed zarezerwowaniem czegokolwiek, a zakres bajtów każdego członka jest walidowany przed, a nie po przycięciu końcowych białych znaków
Version 3.114.6
Naprawiono (Fixed)
- Wynoszenie obrazów wbudowanych dawało bezużyteczny obraz XObject. Słownik był zapisywany z zabłąkanym ukośnikiem przed pierwszym kluczem, co otwierało pustą nazwę i przesuwało każdy klucz na wartość poprzedniego, a tabela skrótów inline mapowała Decode na
GzamiastD, więc tablica/Dbyła wyrzucana, a skrót wartości DeviceGray brany za klucz. Obrazy wyniesione ze strumienia treści noszą teraz poprawny słownik i zachowują swoją tablicę Decode
Version 3.114.5
Naprawiono (Fixed)
- Shaper HarfBuzz przypisywał długości klastrów złym glifom w przebiegach od prawej do lewej i dawał glifom współdzielącym klaster — jak znaki diakrytyczne i elementy ligatur — długość jeden.
ClusterLengthkażdego glifu obejmuje teraz od startu jego klastra do następnego klastra w kolejności logicznej, w obu kierunkach, więc mapowanie znak-glif dla tekstu arabskiego i hebrajskiego zgadza się z tym, co raportuje backend Uniscribe
Version 3.114.4
Naprawiono (Fixed)
- Transport znaczników czasu libcurl przekazywał swoje opcje liczbowe i czytał kod statusu HTTP jako wartości 32-bit, podczas gdy libcurl przyjmuje i zwraca C-owe
long, które na Linuxie i macOS ma 64 bity. Zapytanie o status mogło nadpisać cztery bajty obok swojego celu na stosie, a wartości opcji zależały od tego, co akurat siedziało w górnej połowie rejestru. Oba używają teraz szerokości platformowegolong, więcFPdfTsaFpcjest zdrowy na celach LP64
Version 3.114.3
Naprawiono (Fixed)
- Backend PKCS#11 kopiował surowe bajty etykiety obiektu tokenu prosto do ciągu, co w Delphi ląduje bajtami UTF-8 na jednostkach kodu UTF-16. Certyfikat wybrany przez
TPdfPkcs11Options.CertificateLabelnie mógł się więc nigdy dopasować, aEnumerateCertificatesraportował posypaneLabelText. Etykiety są teraz dekodowane jako UTF-8 zdefiniowany przez standard, a PIN podawany doC_Loginjest kodowany jako UTF-8 zamiast być zawężany przez stronę kodową gospodarza, więc nie-ASCII PIN dociera do tokenu nietknięty
Version 3.114.2
Naprawiono (Fixed)
- Signer oparty o Keychain na macOS pytał
SecKeyIsAlgorithmSupportedo złą operację przy rozstrzyganiu, czy klucz przyjmuje RSASSA-PSS: zapytanie nazywało operację odszyfrowania zamiast podpisu, więc odpowiedź brzmiała zawsze nie, a każdy podpis RSA po cichu spadał do PKCS#1 v1.5. Klucz wspierający PSS podpisuje teraz PSS-em, jak żądaTPadesSignerOptions.PaddingScheme, a argument operacji jest przekazywany w szerokości deklarowanej przez framework
Version 3.114.1
Naprawiono (Fixed)
- Zagnieżdżone pary nawiasów w tekście od prawej do lewej rozstrzygały się w złym kierunku. Reguła BD16 z UAX #9 przetwarza pary w kolejności pojawiania się nawiasów otwierających, a para rozstrzygnięta przez N0 staje się poprzedzającym silnym kontekstem dla pary otwartej po niej; pary były jednak przetwarzane w kolejności zamykania nawiasów, więc para wewnętrzna mogła iść za literą, którą otacza, zamiast za kontekstem ustanowionym przez parę zewnętrzną. Tekst taki jak zdanie arabskie czy hebrajskie z wtrąceniem w nawiasie ze zagnieżdżonym nawiasem układa się teraz tak, jak czytelnik oczekuje
Version 3.114.0
Dodano (Added)
FPdfCryptoSslweryfikuje podpisy PDF i tokeny znaczników czasu przez OpenSSL, co zamyka ostatnią lukę platformową w walidacji podpisów: Linux nie miał w ogóle zaplecza weryfikacji CMS.ConfigureSslCmsVerifierje instaluje, libcrypto jest rozwiązywany po nazwie w czasie uruchomienia, więc nic nie jest z nim konsolidowane, a wiązanie działa zarówno w seriach 1.1, jak i 3.x- Podpis i łańcuch certyfikatów są oceniane w osobnych przebiegach, więc kryptograficznie poprawny podpis pod łańcuchem nie sięgającym do kotwicy zaufania jest zgłaszany jako ważny podpis z nieprawidłowym zaufaniem, a nie jako uszkodzony podpis
ConfigureSslTrustAnchorsdodaje kotwice zaufania DER do magazynu systemowego, aConfigureSslCrlsdostarcza listy CRL, które może uwzględnić sprawdzenie unieważnień. Unieważnienie liczy się jako sprawdzone tylko wtedy, gdy lista CRL faktycznie istnieje, ponieważ OpenSSL sam niczego nie pobiera; gdy żadnej nie dostarczono, wynik wskazuje unsupported zamiast przepuszczać niesprawdzony łańcuchSslAvailable,SslMissingSymbols,SslLibraryPath,SslLibraryVersioniSslAbiLayoutzgłaszają, co się powiązało, a co nie, aConfigureSslLibraryPathwskazuje zapleczu konkretną bibliotekę, gdy domyślne ustawienia platformy jej nie znajdują
Version 3.113.0
Dodano (Added)
TPdfKeychainCmsVerifierweryfikuje podpisy PDF i tokeny znaczników czasu w macOS przezCMSDecoderi SecTrust, więc walidacja podpisów nie jest już ograniczona do Windows.ConfigureKeychainCmsVerifierje instaluje, a ten sam moduł pokrywa teraz obie połowy wsparcia macOS tak, jakFPdfCryptoWinrobi to dla Windows- Sprawdzanie unieważnień jest honorowane: gdy jest żądane, polityka unieważnień dołącza do podstawowej polityki X.509, a wyłączenie pobierania online ogranicza ocenę do zapisanych w cache odpowiedzi. Punkty kontrolne postępu odpalają się dla etapów podpisu, łańcucha, pobierania online i unieważnień dokładnie tak, jak zgłasza je zaplecze Windows
KeychainVerificationAvailablezgłasza wsparcie weryfikacji osobno od podpisywania, ponieważ obie funkcje potrzebują innych symboli frameworków i jedna może być dostępna bez drugiej
Version 3.112.0
Dodano (Added)
FPdfCryptoMacpodpisuje PAdES tożsamością z macOS Keychain, będącą odpowiednikiem magazynu certyfikatów Windows: certyfikat i jego klucz prywatny pochodzą z Keychain, a podpis jest wytwarzany przezSecKeyCreateSignature, więc klucz nigdy nie opuszcza systemowego keystore'a.ConfigureKeychainSignerProvidergo instaluje i nie trzeba wdrażać żadnego modułu obok aplikacji, jak wymagałoby to zaplecza tokenów PKCS#11- Podpisujący podąża za certyfikatem: klucz EC podpisuje ECDSA, klucz RSA podpisuje RSASSA-PSS, a tam gdzie PSS jest niedostępne (starszy macOS lub klucz, który go nie przyjmuje), dopełnienie wraca do PKCS#1 v1.5, a emitowany AlgorithmIdentifier mówi o tym wprost, zamiast udawać PSS
KeychainMissingSymbolswylicza każdy symbol frameworka, którego nie udało się rozwiązać, więc wdrożenie zgłaszające zaplecze jako niedostępne może odróżnić brakujący framework od błędnej nazwy w tym wiązaniu
Version 3.111.0
Dodano (Added)
ConfigurePadesCmsVerifierinstaluje zaplecze weryfikacji CMS używane przez walidator PAdES, więc weryfikacja podpisów i znaczników czasu nie jest już związana z Windows.IPdfCmsVerifierdeklaruje dwie operacje, na które zaplecze odpowiada: detached dla podpisu PDF i attached dla tokena znacznika czasu, aPadesCmsVerificationAvailablezgłasza, czy jakiekolwiek zaplecze jest obecne
Zmieniono (Changed)
- Rekordy wyniku weryfikacji i opcji przeniosły się do
FPdfCryptojakoTPdfCmsVerify*. NazwyTWinCmsVerify*pozostają jako aliasy, więc istniejący kod dalej działa, a podłączone zaplecze posługuje się tymi samymi typami co zaplecze Windows - Zachowanie w Windows się nie zmienia: bez zainstalowanego weryfikatora nadal używa CryptoAPI, a punkty kontrolne postępu, opcje unieważnień i natywne kody błędów są te same. Tam gdzie żadne zaplecze nie odpowiada, każdy werdykt zgłasza unsupported zamiast pozostawiać sprawę niesprawdzoną
Version 3.110.0
Dodano (Added)
FPdfPkcs11podpisuje PAdES kluczem, który pozostaje wewnątrz tokena PKCS#11.ConfigurePkcs11SignerProviderinstaluje je jako zaplecze podpisywania, moduł jest ładowany w czasie uruchomienia po ścieżce, więc nic nie jest konsolidowane, a ten sam kod obsługuje Windows, Linux i macOS. Enumeracja tokenów zadeklarowana w interfejsieIPdfPkcs11SignerProviderjest zaimplementowana obok niego: sloty, tokeny i certyfikaty, które każdy z nich przechowuje- Podpisywanie poza Windows nie potrzebuje już dostawcy dostarczonego przez hosta w typowym przypadku: moduł tokena plus
TPdfPkcs11Optionswystarczają. RSA PKCS#1 v1.5, RSASSA-PSS i ECDSA są w całości wytwarzane przez token FPdfSha1dodaje SHA-1 w jednym celu: dopasowania certyfikatu po odcisku (thumbprint), który niesieTPadesSignerOptions. Windows rozwiązywał to wewnątrz magazynu certyfikatów; token zwraca bajty certyfikatu i zostawia dopasowanie wywołującemu. Nie jest to skrót podpisujący i stos PAdES dalej podpisuje SHA-256
Zmieniono (Changed)
- Pomocnicze funkcje DER certyfikatu, które czytają OID algorytmu klucza publicznego, wyodrębniają wystawcę i numer seryjny oraz przepakowują surowy podpis ECDSA, przeniosły się z zaplecza Windows do
FPdfCms, gdzie każde zaplecze podpisywania może po nie sięgnąć
Version 3.109.0
Zmieniono (Changed)
- Natywny loader biblioteki nie jest już ograniczony do Windows.
LibraryNameprzyjmuje domyślniepdfium.dll,libpdfium.solublibpdfium.dylibdla celu, build V8 jest szukany pod pasującą nazwą, a ładowanie i wiązanie symboli idzie przez przenośny loader na Free Pascal. Zachowanie w Windows się nie zmienia, łącznie z układem wdrożenia Win32 i Win64 oraz diagnostyką niezgodności architektury - Katalogi wdrożenia na innych celach trzymają się pisowni
<cpu>-<os>, której już używają skompilowane jednostki, więcDLLs/x86_64-linux/libpdfium.soleży obokLib/FPC/x86_64-linux. Fallback do katalogu systemowego pozostaje wyłącznie dla Windows; gdzie indziej pokrywa go ścieżka przeszukiwania loadera
Version 3.108.0
Dodano (Added)
TPdfHarfBuzzTextShaperukłada tekst dwukierunkowy i pisma o złożonych skryptach na celach Free Pascal pozbawionych Uniscribe. Poziomy osadzenia rozwiązuje przezFPdfBidi, dzieli przebiegi według skryptu, składa każdy przebieg przez libharfbuzz i ustawia przebiegi w kolejności wizualnej. Instaluje się go przezConfigureTextShaper; libharfbuzz jest rozwiązywany w czasie uruchomienia, aHarfBuzzAvailableuczciwie zgłasza, gdy go brakuje- Shaper nie wylicza czcionek. Uniscribe czyta binarny plik czcionki z kontekstu urządzenia, co nie ma przenośnego odpowiednika, więc host przekazuje
TPdfFontDataResolver, który mapuje nazwę czcionki na bajty pliku czcionki i zostawia tę politykę tam, gdzie jej miejsce
Version 3.107.0
Dodano (Added)
FPdfBidiimplementuje Unicode Bidirectional Algorithm (UAX #9) w czystym Pascalu:PdfResolveBidiLevelszwraca jeden poziom osadzenia na jednostkę kodu UTF-16,PdfBidiVisualOrderstosuje przemianowanie L2, aPdfBidiClassOfodsłania Bidi_Class punktu kodowego. Reguły P2-P3, X1-X10, W1-W7, N0-N2, I1-I2 i L1-L2 są pokryte, łącznie z inicjatorami isolate i parami nawiasów BD16- Moduł jest neutralny wobec kompilatora i platformy i właśnie to pozwala układać tekst dwukierunkowy tam, gdzie Uniscribe nie jest dostępny. Silnik składu rozwiązuje glify dla przebiegu o już znanym kierunku, więc to jest ten element, który musi najpierw rozstrzygnąć kierunek
Version 3.106.0
Dodano (Added)
ConfigureTextShaperinstaluje zaplecze składu tekstu, przez które przechodzi cała biblioteka, wraz zActiveTextShaper,ActiveTextShaperNameiClearTextShaper. ZarównoShapePdfText, jak iTPdf.AddShapedTextużywają teraz zainstalowanego shapera zamiast tworzyć bezpośrednio instancję Uniscribe, więc host może dostarczyć własny silnik, a test silnik deterministyczny
Zmieniono (Changed)
FPdfTextShapingkompiluje się na celach innych niż Windows: zaplecze Uniscribe jest teraz domyślne dla platformy, a nie jedyną implementacją, i jest ograniczone do buildu Windows. Tam gdzie żadne zaplecze nie jest dostępne, punkty wejścia składu zgłaszają to zamiast kończyć się błędem kompilacji
Version 3.105.1
Bezpieczeństwo (Security)
- Odpowiedź znacznika czasu jest teraz ograniczona do 4 MB na obu transportach. TSA, która wysyłała bez końca, mogła wcześniej powiększać bufor odbioru bez limitu, zamieniając wywołanie podpisujące w nieograniczony wzrost pamięci
Version 3.105.0
Dodano (Added)
- Znaczniki czasu RFC 3161 działają na celach Free Pascal innych niż Windows: nowe zaplecze libcurl wysyła TimeStampReq i czyta TimeStampResp, więc
PadesTsaAvailablezgłasza True, a PAdES B-T, B-LT i B-LTA mogą tam pobierać tokeny. libcurl jest rozwiązywany w czasie uruchomienia i nie jest zależnością czasu budowania; gdy go brakuje, zaplecze zgłasza niedostępność dokładnie tak jak zaplecze WinHttp. Windows dalej używa WinHttp i pozostaje nietknięty - Podpisywanie na tych celach wciąż potrzebuje materiału klucza, którego biblioteka nie posiada: dostarcz go przez
ConfigurePadesSignerProviderzIPadesSignerProvider(lubIPdfPkcs11SignerProviderdla kluczy z tokenów), ponieważFPdfCryptoWindziała wyłącznie na Windows
Version 3.104.1
Dodano (Added)
- Laboratoryjna próbka inspekcji XFA jest teraz dostępna także dla Lazarusa, więc sondy możliwości XFA, wyliczanie pakietów, eksport pakietów i fallback
OnXfaRuntimeMissingmożna ćwiczyć z buildu LCL
Version 3.104.0
Zmieniono (Changed)
- Biblioteka kompiluje się na Free Pascal 3.2 bez uniknialnych diagnostyk: wewnętrzne odczyty czasu pobierają takt milisekund z
GetTickCount64zamiast z przestarzałego wywołania 32-bit, przestarzałe akcesory słowa kontrolnego SSE zostały zastąpione przezGetMXCSRiSetMXCSR, podstawa offsetu odcisku zawartości jest jawnie typowana, więc nie uruchamia już sprawdzania zakresu w czasie kompilacji, a adresy scanline są porównywane jako bezznakowe wskaźniki przy sprawdzaniu bitmapy pod kątem układu top-down
Version 3.103.1
Naprawiono (Fixed)
- Metadane dokumentu przenoszone do XMP zachowują znaki nie-ASCII na Free Pascal: tytuły, autorów, tematy, słowa kluczowe i nazwy twórców docierające do
SaveAsPdfA,SaveAsPdfUa,SaveAsPdfE,SaveAsPdfX,SaveAsPdfRiSaveAsPdfVTkonwertuje się teraz przez stronę kodową ciągu zamiast kopiować bajt za bajt, więc pakiet metadanych pozostaje poprawnym UTF-8, czego wymaga ISO 19005-1 6.7.2, nawet gdy program hosta nie działa na stronie kodowej UTF-8 - Eksport XFDF, obiegi metadanych produkcji i parsowanie XML list zaufanych używają tej samej konwersji poprawnej względem strony kodowej, więc tekst podróżujący między
TBytesastringnie zależy już od strony kodowej hosta
Version 3.103.0
Dodano (Added)
TPdfEuropeanTrustedListparsuje uwierzytelnione europejskie listy zaufanych, przeładowuje zapisane w cache kopie z sumami kontrolnymi przez ten sam uwierzytelniacz, przyjmuje źródła aktualizacji dostarczone przez wywołującego, odsłania bieżące kotwice zaufania i ocenia kwalifikowane usługi podpisu w żądanym czasie walidacjiTPadesTrustValidationOptions.QualifiedTrustEvaluatorstosuje offline'ową politykę zaufania kwalifikowanego do każdego walidowanego podpisującego, bez dodawania dostępu do sieci do walidatora PAdES
Version 3.102.0
Dodano (Added)
BeginIncrementalSaveiCommitIncrementalSavedokleają teraz uwierzytelnione rewizje do dokumentów szyfrowanych AES-256, zachowując oryginalne odwołanie/Encrypt, parametry bezpieczeństwa, dokładne generacje obiektów i wcześniejsze bajty
Zmieniono (Changed)
- Przeciążenie zatwierdzania pliku trwale zrzuca teraz bufor i rygorystycznie otwiera ponownie plik boczny w tym samym katalogu, weryfikuje jego granicę rewizji i atomowo zastępuje plik docelowy, wycofując sesję po każdym niepowodzeniu
Version 3.101.0
Zmieniono (Changed)
SaveAsRedactedzachowuje teraz bezpieczne fragmenty częściowo przecinającego się tekstu, prostokątnych ścieżek i wyrównanych do osi obrazów, a następnie usuwa nazwy zasobów, do których już nie odwołuje się żadna strona, Form XObject, wzorzec, wygląd ani zagnieżdżony zasięg zasobów
Version 3.100.0
Zmieniono (Changed)
OptimizeImageswybiera teraz resampling box, bilinear, bicubic, Lanczos lub bilevel na podstawie skali, klasy zawartości, zmierzonego detalu i jakości zadanej przez wywołującego, z filtrowaniem świadomym alfy i rygorystycznym budżetem pamięci roboczej
Version 3.99.0
Dodano (Added)
GraftPdfAcroFormimportuje hierarchiczne pola AcroForm, widgety, wyglądy, kolejność obliczeń, domyślne zasoby, akcje i wartości przez jawne mapowania stron i polityki kolizjiTPdfCrossDocumentGraftMapponownie używa importowanych obiektów pośrednich według tożsamości źródła, zachowując cykle, współdzielone odwołania, dokładne generacje źródła i transakcyjną semantykę niepowodzeń
Version 3.98.0
Dodano (Added)
TPdfOutlineEditortworzy, przenosi, usuwa, stylizuje, rozwija i przecelowuje elementy zakładek, przemapowuje jawne cele przez wyniki planów stron i dokleja niezależnie zweryfikowaną rewizję przyrostową
Version 3.97.0
Dodano (Added)
TPdfTreeEditorczyta, waliduje, aktualizuje, balansuje, dzieli, scala, serializuje i przyrostowo zapisuje dowolne struktury PDF NameTree i NumberTree, zachowując wielokrotnego użytku odwołania pośrednie i surowe wartości wpisów
Version 3.96.0
Dodano (Added)
TPdfParserResourceBudgetzapewnia jedną wątkowo bezpieczną politykę procesu dla rekursji, tokenów, obiektów, zdekodowanych bajtów, współczynnika ekspansji, alokacji i deadline'ów w niestandardowych parserach PDF, z niemutowalnymi snapshotami per operacja i konfigurowalnymi wartościami domyślnymi
Version 3.95.0
Zmieniono (Changed)
ValidatePdfXwaliduje teraz aktywne słowniki PDF/X, metadane, output intenty, czcionki, cechy zakazane, przezroczystość, przestrzenie kolorów i pola stron przez ograniczone rzadkie odczyty na niezaszyfrowanych dokumentach z poprawnym xref
Version 3.94.0
Zmieniono (Changed)
ValidatePdfRwaliduje teraz aktywne słowniki PDF/R, strony, filtry obrazów, metadane i znaczniki stopki przez ograniczone rzadkie i okienkowe odczyty na niezaszyfrowanych dokumentach z poprawnym xref
Version 3.93.0
Zmieniono (Changed)
ValidatePdfEwaliduje teraz aktywne słowniki PDF/E, metadane, output intenty, formularze i cechy zakazane przez ograniczone rzadkie odczyty na dokumentach z poprawnym xref
Version 3.92.0
Zmieniono (Changed)
ValidatePdfVTwykonuje teraz zaawansowaną analizę zasięgu, widoczności, enkapsulacji i zagnieżdżonego użycia Form dla powtarzających się XObject przez ograniczone rzadkie odczyty na dokumentach z poprawnym xref
Version 3.91.0
Dodano (Added)
TPdfSparseDictionaryReaderpotrafi rozwiązać aktywną generację obiektu i zdekodować strumień bezpośredni pod limitem bajtów dostarczonym przez wywołującego
Zmieniono (Changed)
ValidatePdfVTużywa teraz ograniczonych rzadkich odczytów dla sprawdzeń metadanych PDF/VT, DPart, OutputIntent, Info, stron i zwykłych słowników na normalnej ścieżce poprawnego xref
Version 3.90.0
Dodano (Added)
TPdfSparseDictionaryReadertrzyma otwarty jeden rzadki indeks xref i strumieni obiektów dla powtarzanych, ograniczonych odczytów słowników obiektów pośrednich
Zmieniono (Changed)
InjectPdfVTMarkerswaliduje i zachowuje teraz istniejącą hierarchię DPart PDF/VT z ograniczonymi odczytami źródła, podczas gdy zdeformowane hierarchie dalej przechodzą przez awaryjną ścieżkę przebudowy
Version 3.89.0
Dodano (Added)
ReadPdfSparsePageDictionarieszwraca tożsamości obiektów stron i ograniczone bajty słowników w kolejności drzewa stron przez rzadki indeks obiektów
Zmieniono (Changed)
InjectPdfVTMarkerssyntezuje teraz hierarchię DPart PDF/VT i dokleja obiekty znaczników z ograniczonymi odczytami źródła, gdy zapisany PDF nie zawiera jeszcze hierarchii DPart
Version 3.88.0
Dodano (Added)
ReadPdfSparseCatalogSubDictczyta bezpośredni lub pośredni podsłownik katalogu przez rzadki indeks obiektów; używa tego wstrzykiwanie znaczników PDF/UA dlaMarkInfoiViewerPreferences
Zmieniono (Changed)
InjectPdfUaMarkersrozwiązuje teraz katalogoweMarkInfoiViewerPreferencesprzez rzadkie wyszukiwanie i dokleja rewizję PDF/UA z ograniczonymi odczytami źródła na normalnej ścieżce xref
Version 3.87.0
Dodano (Added)
AppendPdfSparseUpdatestrumieniuje jedną rzadką rewizję na zapisany PDF: bajty źródła dosłownie, ciała obiektów dostarczone przez wywołującego na zarejestrowanych offsetach oraz pojedynczy blok przyrostowy xref/trailer łańcuchowany przez/PrevNormalizePageViewRectnormalizuje dwa zmapowane narożniki przestrzeni strony do ograniczonego do strony widocznego prostokąta albo zgłasza, że nic ze strony nie jest widoczne- Wstrzykiwanie znaczników PDF/E syntezuje świeży obiekt Info z
/ISO_PDFEVersion, gdy dokument źródłowy nie ma słownika Info
Zmieniono (Changed)
- Wstrzykiwanie znaczników PDF/E, PDF/X i PDF/R rozwiązuje teraz katalog, Info i trailer przez rzadkie wyszukiwanie i dokleja rewizje przez
AppendPdfSparseUpdatez ograniczonymi odczytami źródła na normalnej ścieżce xref - Callback wypełniania formularzy
FFI_GetPageViewRectzgłasza teraz część strony faktycznie widoczną w podłączonymTPdfViewzamiast zawsze całego pola strony, z powrotem do wymiarów strony dla dokumentów bezgłowych TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 3.87.0
Naprawiono (Fixed)
- Punkty kontrolne segmentów ścieżek odsłaniane od momentu wiązania
FPDFPath_GetBezierControlPointsnigdy nie były wypełniane: natywny eksport odpowiada tylko dla indeksu punktu końcowego każdej trójwpisowej krzywej sześciennej, więc zapytanie wykonuje się teraz raz na krzywą i wszystkie trzy wpisy niosą punkty kontrolne krzywej
Version 3.86.0
Dodano (Added)
ReadPdfSparseRevisionInfoodsłania ograniczone fakty o najnowszej rewizji, katalogu, szyfrowaniu, ID dokumentu i strukturze otagowanej dla postprocesorów strumieniComposePdfSparseUpdateIdzachowuje lub wyprowadza identyfikatory dokumentu dla aktualizacji przyrostowych bez materializowania kompletnego źródłowego PDF
Zmieniono (Changed)
InjectPdfAMarkersrozwiązuje teraz katalog i trailer przez rzadkie wyszukiwanie, kopiuje duże wejścia w ograniczonych fragmentach i dokleja rewizję PDF/A bez alokacji tablicy bajtów wielkości źródła na normalnej ścieżce xref- Wstrzykiwanie znaczników PDF/A zachowuje klasyczny styl wyjścia lub xref-stream, generacje katalogu i Info, identyfikatory trailera, zachowanie odmowy przy szyfrowaniu oraz reguły degradacji Level A
Version 3.85.0
Dodano (Added)
SanitiseActiveContentPdfStreamprzyjmuje należące do wywołującego obszary robocze przycinania dla własnego ograniczonego magazynu lub magazynu podpartego dyskiem
Zmieniono (Changed)
- Sanityzacja zawartości aktywnej aktualizuje teraz katalog i trailer przez rzadkie wyszukiwanie, ograniczone okna parsera i stałowymiarowe kopiowanie zakresów zamiast czytać kompletny PDF do jednej tablicy bajtów na normalnej ścieżce xref
TPdf.SaveAsSanitisedstosujeSaveMemoryLimitiSaveTemporaryDirectorydo swojego obszaru roboczego przycinania i zgłasza jego diagnostykę rozlań
Naprawiono (Fixed)
StripMetadata=Trueusuwa teraz odwołanie/Infoz trailera nawet wtedy, gdy katalog nie ma wpisu/Metadata
Version 3.84.0
Zmieniono (Changed)
TPdf.PdfVersionponownie używa teraz stanu parsera PDFium przezFPDF_GetFileVersionzamiast parsować od nowa kompletny źródłowy PDF- Zapytania o wersję czytają najwyżej ośmiobajtowy nagłówek PDF, aby zdeformowana deklaracja katalogu nie obniżyła efektywnej wersji
Version 3.83.0
Zmieniono (Changed)
PageLabelledPdfStreamrozwiązuje i aktualizuje teraz katalog przez ograniczone okna strumienia i rzadki leniwy indeks obiektów- Wyjście etykiet stron kopiuje duże źródłowe PDF w stałowymiarowych zakresach zamiast alokować kompletną tablicę bajtów dokumentu na normalnej ścieżce xref
Version 3.82.0
Zmieniono (Changed)
ApplyDefaultOpenActionczyta teraz rewizje klasyczne, xref-stream, hybrydowe i object-stream przez rzadki leniwy indeks obiektów, łącznie z dokumentami o bardzo wysokich numerach obiektów- Przetwarzanie domyślnej akcji otwarcia używa stałowymiarowych okien i ograniczonego kopiowania zakresów zamiast ładować kompletny PDF do jednej tablicy bajtów
Version 3.81.0
Dodano (Added)
PostProcessSavedPdfprzyjmuje trzy należące do wywołującego przeszukiwalne obszary robocze dla własnych limitów pamięci i przetwarzania z podparciem na dysku
Zmieniono (Changed)
TPdf.SaveAsstosujeSaveMemoryLimitiSaveTemporaryDirectorydo każdego obszaru roboczego post-processingu zapisywanego PDF i włącza ich rozlania do diagnostyki- Natywna naprawa przyrostowa xref-stream używa stałowymiarowych okien ogona i słownika z ograniczonym kopiowaniem zakresów zamiast tablic bajtów całego pliku i powtarzanych realokacji całego pliku
Version 3.80.0
Dodano (Added)
ReadAttachmentMetadataprzechwytuje nazwy załączników, opisy, podtypy MIME, zdekodowane rozmiary i czytelność w jednym ograniczonym natywnym wyliczeniuExtractAttachmentsToStreamszapisuje partię do strumieni należących do wywołującego, z limitami bajtów na plik i łącznymi, konfigurowalnymi fragmentami zapisu, anulowaniem i wynikami per element
Zmieniono (Changed)
- Ekstrakcja wsadowa zatrzymuje w pamięci PDFium Delphi Component najwyżej jeden zdekodowany załącznik zamiast materializować każdy ładunek partii
Version 3.79.0
Dodano (Added)
TPdfCacheGovernor,TPdf.CacheBudgetBytes, zapytania użycia per rodzaj i telemetria koordynują zatrzymywaną pamięć cache przez jeden wątkowo bezpieczny globalny budżet bajtów LRUTPdfTileCachei ogólnoprocesowy cache czcionek systemowych mogą dołączyć do wybranego przez wywołującego zarządcy z dokładnym rozliczaniem bitmap i bajtów czcionek
Zmieniono (Changed)
- Sparsowane sceny stron, miniatury, dane struktury, snapshoty tekstu i snapshoty obiektów stron konkurują teraz w domyślnym budżecie 256 MiB
TPdf, zachowując istniejące limity liczby wpisów - Aktywne sceny stron pozostają przypięte do zakończenia renderowania, a nieprzezroczyste natywne sceny stron używają jawnego szacowanego obciążenia, ponieważ PDFium nie odsłania konfigurowalnego API bajtów całego cache
Version 3.78.0
Dodano (Added)
TPdfLayoutPagedPlan,TPdfLayoutDocument.BuildPagedPlaniTPdf.GeneratePagedLayoutstrumieniują polecenia układu do wybranego przez wywołującego przeszukiwalnego magazynu i materializują jedną stronę naraz
Zmieniono (Changed)
- Duże wygenerowane układy mogą rozlewać polecenia do magazynu tymczasowego, zatrzymywać konfigurowalny cache stron LRU, odtwarzać nieciągłe segmenty nagłówka i stopki oraz zwalniać zawinięty tekst po każdym elemencie przepływu
Version 3.77.0
Dodano (Added)
TPdfLayoutTable, wiersze, komórki i opcje tabeli dodają tabele przechodzące przez strony z rozwiązanymi ścieżkami siatki, podpisami, powtarzanymi wierszami nagłówka, dzielonymi wierszami treści, odnośnikami i konfigurowalnymi obramowaniami
Zmieniono (Changed)
- Wygenerowane otagowane tabele zachowują jedną ciągłą strukturę Table / TR / TH / TD przez strony, trzymają grupy łączące wiersze jako atomowe i automatycznie wiążą komórki danych z ID nagłówków
Version 3.76.0
Dodano (Added)
TPdfLayoutConstraintsiSetLastItemConstraintsdodają do wygenerowanych układów trzymanie razem, trzymanie z następnym, fizyczne łamanie strony przed / po oraz konfigurowalną kontrolę wierszy wdów i sierot
Zmieniono (Changed)
BuildPlanponownie używa każdego wyniku zawijania tekstu do predykcji paginacji i emisji poleceń, co zapobiega powtarzaniu pomiaru tekstu przez trzymanie z następnym
Version 3.75.0
Dodano (Added)
TPdf.InspectPdfUaUnicodeCoveragezgłasza ograniczone dowody na poziomie obiektów dla bezpośrednich mapowań Unicode, zastąpieńActualText, błędów mapowania, brakujących wartości Unicode i nierozwiązanych obiektów źródłowych
Zmieniono (Changed)
TPdf.ValidatePdfUaponownie używa teraz pojedynczego skanu znaków o zasięgu obiektu, który wyklucza znaki Artifact i generowane oraz zapobiega maskowaniu sąsiedniej zawartości przezActualTextjednego obiektu tekstowego
Version 3.74.0
Zmieniono (Changed)
ValidatePdfUaPageContentTaggingiTPdf.ValidatePdfUazgłaszają terazpvuaiArtifactInStructureTree, gdy obiekt strony Artifact jest przypisywany przez MCID drzewa struktury, łącznie z artefaktami paginacji opartymi na ścieżkach- Skanowanie zawartości stron PDF/UA przerywa się teraz dopiero po wykryciu zarówno nieotagowanej rzeczywistej zawartości, jak i nieprawidłowego zawierania Artifact, zachowując pokrycie między stronami bez powtarzania ukończonych sprawdzeń
Version 3.73.0
Dodano (Added)
TPdf.InspectPdfUaLanguageCoveragezgłasza ograniczone dowody obiektów stron i ciągów struktury dla fragmentów w języku naturalnym, łącznie z efektywnym językiem, źródłem deklaracji, MCID, indeksem struktury i fragmentami tekstuResolvePdfUaEffectiveLanguagerozwiązuje deklaracje języka z marked-content, najbliższego przodka struktury i katalogu, z jawnymi dowodami poprawności
Zmieniono (Changed)
TPdf.ValidatePdfUazgłasza terazpvuaiNaturalLanguageUncovered, gdy tekst niebędący artefaktem lub ciągi dostępności nie ma poprawnej efektywnej deklaracji/Lang
Version 3.72.0
Dodano (Added)
TPdf.InspectPdfAMetadatazgłasza typowane dowody równoważności per pole dla wszystkich ośmiu mapowań Info na XMP z ISO 19005-1, łącznie z jawnie pustymi wartościami i błędami parsowania datTPdf.NormalizePdfAMetadatanaprawia wyłącznie niezgodne mapowane właściwości XMP, zachowując niespokrewnione przestrzenie nazw i niedomyślne alternatywy językowe
Zmieniono (Changed)
TPdf.ValidatePdfAzgłasza terazpvaiInfoXmpValueMismatch, gdy wartości Info zdekodowane przez PDFium różnią się od poprawnie typowanych wartości XMP po porównaniu z uwzględnieniem Unicode i strefy czasowej
Version 3.71.0
Dodano (Added)
InspectPdfVT2sStreamzwraca dowody warunków drukowania dla każdej części MIME PDF/VT, łącznie z tożsamością OutputIntent, pochodzeniem profilu osadzonego lub MIME, hashami ICC i faktami nagłówka oraz liczbami stron i rekordów DPartFPdfIccProfilezapewnia ograniczoną inspekcję nagłówka ICC i tabeli tagów z obsługą MD5, SHA-256, przestrzeni kolorów, wersji, klasy urządzenia, ID profilu i wielojęzycznego opisu profilu
Zmieniono (Changed)
- Walidacja PDF/VT-2s rozwiązuje teraz wcześniejsze załączniki MIME ICC przez specyfikacje plików URL
DestOutputProfileRefi walidujeCheckSum,ICCVersion,ProfileCS,ProfileName, klasę urządzenia i dozwolone procesowe przestrzenie kolorów - Wszystkie części PDF/VT wymagają teraz jednego autorytatywnego OutputIntent
GTS_PDFX, pakowania profilu osadzonego lub zewnętrznego odpowiedniego dla bazy PDF/X oraz tego samego scharakteryzowanego warunku drukowania, podczas gdy załączniki wyłącznie PDF/X pozostają poza porównaniami PDF/VT - Walidacja pojedynczego pliku PDF/VT-2 rozpoznaje teraz
DestOutputProfileRefjako zewnętrzny profil docelowy zamiast zgłaszać go jako brakujący
Version 3.70.0
Zmieniono (Changed)
- Walidacja PDF/VT sprawdza teraz
GTS_Scope,GTS_XID,GTS_EnviGTS_Encapsulatedbezpośrednio na każdym XObject zamiast pozwalać, by pobliskie lub zagnieżdżone słowniki zaspokajały wymagania podpowiedzi - Zakres
Recordrozwiązuje terazRecordLevelz pośredniego słownikaDPartRoot, a zakresStreamjest odrzucany w plikach PDF/VT-1 - Zdekodowane strumienie zawartości stron i Form XObject walidują teraz widoczność zasobów
Do, liczby wystąpieńSingleUsei własność rekordów odbiorców przez efektywne zasoby odziedziczone i hierarchię DPart - Zamknięte XObject walidują teraz booleanowski kształt, zalecany zakres, Image
Intent, odizolowane grupy przezroczystości, przestrzenie kolorów blendowania oraz bezpośrednie lub zagnieżdżone zależności zawartości opcjonalnej
Version 3.69.0
Zmieniono (Changed)
- Walidacja PAdES odrzuca teraz zduplikowane wpisy
Contents,ByteRange,SubFilter,FilteriTypezamiast akceptować wartość wybraną przez parser - Odkrywanie podpisów używa teraz liniowego skanowania słowników świadomego strumieni, rozpoznaje escapowane tokeny nazw PDF i nie da się przekierować zamkniętym zagnieżdżonym słownikiem umieszczonym przed prawdziwym
ByteRange - Walidacja
ByteRangepodpisu wymaga teraz, by wykluczona luka dokładnie odpowiadała bezpośredniemu heksadecymalnemu tokenowiContents, wciąż pozwalając na późniejsze rewizje przyrostowe - Słowniki podpisów wymagają teraz jednego
Filtero wartości nazwowej i wymuszają spójne kombinacje typu oraz subfiltruSiglubDocTimeStamp
Version 3.68.0
Dodano (Added)
TPdf.BuildPadesEvidenceReportkoreluje fakty podpisów z PDFium, politykę CMS, status zaufania i znaczników czasu, hashe ścieżki certyfikatów, pokrycie DSS/VRI oraz decyzje późniejszych rewizji dla każdego podpisuTPadesEvidenceReporteksportuje ograniczone dowody wielu podpisów jako JSON lub CSV i zgłasza telemetrię źródła, podpisu, DSS, rewizji i ucięcia
Zmieniono (Changed)
- Walidacja zaufania PAdES zapisuje teraz tożsamości SHA-256 dla certyfikatu podpisującego i uporządkowanej ścieżki certyfikatów Windows, zachowując domyślnie walidację offline
- Generowanie dowodów ponownie używa jednego zatrzymanego przechwytu bajtów źródła w analizach zgodności, zaufania, DSS i rewizji zamiast kopiować oryginalny PDF do nowego strumienia dla każdego etapu
Version 3.67.0
Dodano (Added)
TPadesSignatureFieldOptionstworzy konfigurowalne nazwy pól podpisu, wymagane wartości seed, listy powodów i atestacji prawnych, akceptowalne certyfikaty podpisujących oraz blokady pól- Podpisywanie lokalne i zdalne może tworzyć podpisy zatwierdzenia lub certyfikacji z transformacjami
FieldMDPiDocMDPz ISO 32000-1
Zmieniono (Changed)
- Podpisy certyfikacji zachowują istniejące uprawnienia katalogu, rejestrując nowy podpis przez
/Perms /DocMDP
Version 3.66.0
Dodano (Added)
RenderPageBandedToStreamzapisuje wyjście PNG lub TIFF bezpośrednio do strumienia wywołującego, z konfigurowalną wysokością pasa, kompresją PNG i limitami bajtów wyjściaRenderPageBandedToEncoderpodaje kolejne pasy strony kodekom zdefiniowanym przez wywołującego i zwraca telemetrię pasów, wierszy, pamięci, ukończenia i wyjścia
Naprawiono (Fixed)
RenderPageBandedzachowuje teraz pełną geometrię renderowania strony i przycina każdy żądany pas zamiast przeskalowywać kompletną stronę do każdego pasa
Version 3.65.0
Dodano (Added)
TPdfParallelRenderReportzgłasza teraz rozmiar źródła, szczytową przechwyconą pamięć, zaplecze przechowywania i rodzaj współdzielonego podłoża
Zmieniono (Changed)
RenderPagesParallelwspółdzieli przechwycone źródło przez niemutowalną pamięć, mapowanie pliku tylko do odczytu lub dostęp losowyFPDF_LoadCustomDocumentzamiast alokować drugą pełną tablicę bajtów dokumentu- Rozlane źródła renderowania równoległego pozostają pod limitem
SaveMemoryLimiti nie wymagają już przeładowywania kompletnego PDF do adresowalnej pamięci procesu
Version 3.64.0
Dodano (Added)
ImportImposedma teraz przeciążenie zwracająceTPdfImpositionExecutionReportz liczbami importów natywnych, unikalnych źródeł, pustych slotów, szablonów XObject, obiektów formularza, generacji zawartości i stron wyjściowych
Zmieniono (Changed)
- Impozycja o zerowej geometrii przepuszcza każdą uporządkowaną stronę źródłową przez jedno wywołanie
FPDF_ImportPagesByIndexprzed wstawieniem stron pustych i natywnym składaniem N-up - Impozycja o niestandardowej geometrii ponownie używa jednego natywnego szablonu XObject na unikalną stronę źródłową, czyta zapisane w cache metryki stron bez zmiany strony źródłowej i prealokuje dokładny magazyn planu
Version 3.63.0
Dodano (Added)
BeginPageObjectEditTransaction,CommitPageObjectEditTransactioniRollbackPageObjectEditTransactiongrupują natywne mutacje obiektów strony w atomową partię o zasięgu strony, z walidowanym wycofaniem przez snapshotPageObjectEditTransactionStatuszgłasza powiązaną stronę, stan zmian, liczbę udanych mutacji i liczbę generacji zawartości
Zmieniono (Changed)
- Zatwierdzone partie obiektów wywołują teraz
FPDFPage_GenerateContentraz, zamiast raz na każdą mutację wstawienia, usunięcia, transformacji, właściwości, znacznika, obiektu adnotacji lub wyglądu - Zapisywanie, zmiany strony, usuwanie strony, zagnieżdżone transakcje edycji oraz nieudane natywne wstawienia czy aktualizacje adnotacji są odrzucane, zanim odłożona zawartość mogłaby przepaść
Version 3.62.0
Dodano (Added)
ReadPageObjectsSnapshotprzechwytuje fakty o obiektach strony należące do wywołującego, z budżetami na obiekt, ścieżkę, przycięcie, znacznik, tekst, ciąg i czasPageObjectsSnapshotzapewnia ponowne użycie świadome rewizji w modelu LRU, z konfigurowalną pojemnością oraz telemetrią trafień, pudeł i zajętości
Zmieniono (Changed)
PageComplexityponownie używa teraz niemutowalnego snapshotu obiektów strony zamiast powtarzać natywne wyliczanie obiektów oraz zapytania o przezroczystość, ścieżki i obrazy
Version 3.61.0
Dodano (Added)
TPdfodsłania teraz zunifikowany LRU miniatur dla osadzonych i renderowanych podglądów, z konfigurowalnymi limitami wpisów i bajtów oraz telemetrią trafień, pudeł, eksmisji, zajętości i rewizjiRenderPageThumbnailprzyjmuje rotację, opcje renderowania, kolor tła iTPdfColorScheme, zachowując kontrakt bitmapy należącej do wywołującego
Zmieniono (Changed)
- Powtarzane wydobywanie i renderowanie miniatur ponownie używa natywnych wyników PDFium poprzez klucze rewizji, strony, źródła, rozmiaru, rotacji, flag, tła i schematu kolorów, łącznie z zapisanym w cache brakiem opcjonalnych osadzonych miniatur
TPdfThumbnailViewsynchronizuje swój cache bitmap widocznych stron z rewizjami miniatur dokumentu, więc edycje nie mogą zostawić nieaktualnych podglądów
Version 3.60.0
Dodano (Added)
ReadTextPageSnapshotprzechwytuje Unicode, mapowania UTF-16, geometrię i styl znaków oraz znormalizowane metadane obiektów tekstowych w jednym przebiegu, z jawnymi budżetami na znaki, obiekty, nazwy czcionek i czasTextPageSnapshotdostarcza głębokie kopie należące do wywołującego przez konfigurowalny, świadomy rewizji LRU z telemetrią pojemności, liczby, trafień i pudeł
Zmieniono (Changed)
GetStructuredTexti fizycznie układoweGetTextInReadingOrderwspółdzielą teraz ten sam snapshot tekstu i stosują sortowanie geometryczne O(n log n)
Naprawiono (Fixed)
- Małe cache snapshotów tekstu i struktury eksmitują teraz najstarszą stronę przy zapisie nowych danych pod żądanym indeksem strony, co zapobiega aliasowaniu cache między stronami
Version 3.59.0
Dodano (Added)
LifecycleActionPolicywybiera wyłączanie, wykonywanie wyłącznie jawne lub kompatybilne automatyczne wykonywanie akcji cyklu życia dokumentu i strony PDFExecuteDocumentLifecycleActionodsłania akcje JavaScript dokumentu: otwarcie, zamknięcie, zapis i druk, aExecutePageLifecycleActionuruchamia akcje otwarcia i zamknięcia strony bez zmianyPageNumber
Zmieniono (Changed)
- Bezgłowe ładowania stron otrzymują teraz te same automatyczne akcje otwarcia i zamknięcia strony co ładowania sterowane z przeglądarki, a tymczasowe strony są ponownie używane lub zwalniane pod blokadą renderowania
Version 3.58.0
Dodano (Added)
ReadStructureElementsiVisitStructureElementszapewniają iteracyjne przechodzenie otagowanej struktury z jawnymi budżetami na głębokość, element, atrybut i czas oraz ze szczegółowym statusem zakończeniaStructureElementsForPageodsłania snapshoty stron numerowane od jedynki bez zmianyPageNumber, oparte na konfigurowalnym, świadomym rewizji cache LRU z telemetrią trafień, pudeł i liczby
Zmieniono (Changed)
- Konsumenci dostępności, reflow, walidacji i przeglądarki ponownie używają teraz snapshotów struktury należących do wywołującego, dopóki istotna edycja dokumentu lub strony ich nie unieważni
Version 3.57.0
Dodano (Added)
- Kompletne natywne callbacki hosta formularzy zapewniają bezpieczne życiowo leniwe uchwyty stron, routowanie kursora widoku interakcji, powiadomienia o zmianie wartości, prostokąty zaznaczonego tekstu, zdarzenia URI i zdarzenia celów GoTo
FormHostCallbacksCompletezgłasza gotowość callbacków, aFormSelectionRectsiClearFormSelectionRectsodsłaniają ograniczoną geometrię zaznaczenia w przestrzeni strony
Naprawiono (Fixed)
- Callbacki bieżącej strony XFA tłumaczą teraz poprawnie między zerowymi indeksami stron PDFium a numeracją stron od jedynki w
PageNumberkomponentu - Callbacki URI AcroForm i XFA zachowują teraz surowe bajty URI i wymagają jawnej zgody hosta przed każdym zewnętrznym uruchomieniem
Version 3.56.0
Dodano (Added)
- Indeksowane snapshoty
PageMetricsodsłaniają wymiary strony, rotację, etykietę, przezroczystość i pięć standardowych pól strony bez zmiany aktywnej strony
Zmieniono (Changed)
- Powtarzane odczyty metadanych stron ponownie używają automatycznie unieważnianego natywnego cache snapshotów, redukując otwarcia stron w scenariuszach miniatur, preflight i analizy dokumentów
Version 3.55.0
Dodano (Added)
- Inspekcja ścieżek odsłania dokładne punkty kontrolne krzywych sześciennych Béziera, gdy załadowany build PDFium zapewnia
FPDFPath_GetBezierControlPoints, z opcjonalnym sondowaniem możliwości dla starszych bibliotek DLL FormFieldTypeAtPoint,TPdfView.FormFieldTypeAti indeksowane właściwościFontFlagsodsłaniają natywne fakty o formularzach i czcionkach bez surowych uchwytówTPdf.Signatureszwraca wszystkie natywne zawartości podpisów, ByteRanges, subfiltry, powody, czasy i uprawnienia w jednym snapshotie należącym do wywołującego
Zmieniono (Changed)
- Sprawdzenia obecności pól formularza używają teraz bezpośredniego natywnego testowania trafienia punktu zamiast otwierania i zamykania uchwytów adnotacji
Naprawiono (Fixed)
- Walidacja PDF/E-1 dopuszcza teraz zwykłe pola AcroForm, osadzone pliki i adnotacje FileAttachment, precyzyjnie zgłaszając najwyższego poziomu AcroForm
/XFAi/NeedAppearances true, łącznie z wartościami pośrednimi i ze strumieni obiektów
Version 3.54.0
Dodano (Added)
FPdfProductiondodaje mierzony wybór obrazów między wieloma kodekami, zaplecza przetwarzania kolorów i czcionek, ścieżki SVG, plany zastąpień ze stylami, transakcyjne aktualizacje pakietów XFA, wektory kodów kreskowych, modele Portfolio i bezpieczne wyodrębnianie RichMediaFPdfStandardsExecutiondodaje pomiar i konwersję GeoPDF, transakcyjną naprawę PDF/A, plany PDF/UA-2, zewnętrzne profile wielokolorowe, historyczne dowody DSS i VRI, zapytania DPart, szczegółowe fakty PDF/E i pasma PDF/R o stałej pamięciTPdf.ImportImposedukłada ograniczone plany N-up i broszurowe przez natywne ścieżki N-up lub XObjectów strony z dokładną geometrią rynny, spadu i pełzania, natomiastTPdf.CompareWithzgłasza różnice semantyczne, geometryczne i tolerancyjne różnice pikseli- Podpisywanie PAdES obsługuje teraz wtykowe walidatory ścieżki i dostawców HSM, PDF MAC dołączony do podpisu,
cms-algorithm-protectioni dokumenty polityki podpisu offline
Zmieniono (Changed)
- Silnik układu przyjmuje ograniczone HTML i Markdown, rozpływa się między kolumnami i rozwiązuje stałe, automatyczne i ułamkowe tory siatki
- Podróże tam i z powrotem XFDF zachowują teraz pola wielowartościowe i rich-text, wyskakujące okna, akcje, miejsca docelowe, nakładki wyglądu, własne przestrzenie nazw i jawny stan obecności
Version 3.53.0
Dodano (Added)
ConfigurePdfLibraryzapewnia niezmienną konfigurację natywnego renderera, czcionek, V8, Brotli, ścieżki czcionek użytkownika i piaskownicy przed pierwszym ładowaniem PDFium- Natywne atrybuty struktury, relacje adnotacji, załączniki plików adnotacji, typowane wartości słownikowe, polityki fokusu, zapytania o porządek z odnośników i formularzy oraz diagnostyka domyślnego mapowania TTF są dostępne przez ograniczone wysokopoziomowe interfejsy API
TPdfView.ReplaceFormTextAndKeepSelectionzachowuje aktywne zaznaczenie między kolejnymi edycjami, a zdarzenia zwolnienia prawego przycisku docierają teraz do natywnego silnika formularzy
Zmieniono (Changed)
- Deterministyczny czas dokumentu używa teraz stabilnej konwersji kalendarza UTC oprócz stałej epoki, wytwarzając te same metadane w każdej strefie czasowej hosta
- Zapisy ciągów załączników walidują natywny wynik i kodują klucze słownika jako UTF-8
Version 3.52.0
Dodano (Added)
TPdf.GetImageObjectRenderedBitmapzwraca wyrenderowany wynik obiektu obrazu z zastosowaną bieżącą macierzą, przestrzenią kolorów, maskami i stanem renderowaniaTPdf.TextObjectGlyphWidth,TPdf.TextObjectFontSizeiTPdf.SetTextObjectFontSizeodsłaniają natywny pomiar glifów i dokładną edycję rozmiaru czcionki obiektu tekstowegoTPdf.TransformPageObjectClipPath,TPdf.DetachFormObjectChild,TPdf.SharePageObjectMarkiTPdf.IsAnnotationObjectSubtypeSupporteddodają precyzyjną edycję obiektów zawartości i inspekcję możliwości
Version 3.51.0
Naprawiono (Fixed)
- Osiem składowych
TPdf, ogłoszonych we wcześniejszych informacjach o wersji, było zadeklarowanych w sekcji private i nie dało się ich wywoływać spoza modułuPDFium; teraz są publiczne zgodnie z dokumentacją:LinkAtPoint,GetTextRenderMode,GetTextObjectRenderedBitmap,IsAnnotationSubtypeSupported,ChooseRenderFlags,AttachmentHasKey,GetAttachmentStringValueiSetAttachmentStringValue
Zmieniono (Changed)
- Anglojęzyczna dokumentacja referencyjna obejmuje teraz każdą publiczną składową
TPdfiTPdfView: 88 składowych, które nie miały strony referencyjnej, otrzymało własne strony, a strony klas, indeks nawigacji i dokumentacja API wymieniają je wszystkie - Strony referencyjne, które wcześniej wskazywały na wspólną stronę, prowadzą teraz do strony samej składowej, dzięki czemu wynik wyszukiwania otwiera opis wyszukiwanego interfejsu API
- Dokumentacja API opisuje enumeracje i rekordy osiągalne z publicznych sygnatur, w tym typy raportowania ładowania i strumieni, typy tekstu, czcionek i OCR, typy konstruktora układu, typy walidacji PAdES, typy przetwarzania wsadowego i walidacji oraz typy renderowania równoległego
Version 3.50.0
Dodano (Added)
- Każde demo GUI otwiera się teraz z gotową do użycia zawartością zamiast pustego formularza: dema przeglądarki i laboratoryjne ładują wygenerowany dokument przykładowy, dema raportów tworzą przy uruchomieniu ukończony raport, a dema procesorów wstępnie generują przykładowe dane wejściowe, dzięki czemu główne działanie uruchamia się jednym kliknięciem
MultiPageViewer,SplitViewiFontPropertiesgenerują przy uruchomieniu dokumenty przykładowe w pamięci (sześciostronicowy pokaz, dwa dokumenty porównawcze ułożone obok siebie oraz strona z wieloma czcionkami do sprawdzania po kliknięciu)- Dema procesorów, takie jak
MergePDF,BatchExport,SplitPDF,ExtractText,PDFtoJpg,PrintPDFiPrintPreferences, wstępnie generują przykładowe pliki PDF obok pliku wykonywalnego i wstępnie wypełniają swoje kontrolki wejściowe, z idempotentną regeneracją, która nigdy nie nadpisuje istniejących plików FormFilliExtractImagesautomatycznie ładują przykładowe pliki dostarczone w ich folderach demo,ImageToPDFgeneruje dwa przykładowe bitmapy,WatermarkStampwstępnie buduje swoje przykłady stempli, aXfdfLabotwiera się na wygenerowanym dokumencie z adnotacjami tekstowymi i wyróżnieniami
Zmieniono (Changed)
CreatePDFgeneruje teraz przy uruchomieniu plikSample.pdfobok pliku wykonywalnego bez wyświetlania okna dialogowego, dzięki czemu dokument istnieje w chwili otwarcia demoTPdf.AboutInfoi metadane instalatora zgłaszają teraz spójnie Version 3.50.0
Version 3.49.0
Dodano (Added)
FORM_GetTextDirectioniFORM_SetTextDirectionze zaktualizowanych plików binarnych PDFium są teraz powiązane, co utrzymuje warstwę dynamicznego wiązania w pełnym pokryciu wszystkich 472 eksportów PDFiumTPdf.FocusedFormFieldTextDirectioniTPdf.SetFocusedFormFieldTextDirectionudostępniają kierunek tekstu aktywnego widgetu w pamięci przez nową enumeracjęTPdfFormTextDirection(ftdUnknown,ftdAuto,ftdLTR,ftdRTL), z odpowiednikami wTPdfView, które przemalowują scenę strony po zmianie kierunku
Zmieniono (Changed)
FPDF_LIBRARY_CONFIGodzwierciedla teraz układ wersji 6 z PDFium z eksperymentalnym polemm_BrotliEnableddla plików binarnych budowanych zPDF_ENABLE_BROTLITPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 3.49.0
Version 3.48.0
Dodano (Added)
- Demo
PDFViewergeneruje teraz przy uruchomieniu w pamięci sześciostronicowy dokument pokazowy za pomocą interfejsu API tworzenia dokumentów, dzięki czemu przeglądarka otwiera się z wyrenderowaną zawartością i bez przykładowego pliku na dysku - Panel miniatur oparty na
TPdfThumbnailViewudostępnia obrazy podglądowe stron z nawigacją po kliknięciu, obok drzewa zakładek we wszystkich trzech portach demo - Wyszukiwanie w przeglądarce podświetla teraz przez
HighlightSearchTextwszystkie dopasowania na bieżącej stronie zamiast pojedynczego prostokąta wyniku, a liczba dopasowań jest zgłaszana na pasku stanu - Przyciski
Nighti2-Upna pasku narzędzi przełączają jednym kliknięciem nocny dwutonowy tryb renderowania oraz tryb wyświetlania dwustronicowego rozkładu
Zmieniono (Changed)
- Zaznaczanie tekstu w przeglądarce korzysta teraz z wbudowanego mechanizmu zaznaczania
TPdfViewz zaznaczaniem słowa podwójnym kliknięciem, zaznaczaniem przeciąganiem i skrótami schowka zamiast ręcznie napisanego kodu zaznaczania - Strony renderują się z cieniem i płynnym przewijaniem, co zapewnia nowoczesny komfort czytania
TPdf.AboutInfoi metadane instalatora zgłaszają teraz spójnie Version 3.48.0
Version 3.47.0
Dodano (Added)
FPdfBenchmarkuruchamia ograniczone korpusy PDF z konfigurowalnym rozgrzewaniem i mierzonymi przebiegami, limitami stron i pikseli, kooperatywnym anulowaniem oraz statusem zaliczenia, niepowodzenia lub pominięcia dla każdego przypadkuTPdfBenchmarkReportrejestruje rozmiary bajtowe wejścia i zapisu, opóźnienia ładowania i pierwszej strony, przepustowość renderowania, czasy zapisu i ponownego otwarcia, próbkowany szczytowy rozmiar pamięci roboczej, semantyczne i pikselowe skróty SHA-256, stabilność powtórzonych przebiegów, bramki oczekiwanych skrótów oraz równoważność niezależnego ponownego otwarcia- Raporty benchmarków eksportują bezpieczne względem formuł pliki CSV i ustrukturyzowane JSON na potrzeby CI, kwalifikacji wydania i długoterminowego śledzenia wydajności
GetSkiaRenderCapabilities,RenderPageSkiaiRenderPageSkiaByIndexudostępniają opcjonalne natywne renderowanie stron i formularzy Skia z ponownym użyciem pamięci podręcznej sparsowanych stron i bez sztywnego wymogu eksportu z DLL- Wersjonowany ABI wyjścia drukowania sterowany możliwościami udostępnia dokładną enumerację płyt spotowych, renderowanie płyt, wykrywanie nadruku i podgląd nadruku, gdy zapewnia je wczytany moduł PDFium
Naprawiono (Fixed)
- Buildy PDFium bez
PDF_USE_SKIAładują się teraz normalnie zamiast kończyć się niepowodzeniem z powodu braku eksperymentalnych eksportów Skia
Zmieniono (Changed)
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 3.47.0
Version 3.46.0
Dodano (Added)
ValidatePdfRsprawdza teraz treść stron wyłącznie rastrowych, geometrię pasów, modele kolorów, efektywną rozdzielczość, parametry kompresji, wymagane metadane oraz zaszyfrowane profile PDF 2.0 za pomocą konfigurowalnych opcji walidacjiBuildPdfARepairPlanprzekształca dowody walidacji w uporządkowane według zależności kroki naprawcze z klasami bezpieczeństwa, zabezpieczeniami wpływu na podpisy i wyjściem JSONBuildPdfXProductionPreflightraportuje pola stron, osadzone fonty, output intents, koloryanty, przezroczystość, nadruk, separacje, rozdzielczość obrazów i gotowość produkcyjną bez dekodowania danych obrazów- Walidacja struktury PDF/UA-2 sprawdza teraz własność plików powiązanych, kolejność odczytu, opisy, relacje i wykrywalność
Zmieniono (Changed)
TAssociateFile.Description,TPdf.ImageInfoiTPdf.PageComplexityudostępniają metadane potrzebne przepływom pracy z plikami powiązanymi i produkcyjnym preflightemTPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 3.46.0
Version 3.45.0
Dodano (Added)
TPdfXmpPacketparsuje, edytuje, klonuje i serializuje XMP rozpoznający przestrzenie nazw, z nieznanymi przestrzeniami nazw, typowanymi kontenerami RDF, wartościami URI i zasobów, kwalifikatorami, wariantami językowymi, otoczkami pakietu i zachowanym wypełnieniemTPdf.ReadXmpPacketiSaveAsWithXmpPacketudostępniają wysokopoziomowe odczytywanie metadanych i atomowe zapisywanie wyjścia, przy czym zmiany w podpisanych dokumentach wymagają wyraźnej autoryzacji
Bezpieczeństwo (Security)
- Ograniczony czytnik XML odrzuca DTD i encje zewnętrzne oraz limituje bajty pakietu, zagnieżdżenie, węzły, atrybuty i numeryczne odwołania do znaków
Zmieniono (Changed)
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 3.45.0
Version 3.44.0
Dodano (Added)
TPdfValidationRuleRegistryrejestruje klauzule profili z wagą, zależnościami, wskazówkami napraw, dowodami oraz predykatami wbudowanymi lub własnymiTPdfValidationBudgetiTPdfValidationExecutionContextograniczają reguły, niepowodzenia, obiekty, rekursję, dowody UTF-8, zarezerwowaną pamięć, czas trwania, szybkie niepowodzenie i kooperatywne anulowanieValidatePdfFilesParallelwaliduje pliki przez izolowane dokumenty robocze, zachowując kolejność wejścia i agregując rozkłady problemów, pomiary czasu, niepowodzenia, anulowania i błędy ładowania
Zmieniono (Changed)
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 3.44.0
Version 3.43.0
Dodano (Added)
TPdfStructureElementprzenosi teraz fakty o przestrzeni nazw, mapowaniu ról przestrzeni nazw, odwołaniach, plikach powiązanych, adnotacjach, widżetach, etykietach i wyglądzie na potrzeby semantycznej walidacji PDF/UA-2ValidatePdfUa2StructureElementsi jego wyspecjalizowane walidatory sprawdzają przestrzenie nazw i zawieranie ISO/TS 32005, ograniczone siatki tabel, adnotacje, formularze, powiązania Formula/MathML, pliki powiązane, korzenie dokumentu, FENote, listy, odwołania TOC, tytuły i podpisy bez ładowaniapdfium.dllClassifyPdfUaNamespaceidentyfikuje przestrzenie nazw struktury PDF 1.7, PDF 2.0, MathML, ARIA, DPUB, własne oraz brakującePdfUa2StructureHasIssuezapewnia bezpieczne dla C++Builder zapytanie o pojedynczy problem bez zwracania zbioru Pascala przez wartość
Zmieniono (Changed)
ValidatePdfUaStructureElementsautomatycznie stosuje nowy semantyczny zestaw reguł dlapuc2, zachowując ścieżkę reguł PDF/UA-1TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 3.43.0
Version 3.42.0
Dodano (Added)
TPdfUaSaveOptions.PdfUa2tworzy wyjście PDF/UA-2 zpdfuaid:part2,pdfuaid:rev2024 i efektywną wersją katalogu PDF 2.0ValidatePdfUawykrywapuc2i raportuje brakujące metadane rewizji, pliki inne niż PDF 2.0, nienazwane konfiguracje treści opcjonalnej, przestarzałe adnotacje i ogólne nagłówki H
Zmieniono (Changed)
- Walidacja PDF/UA wybiera teraz specyficzne dla profilu reguły kolejności tabulatorów, XFA i nagłówków dla PDF/UA-1 i PDF/UA-2
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 3.42.0
Version 3.41.0
Dodano (Added)
SetPageObjectMarkParamdodaje lub zastępuje jeden parametr całkowitoliczbowy, rzeczywisty, tekstowy lub blob w istniejącym wpisie oznaczonej treści bez zastępowania samego znacznikaRemovePageObjectMarkParamusuwa jedną wybraną właściwość, zachowując nazwę znacznika i wszystkie pozostałe właściwości
Zmieniono (Changed)
- Liczby niecałkowite w oznaczonej treści przechodzą teraz w obie strony jako
pmpFloatzamiast być obcinane do całkowitoliczbowych migawek - Nieudana walidacja parametrów podczas
AddPageObjectMarkusuwa częściowo utworzony natywny znacznik TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 3.41.0
Version 3.40.0
Dodano (Added)
ConfigureSystemFontProviderinstaluje mapowanie fontów aplikacji przed startem PDFium i dostarcza zwalidowane bajty TrueType lub OpenType dla brakujących lub podstawionych fontów dokumentuTPdfSystemFontPolicysteruje podstawianiem krojów, natywną rezerwą, limitami bajtów na font i ograniczonym buforowaniem żądańGetSystemFontProviderStatisticsraportuje aktywność mapowania, pamięci podręcznej, rezerwy, odrzuceń, tabel danych i aktywnych uchwytów
Zmieniono (Changed)
- Wywołania zwrotne dostawcy udostępniają żądany przez PDFium krój, wagę, styl, zestaw znaków i pitch, utrzymując niepowodzenia wywołań zwrotnych wewnątrz granicy natywnej
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 3.40.0
Version 3.39.0
Dodano (Added)
AddCidType2Textosadza dostarczone przez wywołującego dane TrueType z jawną geometrią CID-to-GID dla każdego glifu i mapowaniami CID-to-UnicodeTPdfCidFontOptionswybiera pełne osadzanie, preferowane subsetowanie z rezerwą lub wymagane subsetowanie oraz konfiguruje ograniczone budżety fontów, glifów i UnicodeTPdfCidFontReportraportuje decyzje o subsetach, rozmiary bajtowe, unikatowe glify, stan osadzania, oczekiwany tekst, wyodrębniony tekst i integralność wyodrębniania
Zmieniono (Changed)
- Subsetowanie TrueType zachowuje żądane identyfikatory glifów, odrzuca niebezpieczne wyjście i wycofuje każdy wstawiony obiekt strony, jeśli weryfikacja mapowania lub wyodrębniania nie powiedzie się
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 3.39.0
Version 3.38.0
Dodano (Added)
BuildReflowDocumenttworzy ograniczone, wielokrotnego użytku drzewo węzłów semantycznych ze struktury Tagged PDF lub wnioskowania układu fizycznego na wybranym zakresie stronTPdfReflowDocument.ToHtmlemituje escapowane, responsywne nagłówki, akapity, listy, ilustracje, podpisy, sekcje stron i tabele z semantyką nagłówków i rozpiętościTPdfReflowOptionssteruje wykrywaniem tabel, sekcjami stron, geometrią, CSS, łamaniami wierszy, zakresem stron, anulowaniem i budżetami zasobów
Zmieniono (Changed)
- Treść tabel zastępuje nakładające się bloki akapitów podczas reflow, a stan aktywnej strony jest przywracany po sukcesie, niepowodzeniu lub anulowaniu
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 3.38.0
Version 3.37.0
Dodano (Added)
ApplyOcrSearchLayerrenderuje wybrane strony przez PDFium i wysyła ograniczone piksele BGRA top-down do dostarczonego przez wywołującegoIPdfOcrProviderTPdfOcrWordprzenosi tekst Unicode, pewność i czworokąty w przestrzeni pikseli, które przez natywną geometrię strony są mapowane na niewidoczny tekst przeszukiwalnyTPdfOcrReportrejestruje zakończenia poszczególnych stron, pominięcia z istniejącym tekstem, niepowodzenia, anulowanie, wyrenderowane piksele oraz słowa zaakceptowane lub odrzucone
Zmieniono (Changed)
- Wstawianie OCR zachowuje oryginalne strumienie obrazów skanów, filtruje zniekształcone wyniki lub wyniki o niskiej pewności, zatwierdza raz na stronę i przywraca aktywną stronę
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 3.37.0
Version 3.36.0
Dodano (Added)
ExtractTableswykrywa tabele linowane i wyrównane białymi znakami na podstawie natywnej geometrii słów i przekształconych linii ścieżekTPdfTableraportuje wiersze, kolumny, scalone zakresy, granice strony, komórki nagłówka, tryb wykrywania, pewność oraz bezpośrednie wyjście CSV lub JSONExtractDocumentTablesskanuje wszystkie strony w ramach współdzielonych budżetów i oznacza pasujące tabele kontynuowane przez granice stron
Zmieniono (Changed)
- Wyodrębnianie tabel egzekwuje konfigurowalne limity słów, linii, komórek i tabel oraz przywraca aktywną stronę po skanach na poziomie dokumentu
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 3.36.0
Version 3.35.0
Dodano (Added)
GenerateTaggedLayouttworzy nowy semantyczny dokument układu z natywną oznaczoną treścią, drzewem struktury Document, mapowaniami ParentTree i IDTree oraz metadanymi języka dokumentuTPdfLayoutSemanticsmodeluje nagłówki, sekcje, listy, ilustracje, podpisy, tabele, powiązania nagłówków, rozpiętości, tekst alternatywny, tekst rzeczywisty, języki i identyfikatory elementówTPdfLayoutDocument.AddLinkemituje adnotacje Link URI i kojarzy każdą adnotację z jej elementem struktury Link przez mapowania OBJR i StructParent
Zmieniono (Changed)
- Tekst układu domyślnie przyjmuje semantykę akapitu, natomiast nagłówki, stopki, linie, obrazy i formularze wielokrotnego użytku domyślnie stają się artefaktami, chyba że zostaną jawnie otagowane
- Walidacja planu semantycznego odrzuca zduplikowane identyfikatory, brakujących rodziców, cykle, nieprawidłowe zawieranie list lub tabel, ilustracje bez tekstu zastępczego i nierozwiązane identyfikatory nagłówków tabel przed emisją dokumentu
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 3.35.0
Version 3.34.0
Dodano (Added)
TPdf.AddShapedTextzapisuje przebiegi glifów RTL, bidi, kontekstowych i ligaturowych przez natywne systemowe kształtowanie i API fontów CID Type 2 PDFiumShapePdfTextiTPdfUniscribeTextShaperudostępniają pozycjonowane identyfikatory glifów, przyrosty, przesunięcia, klastry źródłowe, pozycje przebiegów wizualnych i poziomy bidi bez modyfikowania dokumentu
Zmieniono (Changed)
- Wygenerowane mapy ToUnicode obejmują każdy ukształtowany glif, a
ActualTextprzechowuje oryginalny logiczny ciąg Unicode dla zgodnych konsumentów wyodrębniania i dostępności - Ciągi oznaczonej treści ze znacznikami kolejności bajtów UTF-16 dekodują się teraz poprawnie przez
PageObjectMarks TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 3.34.0
Version 3.33.0
Dodano (Added)
TPdfLayoutCachedNodebuduje układ treści z podklasami przy pierwszym użyciu i obsługuje powtarzane skalowane umieszczanie przezAddCachedNodeTPdfLayoutPlanraportuje trafienia i chybienia pamięci podręcznej pomiarów, umieszczenia węzłów z pamięci podręcznej i ponownie użyte natywne XObjecty
Zmieniono (Changed)
BuildPlanponownie używa pasujących planów według pełnych ograniczeń strony oraz tożsamości treści, fontu, stylu, źródła i miernika bez powtarzania pomiaru tekstuGenerateLayoutprzekształca każdy unikatowy węzeł z pamięci podręcznej w jeden XObject związany z miejscem docelowym i tworzy lekkie obiekty Form dla każdego umieszczeniaTPdf.AboutInfo, metadane pakietu i metadane instalatora zgłaszają teraz spójnie Version 3.33.0
Version 3.32.0
Dodano (Added)
TPdfLayoutDocumentbuduje zawijany tekst, odstępy, linie, obrazy, XObjecty stron wielokrotnego użytku, jawne podziały stron, nagłówki i stopki w zmierzony plan stronGenerateLayoutpaginuje kompletny układ przed atomowym dodaniem natywnych stron i obiektów stron, ze stabilnymi odwołaniami{page}i{pages}
Zmieniono (Changed)
TPdf.AboutInfo, metadane pakietu i metadane instalatora zgłaszają teraz spójnie Version 3.32.0
Version 3.31.0
Dodano (Added)
- Konstruktory
TPdfPagePlanopisują operacje na stronach: usuwanie, przenoszenie, wstawianie, dzielenie i scalanie, bez stosowania ich ValidatePagePlanzwraca dokładną mapę stron ze starych na nowe i inwentaryzuje objęte zakładki, nazwane miejsca docelowe, etykiety stron, pola formularzy, otagowane strony, zaimportowane funkcje i podpisy
Bezpieczeństwo (Security)
- Plany, które zostawiłyby wiszące cele nawigacji lub zmieniały podpisaną treść bez wyraźnej autoryzacji, są odrzucane przed uruchomieniem jakiejkolwiek natywnej operacji na stronach
Zmieniono (Changed)
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 3.31.0
Version 3.30.0
Dodano (Added)
SaveRecoverySnapshotzapisuje pakiet odzyskiwania z sumą kontrolną i ograniczeniem rozmiaru, zawierający odcisk palca źródła i zweryfikowany dziennik edycji dokumentuRestoreRecoverySnapshotodtwarza pakiet odzyskiwania tylko wtedy, gdy jego suma kontrolna, łańcuch dziennika, odcisk palca źródła i odcisk palca odzyskanego dokumentu wszystkie się zgadzająEnableRecoveryAutosaveatomowo odświeża jawny plik odzyskiwania po każdym zmienionym zatwierdzeniu, cofnięciu lub ponowieniu bez przepisywania źródłowego PDF
Zmieniono (Changed)
InspectRecoverySnapshotraportuje źródło odzyskiwania, odciski palca, liczbę wpisów, pozycję i ograniczony magazyn bez stosowania pakietuImportEditJournali przywracanie odzyskiwania wymagają teraz wyraźnej autoryzacjiAllowSignedDocumentprzed zastosowaniem edycji w podpisanym PDF- Magazyn pakietów odzyskiwania używa skonfigurowanego ograniczonego magazynu o dostępie swobodnym i zastępowania z zapisem przez ten sam katalog dla dużych dzienników i odpornych na awarie aktualizacji automatycznego zapisu
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 3.30.0
Version 3.29.0
Dodano (Added)
BeginEditTransaction,CommitEditTransactioniRollbackEditTransactiongrupują dowolne natywne edycje dokumentu w atomowe transakcjeUndoEditiRedoEditstosują zweryfikowane SHA-256 delty odwrotne i w przód dla zmian stron, obiektów, adnotacji, załączników i metadanychExportEditJournaliImportEditJournalutrwalają ograniczone, przenośne delty z walidacją odcisku palca źródła i łańcucha skrótów do późniejszego odtworzenia
Zmieniono (Changed)
- Migawki transakcji używają odtwarzalnego natywnego wyjścia, więc niezmienione zatwierdzenia pozostają puste nawet wtedy, gdy zwykłe zapisy PDFium zawierają niedeterministyczne identyfikatory lub znaczniki czasu
- Nieudane zatwierdzenia i nieprawidłowe odtworzenie dziennika przywracają atomowo poprzedni ładowalny dokument, a liczba wpisów, zapisane bajty i rozmiar migawki pozostają pod skonfigurowanymi przez wywołującego limitami
- Podpisane PDF-y wymagają wyraźnej autoryzacji
AllowSignedDocumentprzed rozpoczęciem transakcji edycji dokumentu TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 3.29.0
Version 3.28.0
Dodano (Added)
TPdf.InspectOptionalContentwylicza warstwy OCG, konfiguracje domyślne i alternatywne, stany użycia View/Print/Export, metadane powiększenia i języka, zablokowane warstwy, tabele kolejności, grupy radio, zasady OCMD, wyrażenia widoczności oraz efektywny stan renderowaniaTPdf.SaveAsOptionalContentConfiguredzapisuje ściśle zweryfikowaną kopię z wybranymi przez wywołującego stanami warstw dla wybranego użycia i konfiguracji
Zmieniono (Changed)
- Wyjście stanów warstw aktualizuje teraz zarówno tabele
/ONi/OFFkonfiguracji, jak i słowniki stanu Usage OCG, aby PDFium zastosował żądaną widoczność przez swój natywny kontekst renderowania - Zapisy konfiguracji odrzucają nieznane grupy, zmiany zablokowanych warstw, konflikty grup radio, zaszyfrowane pliki tymczasowe oraz podpisane pliki bez wyraźnej autoryzacji i domyślnie usuwają reguły stanu automatycznego, aby zachować deterministyczny wynik
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 3.28.0
Version 3.27.0
Dodano (Added)
TPdf.RenderPageByIndexrenderuje dowolną stronę opartą na jedynce w dokładnym rozmiarze pikseli bez zmiany aktywnej strony edycji ani wyzwalania zdarzeń zmiany stronyPageSceneCacheCapacity,PageSceneCacheCountiClearPageSceneCacheudostępniają ograniczone sterowanie pamięcią podręczną scen i diagnostykę
Zmieniono (Changed)
- Indeksowane renderowanie stron, renderowane miniatury i wyodrębnianie osadzonych miniatur ponownie używają teraz sparsowanego stanu stron PDFium przez domyślną ośmioelementową pamięć podręczną LRU
- Wpisy scen są unieważniane przy aktywacji strony, edycji, zmianach drzewa stron, wywołaniach zwrotnych stanu formularza, jawnym czyszczeniu i zamykaniu dokumentu, a trwające renderowania są bezpiecznie utrzymywane do zwolnienia
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 3.27.0
Version 3.26.0
Dodano (Added)
TPadesSignatureAlgorithmInforaportuje OID-y skrótu, podpisu, klucza publicznego i nazwanej krzywej każdego podpisującego CMS wraz z jego niezależnie ocenionym stanem polityki algorytmówInspectPadesSignatureAlgorithmiEvaluatePadesSignatureAlgorithmrozpoznają profile P-256, P-384, P-521, brainpoolP256r1, brainpoolP384r1, brainpoolP512r1, Ed25519 i Ed448
Bezpieczeństwo (Security)
- Walidacja PAdES odrzuca teraz niezgodności krzywych eliptycznych i skrótów, OID-y podpisów ECDSA niespójne ze skrótem CMS, nienazwane parametry EC, parametry Ed25519 oraz długości wyjścia SHAKE256 Ed448 inne niż 512 bitów
- Natywna weryfikacja CMS pozostaje źródłem ważności kryptograficznej, a niedostępne algorytmy i nierozpoznane krzywe są raportowane jako
pcsUnsupportedzamiast być traktowane jako nieprawidłowe podpisy TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 3.26.0
Version 3.25.0
Dodano (Added)
TPdf.ExportObjectGrapheksportuje aktywne obiekty klasyczne, strumieni xref i strumieni obiektów jako ograniczony, typowany JSON z jawnymi słownikami, tablicami, ciągami, nazwami, wartościami skalarnymi, odwołaniami pośrednimi, licznikami bajtów strumieni i opcjonalnymi skrótami SHA-256 strumieniTPdf.SaveAsObjectGraphPatchedustawia lub usuwa sprawdzone względem schematu wartości słowników najwyższego poziomu przez typowane wartości poprawek null, Boolean, integer, real, name, text-string i indirect-reference
Bezpieczeństwo (Security)
- Eksport grafu obiektów egzekwuje budżety obiektów, rekursji, ciągów i bajtów wyjścia, a łatkanie waliduje każdą operację przed dostarczeniem i odrzuca wiszące odwołania, zduplikowane operacje, zaszyfrowane wejścia, chronione zmiany filtrów lub długości strumieni oraz podpisane dokumenty bez wyraźnej autoryzacji
- Łatki grafu obiektów są przygotowywane jako rewizja przyrostowa, ponownie materializowane do weryfikacji xref, ściśle ładowane przez PDFium oraz kopiowane lub atomowo przemianowywane dopiero po pomyślnym przejściu wszystkich sprawdzeń
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 3.25.0
Version 3.24.0
Dodano (Added)
TPdf.ValidatePadesTrustweryfikuje każdy wykrywalny podpis oddzielony względem dokładnego oryginalnegoByteRange, ocenia powiązanie signing-certificate-v2 i bieżące zaufanie systemowe Windows oraz raportuje niezależne stany podpisu, łańcucha, unieważnień i znacznika czasuTPdf.ValidatePadesTrustAsyncwykonuje migawkę oryginalnie załadowanego źródła przed wysłaniem, raportuje etapowany postęp dla parsowania, kryptografii, budowania łańcucha, AIA, OCSP, CRL i pracy znacznika czasu RFC 3161 oraz obsługuje kooperatywne anulowanieTPadesTrustValidationOptionswybiera zaufanie offline lub online, opcjonalną weryfikację unieważnień i znaczników czasu, ograniczony limit czasu pobierania URL, token anulowania i wywołanie zwrotne postępu
Bezpieczeństwo (Security)
- Znacznik czasu podpisu i tokeny Document Time-stamp walidują teraz swój odcisk wiadomości SHA-256, dołączony podpis CMS, łańcuch TSA i opcjonalny stan unieważnień niezależnie od zwykłego podpisu dokumentu
- Walidacja zaufania nigdy nie haszuje kopii przepisanej przez PDFium, domyślnie pobiera certyfikaty wyłącznie z pamięci podręcznej offline i raportuje stany nieobsługiwane lub nieoznaczone zamiast traktować niedostępne natywne zaufanie lub dowody unieważnień za ważne
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 3.24.0
Version 3.23.0
Dodano (Added)
TPdf.RenewPadesArchiveTimestampiRenewPadesArchiveTimestampToStreamdodają nowy Document Time-stamp RFC 3161 do istniejącego łańcucha podpisów PAdES bez zmiany jakichkolwiek historycznych bajtówTPadesArchiveTimestampOptionssteruje dostępem TSA, noncem, zarezerwowaną pojemnością tokenu i opcjonalnym pełnym odświeżeniem DSS, aTPadesArchiveTimestampReportrejestruje poziomy źródła i wyniku, długości łańcuchów, długości bajtowe i tożsamość zwróconego znacznika czasu
Naprawiono (Fixed)
- Nowe i odnowione wyjście PAdES B-LTA deklaruje ESIC ExtensionLevel 2, a walidacja B-LT nie wymaga już poziomu 2, chyba że obecny jest Document Time-stamp
Bezpieczeństwo (Security)
- Odnowienie haszuje dokładnie oryginalnie załadowane bajty plus ewentualną żądaną aktualizację DSS, odrzuca zaszyfrowane lub niekompletne źródła, waliduje wykrywalny wynik B-LTA przed zapisem wyjścia i przygotowuje wyjście plikowe przed zastąpieniem
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 3.23.0
Version 3.22.0
Dodano (Added)
TPdf.AnalyzeSignatureRevisionsrekonstruuje oryginalny łańcuch przyrostowych rewizji i zwraca zmiany obiektów dla każdego podpisu, sklasyfikowane względem uprawnień DocMDP i FieldMDPTPadesRevisionAnalysisReportodróżnia dozwolone aktualizacje formularzy, adnotacji, podpisów i materiałów walidacji od niedozwolonych zmian stron lub dokumentu, nierozstrzygniętych przypadków i podejrzanych definicji w tle
Bezpieczeństwo (Security)
- Analiza rewizji wykrywa nieodwoływane definicje obiektów, przedefiniowania obiektów podpisów, aktywną treść, zniekształcone łańcuchy rewizji i nierozwiązane obiekty skompresowane, egzekwując ograniczone budżety rewizji, obiektów i zmian
- Analiza zawsze używa oryginalnie załadowanego pliku, bufora pamięci, własnego strumienia lub ukończonego źródła progresywnego, a nie bajtów przepisanych przez PDFium
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 3.22.0
Version 3.21.0
Dodano (Added)
TPdf.PreparePadesRemoteSignaturetworzy zastępczkę oddzielonego podpisu o stałej szerokości i zwraca trwałe żądanie zawierające skrót dokumentu SHA-256, dokładnyByteRange, współrzędne rezerwacji i odcisk palca przygotowanego PDFTPdf.CompletePadesRemoteSignaturekończy sesje podpisujące HSM, chmurowe lub przerwane po zweryfikowaniu utrwalonego żądania i zwróconego CMSTPdf.SavePadesRemoteSigningRequestiTPdf.LoadPadesRemoteSigningRequestzapewniają stabilny, wersjonowany binarny format sesji dla granic procesów i maszyn
Bezpieczeństwo (Security)
- Ukończenie odrzuca zmodyfikowane przygotowane PDF-y, zmienione współrzędne
ByteRange, ponownie użyte niepuste zastępczki, przewymiarowane wartości CMS, nieobsługiwane kształty SignedData, brakujące atrybuty signing-certificate-v2 oraz skróty wiadomości CMS niezgodne z przygotowanym dokumentem TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 3.21.0
Version 3.20.0
Dodano (Added)
TPadesDssOptions.Vriszapisuje jeden pośredni słownik/Type /VRIna podpis, kluczowany wielkimi literami SHA-1 pełnej zdekodowanej wartości/Contentsłącznie z wypełnieniemTPadesDssVriwybiera materiał certyfikatów, OCSP i CRL przez zwalidowane indeksy, a podpisywanie PAdES B-LT i B-LTA tworzy teraz VRI nowego podpisu automatycznie
Zmieniono (Changed)
- Certyfikaty DSS, odpowiedzi OCSP i CRL są deduplikowane po skrócie treści ze stabilną kolejnością pierwszego wystąpienia, sprawdzaniem kolizji co do bajtu i przemapowaniem odwołań VRI przed zapisaniem jakichkolwiek bajtów docelowych
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 3.20.0
Version 3.19.0
Dodano (Added)
TPdf.GetStructuredTextprzekształca bieżącą stronę w wielokrotnego użytku rekordy bloków, wierszy i stylowanych rozpiętości, zachowując indeksy znaków źródła, skalary Unicode, geometrię, nazwy fontów, rozmiary, wagi i kąty tekstuTPdfStructuredTextOptionswybiera kolejność strumienia treści lub układu fizycznego, opcjonalne wzbogacenie o fonty i semantykę oraz fail-closed maksymalny budżet znaków- Fragmenty Tagged PDF i heurystycznie odczytywanej treści wzbogacają bloki o rodzaj struktury, poziom nagłówka, język, źródło i tożsamość elementu struktury, a niedopasowany tekst alternatywny Figure pozostaje reprezentowany
Zmieniono (Changed)
- Wyodrębnianie układu fizycznego używa teraz porządkowania znaków O(n log n), geometrycznie rosnących buforów wierszy i rozpiętości, klastrowania wierszy i kolumn, buforowanej konstrukcji Unicode oraz buforowania fontów sąsiadujących niepustych obiektów tekstowych dla przewidywalnej wydajności dużych stron
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 3.19.0
Version 3.18.0
Bezpieczeństwo (Security)
TPdf.SaveAsRedactedstosuje każdy prostokąt/Redactdo odizolowanej migawki dokumentu, usuwa każdy przecinający się obiekt strony najwyższego poziomu i maluje nieprzezroczysty prostokąt zastępczy bez zmiany załadowanego dokumentu- Zredagowane wyjście usuwa adnotacje redakcji, opcjonalnie usuwa inne przecinające się adnotacje, kasuje natywne osadzone załączniki i wycina z katalogu
/AF, aktywną treść, formularze, metadane oraz nieosiągalne obiekty wcześniejszych rewizji TPdfRedactionOptionssteruje kolorem zastępczym, usuwaniem nakładających się adnotacji i fail-closed budżetem skanowania obiektów stron, aTPdfRedactionReportrejestruje każde usunięcie i metrykę wyjściaTPdfSanitiseOptions.StripAssociatedFilesusuwa teraz domyślnie odwołania do plików powiązanych na poziomie katalogu
Zmieniono (Changed)
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 3.18.0
Version 3.17.0
Dodano (Added)
TPdf.RenderPagesParallelrenderuje równolegle żądania stron oparte na jedynce, a każdy wątek roboczy posiada niezależnie załadowany moduł PDFium, dokument i stan strony pochodzące z jednej przechwyconej migawki dokumentuTPdfParallelRenderOptionssteruje DPI, liczbą wątków roboczych, obrotem, natywnymi flagami renderowania, kolorem tła, limitami pikseli na stronę i łącznymi limitami utrzymywanego wyjściaTPdfParallelRenderReportzachowuje kolejność żądań i zwraca należące do wywołującego bufory BGRA lub RGBA top-down z sukcesem, anulowaniem, niepowodzeniem, wymiarami, czasem i szczegółami diagnostycznymi dla każdej strony- Progresywne renderowanie w wątkach roboczych odpytuje
IPdfCancellationTokenmiędzy natywnymi fragmentami, a nieprawidłowe żądania i niepowodzenia budżetu pozostają odizolowane do odpowiednich wyników TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 3.17.0
Version 3.16.0
Dodano (Added)
TPdfEncryptionRevision.erR7dodaje wyjście ISO/TS 32003 AES-256-GCM z/V 6,/R 7,/CFM /AESV4i wymaganym rozszerzeniem deweloperskim PDF 2.0- Każdy zaszyfrowany ciąg i strumień otrzymuje unikatowy 96-bitowy IV, szyfrogram o niezmienionej długości i 128-bitowy znacznik uwierzytelnienia, a
EncryptMetadata = Falsezachowuje bajty strumienia metadanych DecryptAesGcmDocumentByteswaliduje hasła użytkownika lub właściciela, zaszyfrowane uprawnienia, opcjonalne samodzielne dane PDF MAC i każdy znacznik GCM przed zwróceniem bajtów zwykłego tekstu zgodnych z PDFium- Wyjście AESV4 można łączyć z
TPdfEncryptOptions.EnableIntegrityProtection, aby uwierzytelnienie GCM per obiekt i ochrona całego dokumentu ISO/TS 32004 PDF MAC współistniały - Szyfrowanie używa teraz prawidłowych klasycznych wpisów tabeli odsyłaczy zamiast interpretować tekst o kształcie obiektu wewnątrz danych strumienia jako obiekty pośrednie
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 3.16.0
Version 3.15.0
Dodano (Added)
TPdfEncryptOptions.EnableIntegrityProtectionzapisuje samodzielne kody uwierzytelnienia PDF MAC ISO/TS 32004 dla dokumentów AES-256 Standard Security Handler rewizji 5 i 6TPdf.ValidatePdfMacweryfikuje dokładne oryginalne bajty źródła, ścisły/ByteRangeobejmujący EOF, CMSAuthenticatedData, klucz pliku pochodny od hasła, uwierzytelnione atrybuty, opakowany klucz MAC i wartość HMACFPdfHmacdodaje HMAC-SHA256 i HKDF-SHA256, aFPdfAesdodaje prymitywy RFC 3394 AES-256 Key Wrap i uwierzytelnionego odpakowaniaTPdfMacValidationResultodróżnia ważne, nieobecne, nieprawidłowe i nieobsługiwane kody uwierzytelnienia z tekstem diagnostycznymTPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 3.15.0
Version 3.14.0
Dodano (Added)
TPdf.ValidatePadesweryfikuje teraz oddzielone podpisy CMS względem dokładnych oryginalnych segmentów/ByteRangew systemie Windows, łącznie z podpisanymi atrybutami i wartością podpisuTPadesValidationResultudostępnia zbiorczy stan integralności oraz stany ByteRange, CMS,signing-certificate-v2, zaufania systemowego, unieważnień i znacznika czasu dla każdego podpisu, bez utożsamiania nieobsługiwanych lub niesprawdzonych dowodów z nieprawidłowym podpisem- Powiązanie certyfikatu podpisującego jest sprawdzane SHA-256, łańcuchy certyfikatów używają wyłącznie pamięci podręcznej oceny zaufania systemowego Windows, a natywne kody błędów pozostają dostępne do diagnostyki
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 3.14.0
Version 3.13.1
Naprawiono (Fixed)
TPdf.ValidatePadesbada teraz oryginalny plik, buforowaną pamięć lub bajty własnego strumienia zamiast kopii przepisanej przez PDFium, która mogła unieważnić offsety lub odrzucić słowniki podpisów- Sprawdzenia PAdES
/ByteRangeakceptują teraz podpisy obejmujące wcześniejszą kompletną rewizję PDF z następującymi po niej prawidłowymi aktualizacjami przyrostowymi, a przy okazji walidują zakresy Document Time-stamp TPadesValidationResult.SourceStatusodróżnia walidację oryginalnego źródła od niedostępnego lub niekompletnego wejścia progresywnego, a predykaty zgodności odrzucają wyniki bez oryginalnych bajtówTPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 3.13.1
Version 3.13.0
Dodano (Added)
FPdfSha3zapewnia wolne od zależności prymitywy SHA3-256, SHA3-384, SHA3-512 i SHAKE256 dla ISO/TS 32001 i pokrewnej pracy kryptograficznej PDF 2.x- Konteksty przyrostowe wchłaniają arbitralnie podzielone wejście, a SHAKE256 obsługuje powtarzane wywołania squeeze oraz wyjście przekraczające granice stawki gąbki
- Pomocnicy jednorazowe dla tablic bajtów i szesnastkowych małych liter uzupełniają API strumieniowe, z jawną walidacją cyklu życia i rozmiaru w Delphi, C++Builder i Lazarus
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 3.13.0
Version 3.12.0
Dodano (Added)
TPdf.ImportFDFimportuje dane formularzy FDF z plików lub strumieni i stosuje sparsowane wartości przez istniejącą ścieżkę pól widżetówFdfImportFromStreamiFdfImportFromFileparsują bezpośrednie lub pośrednie pola hierarchiczne, literały i ciągi szesnastkowe PDF, PDFDocEncoding, tekst Unicode, wartości nazw i jawne wartości puste w ramach ograniczonych budżetów zasobów- Eksport FDF zapisuje teraz nie-ASCII nazwy pól i wartości jako zgodne ze standardami ciągi tekstowe UTF-16BE i bezpiecznie escapuje nazwy plików źródłowych
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 3.12.0
Version 3.11.0
Dodano (Added)
TPdf.DetectPageSkewrenderuje bieżącą stronę w niskim DPI i wykrywa kąt skrzywienia, rzutując ciemne piksele na kandydujące kąty obrotu, i zwraca kąt maksymalizujący wariancję sum wierszy (wyrównanie wierszy tekstu) z dokładnością ok. 0,1 stopniaTPdfSkewReportudostępnia wykryty kąt, pewność i wymiary próbkiTPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 3.11.0
Version 3.10.0
Dodano (Added)
TPdf.GetTextInReadingOrderwyodrębnia tekst bieżącej strony w surowej kolejności strumienia treści lub w kolejności układu fizycznego (od góry do dołu, od lewej do prawej) przezFPDFText_GetCharBox+ wyodrębnianie znaków posortowanych po pozycji, dzięki czemu tekst wielokolumnowy i wizualnie przestawiony czyta się naturalnie- Enumeracja
TPdfReadingOrderwybiera międzyroContentOrderiroPhysicalLayout TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 3.10.0
Version 3.09.0
Dodano (Added)
TPdfImageOptimizeOptions.PreserveBilevelpomija jednobitowe obrazy dwupoziomowe (ImageMask / skany grafiki liniowej) podczasOptimizeImages, więc próbkowanie metodą najbliższego sąsiada nie niszczy ich ostrych krawędziTPdfImageOptimizeOptions.MinDimensionpomija obrazy mniejsze niż próg (zwykle ikony lub elementy dekoracyjne, które nie skorzystają z dalszej redukcji)TPdfImageOptimizeOptions.Defaultzapewnia zalecany punkt startowy (docelowe 150 DPI, współczynnik 1.5, zachowane obrazy dwupoziomowe, minimalny wymiar 8)TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 3.09.0
Version 3.08.0
Dodano (Added)
TPdfTileCachezapewnia ograniczoną pamięć podręczną LRU wyrenderowanych kafelków stron, kluczowaną rewizją dokumentu, stroną, powiększeniem, obrotem, flagami renderowania i prostokątem urządzenia, więc niezmienione kafelki nie są ponownie renderowane przy przemalowaniach, a nieaktualne kafelki po wcześniejszym zapisie są automatycznie usuwaneTTileKeyudostępnia złożony klucz pamięci podręcznej ze statyczną fabrykąCreatei komparatoremEqualsTPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 3.08.0
Version 3.07.0
Dodano (Added)
TPdf.GetAnnotationFontColoriTPdf.SetAnnotationFontColoropakowują wcześniej związane, ale nieużywaneFPDFAnnot_GetFontColoriFPDFAnnot_SetFontColor, udostępniając odczyt i zapis koloru tekstu widżetu do edycji pól formularzy bez bezpośredniej ingerencji w słownik adnotacjiTPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 3.07.0
Version 3.06.0
Dodano (Added)
TPdf.RenderPageBandedrenderuje bieżącą stronę poziomymi pasami przez wywołanie zwrotne, więc plakaty i strony techniczne można eksportować bez przydzielania pełnej docelowej bitmapy — każdy pas renderuje się do świeżo utworzonejTBitmapo żądanej wysokości pasa i jest zwalniany po powrocie wywołania zwrotnegoTPdfBandCallbackudostępnia kontrakt dla pojedynczego pasa (indeks pasa, przesunięcie top-y, bitmapa) ze zwracaną wartością Boolean, pozwalającą wywołującym wcześnie anulować renderowanie pasoweTPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 3.06.0
Version 3.05.0
Dodano (Added)
TPdf.RenderPageProgressiveWithColorSchemesteruje natywną pętlą renderowania progresywnego schematem kolorów dla słabowidzących przezFPDF_RenderPageBitmapWithColorScheme_Start, pozwalając wywołującym nadpisać kolory wypełnienia i obrysu ścieżek oraz wypełnienia i obrysu tekstu na potrzeby dostępności, zachowując świadomą anulowania pętlę ContinueTPdfColorSchemeudostępnia cztery pola nadpisaniaTColorz wartościąDefault, która deleguje do wbudowanych kolorów PDFium, gdy wszystkie pola toclDefaultTPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 3.05.0
Version 3.04.0
Dodano (Added)
TPdf.ExportFDFserializuje wartości pól formularzy jako dokument FDF (ISO 32000-1 §12.7.11) obok istniejącej ścieżki XFDF, ponownie używając tego samego modelu danychTXfdfField, więc wywołujący zbierają pola raz i emitują dowolny z formatówFdfExportToStreamiFdfExportToFilewFPdfXfdfudostępniają niskopoziomowy serializator FDF dla wywołujących, którzy budują kolekcje pól niezależnie od załadowanegoTPdfTPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 3.04.0
Version 3.03.0
Dodano (Added)
TPdf.SaveAsSanitisedzapisuje czystą kopię o jednej rewizji, która wycina aktywną treść z katalogu (/OpenAction,/AAkatalogu,/Names,/AcroForm,/Metadata), a następnie przycina nieosiągalne obiekty, więc osierocone ciała JavaScript, akcji i załączników znikają z ciała plikuTPdfSanitiseOptionsudostępnia niezależne sterowanie wycinaniem per wektor plus opcjonalny przebieg przycinania osiągalności;TPdfSanitiseReportrejestruje liczbę wyciętych wpisów, liczbę przyciętych obiektów, liczby bajtów i ewentualny błądTPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 3.03.0
Version 3.02.0
Dodano (Added)
TPdf.SaveAsPageLabelledzapisuje pełną kopię PDF, której drzewo liczbowe/PageLabelsw katalogu zostaje zastąpione dostarczonymi zakresami, stosując style numeracji dziesiętnej, rzymskiej wielkimi i małymi literami oraz literowej wielkimi i małymi literami z opcjonalnymi ciągami tekstowymi przedrostków i numerami startowymi zgodnie z ISO 32000-1 §12.4.2TPdfPageLabelRange,TPdfPageLabelRanges,TPdfPageLabelStyleiTPdfPageLabelReportudostępniają model zakresów, enumerację stylów oraz liczby bajtów i zakresów na zapis- Istniejące wpisy
/PageLabelsw katalogu są wykrywane i odrzucane, chyba że zostanie przekazaneReplaceExisting=True, w którym to przypadku stary wpis jest usuwany przed wstrzyknięciem nowych zakresów TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 3.02.0
Version 3.01.0
Dodano (Added)
TPdf.FlattenPageRotationwypala bieżący/Rotatekażdej strony w strumień treści, pola stron i prostokąty adnotacji, a następnie resetuje/Rotatedo 0 — opakowującFPDFPageObj_TransformF+FPDFAnnot_GetRect/SetRect+FPDFPage_SetMediaBox/SetCropBox+FPDFPage_SetRotation, więc układ wizualny zostaje zachowany bez polegania na wskazówce wyświetlania obrotuTPdfFlattenRotationOptionsudostępnia sterowanie przekształceniem adnotacji, zamianą pól stron i automatyczną aktualizacją per strona;TPdfFlattenRotationReportrejestruje strony przetworzone, pominięte i nieudane oraz łączną liczbę przekształconych obiektów i adnotacjiTPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 3.01.0
Version 3.00.0
Dodano (Added)
TPdf.StampPagesFromPdfstempluje stronę źródłową jako pozycjonowaną, przeskalowaną, opcjonalnie obróconą nakładkę lub podkładkę Form XObject na jednej lub większej liczbie stron docelowych, opakowującCreateXObjectFromPage+FPDFPageObj_SetMatrix+FPDFPageObj_SetBlendMode+FPDFPage_InsertObjectAtIndexz jawnymi zasadami pól stron, zakotwiczenia, marginesu, skali, obrotu, mieszania i porządku zTPdfOverlayOptionsiTPdfOverlayReportudostępniają sterowanie umieszczaniem, przekształceniem, mieszaniem i porządkiem z oraz liczby ostemplowanych, nieudanych i pominiętych stron per stronaTPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 3.00.0
Version 2.99.0
Dodano (Added)
TPdf.RefreshAppearanceselektywnie regeneruje strumień wyglądu pojedynczego widżetu przezFPDFAnnot_SetAP, unikając przebudowy całej strony przezNeedAppearancesTPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.99.0
Version 2.98.0
Dodano (Added)
TPdfView.MouseDownkieruje teraz zdarzenia prawego przycisku do natywnego silnika wypełniania formularzy przezFORM_OnRButtonDown, umożliwiając menu kontekstowe i interakcje z widżetami przy kliknięciu prawym przyciskiem- Pozycje mapy tras 78 (mapowanie adnotacji linków), 82 (prezentacja widżetów) i 83 (model atrybutów struktury) potwierdzone jako już kompletne dzięki istniejącej infrastrukturze
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.98.0
Version 2.97.0
Dodano (Added)
TPdf.SetDeterministicTimeiTPdf.RestoreActualTimepozwalają testom i odtwarzalnym buildom wstrzyknąć stały czas utworzenia, modyfikacji i bieżący przez obsługiwane natywne wywołania zwrotneTPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.97.0
Version 2.96.0
Dodano (Added)
TPdf.GetWidgetAdditionalActionJavaScriptodczytuje JavaScript dodatkowych akcji widżetu dla danego wyzwalacza zdarzenia przezFPDFAnnot_GetFormAdditionalActionJavaScriptbez wykonywania jakiegokolwiek skryptuTPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.96.0
Version 2.95.0
Dodano (Added)
TPdf.GetObjectTextwyodrębnia tekst Unicode tekstowego obiektu strony przezFPDFTextObj_GetTextdo precyzyjnej edycji treści i diagnostyki kodowaniaTPdf.GetObjectsByTypezwraca indeksy wszystkich obiektów strony pasujących do kategorii (tekst, ścieżka, obraz, formularz, cieniowanie) do selektywnego wyjścia kategoriiTPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.95.0
Version 2.94.0
Dodano (Added)
TPdf.AttachmentHasKey,GetAttachmentStringValueiSetAttachmentStringValueodczytują, zapisują i sprawdzają wartości własnych rozszerzeń specyfikacji plików w osadzonych załącznikachTPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.94.0
Version 2.93.0
Dodano (Added)
TPdf.InsertObjectAtIndexwstawia obiekt strony na żądaną pozycję stosu przezFPDFPage_InsertObjectAtIndexzamiast zawsze dokładać na końcuTPdf.UpdateAnnotationObjectzatwierdza zedytowany obiekt wyglądu adnotacji przezFPDFAnnot_UpdateObject, więc zmiany obiektów stron należących do adnotacji utrzymują się niezawodnieTPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.93.0
Version 2.92.0
Dodano (Added)
TPdf.InsertClipPathtworzy prostokątną ścieżkę przycinającą i wstawia ją do bieżącej strony przez natywne ścieżkiFPDF_CreateClipPathiFPDFPage_InsertClipPath, uzupełniając istniejący inspektorPageObjectClipPathTPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.92.0
Version 2.91.0
Dodano (Added)
TPdf.GetPageComplexityskanuje bieżącą stronę i raportuje liczby obiektów obrazów, ścieżek i tekstu oraz łączne segmenty ścieżek, łączne piksele obrazów i obecność przezroczystości do planowania renderowaniaTPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.91.0
Version 2.90.0
Dodano (Added)
TPdf.IsAnnotationSubtypeSupportedpyta załadowany DLL PDFium, jakie podtypy adnotacji obsługuje, przed edycjąTPdf.ChooseRenderFlagswybiera natywne flagi renderowania (halftone, ograniczona pamięć podręczna obrazów) na podstawie finalnej skali i rozmiaru docelowego do adaptatywnego próbkowania obrazówTPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.90.0
Version 2.89.0
Dodano (Added)
TPdf.GetTextRenderModeudostępnia natywny tryb renderowania tekstu (wypełnienie, obrys, przycinanie) tekstowego obiektu strony do diagnostyki tworzeniaTPdf.GetTextObjectRenderedBitmaprenderuje pojedynczy obiekt tekstowy do odizolowanej bitmapy przez natywną ścieżkęFPDFTextObj_GetRenderedBitmapTPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.89.0
Version 2.88.0
Dodano (Added)
TPdf.GetThumbnailwraca teraz do wyrenderowania zamiennika, gdy strona nie ma osadzonej miniatury, implementując preferencję najpierw miniatury osadzonejTPdf.LinkAtPointzwraca, czy w danym punkcie współrzędnych strony istnieje natywny link, używającFPDFLink_GetLinkAtPointzamiast skanów samych prostokątówTPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.88.0
Version 2.87.0
Dodano (Added)
TPdf.AuditActiveContentzwraca migawkęTPdfActiveContentAuditz liczbą akcji JavaScript, liczbą osadzonych plików, liczbą podpisów, typem formularza XFA i uprawnieniami dokumentu bez wykonywania jakiegokolwiek skryptu lub akcjiTPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.87.0
Version 2.86.0
Dodano (Added)
TPdf.GetFeatureInventoryskanuje każdą stronę raz i zwraca ujednolicony rekord liczb obiektów tekstu, ścieżek, obrazów, form XObject i cieniowań wraz z faktami o załącznikach, podpisach, typie formularza, uprawnieniach i wersji PDFTPdfFeatureInventoryagreguje fakty z całego dokumentu, które wcześniej wymagały osobnych wywołań właściwości, w jedną migawkęTPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.86.0
Version 2.85.0
Dodano (Added)
TPdf.SaveAsReproducibleprzepisuje dokument tak, aby dwa zapisy tego samego stanu w pamięci dawały bajtowo identyczne wyjście- Niedeterministyczne znaczniki czasu
/Info(/CreationDate,/ModDate) są wycinane, a źródłowe/ID(pochodzące od bajtów zależnych od zegara) jest pomijane, podczas gdy kolejność obiektów i generacje pozostają stabilne TPdfReproducibleReportraportuje liczby zachowanych i przyciętych obiektów oraz liczbę wyciętych wpisów znaczników czasuTPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.85.0
Version 2.84.0
Dodano (Added)
TPdf.SaveAsInlineImagesExternalisedprzepisuje dokument, wyodrębniając każdy obraz wewnętrznyBI/ID/EIdo wielokrotnego użytku XObjectu obrazu i zastępując blok wewnętrzny operatorem/ImN Do- Skróty słowników obrazów wewnętrznych (
/W,/H,/BPC,/CS,/F, wartości przestrzeni kolorów i wartości filtrów) są rozwijane do pełnych nazw XObjectów obrazów, więc wyodrębniony obiekt jest zgodny ze standardami - Słownik
/Resources /XObjectstrony jest aktualizowany o nowe odwołania XObject, a przepisany strumień treści jest kompresowany Flate TPdfInlineImageExternaliseReportraportuje liczby externalizowanych, pominiętych i nieudanych oraz liczbę utworzonych XObjectówTPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.84.0
Version 2.83.0
Dodano (Added)
TPdf.SaveAsFlateRecompressedprzepisuje dokument i ponownie koduje kwalifikujące się strumienieFlateDecodez maksymalną kompresją, zastępując strumień tylko wtedy, gdy zmierzona oszczędność bajtów przekracza próg wywołującegoTPdfFlateRecompressOptionswybiera minimalną oszczędność w bajtach i minimalny współczynnik oszczędności, więc już optymalne strumienie pozostają nietknięteTPdfFlateRecompressReportraportuje liczby strumieni przekompresowanych, pominiętych i nieudanych wraz z bajtowymi sumami strumieni oryginalnych i przekompresowanych- Numery obiektów i generacje pozostają stabilne; zmieniają się tylko przekompresowane ładunki strumieni i ich bezpośrednie wartości
/Length, więc każdy ocalały wpis odsyłacza pozostaje ważny TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.83.0
Version 2.82.0
Dodano (Added)
TPdf.OptimizeImagesprzechodzi przez każdy obiekt obrazu strony i próbkuje w dół te, których efektywne DPI umieszczenia przekracza wybrany przez wywołującego cel, a następnie zatwierdza każdą dotkniętą stronę przez natywny generator treściTPdfImageOptimizeOptionswybiera docelowe DPI i minimalny współczynnik, więc ponownie kodowane są tylko obrazy faktycznie nadpróbkowaneTPdfImageOptimizeReportraportuje liczby obrazów zoptymalizowanych, pominiętych i nieudanych wraz z ustrukturyzowanym komunikatem niepowodzenia- Próbkowanie w dół używa przebiegu metody najbliższego sąsiada po natywnym buforze bitmapy PDFium, zachowując format źródłowy, stride i kanał alfa, a
FPDFImageObj_SetBitmapponownie koduje wynik TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.82.0
Version 2.81.0
Dodano (Added)
TPdf.SaveAsDeduplicatedprzepisuje dokument jako jedną czystą rewizję, która spija zgodne fonty, obrazy i form XObjecty na jeden współdzielony reprezentant- Rekurencyjny odcisk palca treści łączy każdy słownik zasobów, jego pełny osiągalny podgraf i jego surowy ładunek strumienia, więc duplikaty scalają się tylko wtedy, gdy ich cała treść jest identyczna
- Każde odwołanie odsyłacza do scalonego duplikatu jest przepisywane na ocalałego reprezentanta, a przebudowana klasyczna tabela odsyłaczy utrzymuje stabilne numery obiektów
TPdfDedupReportraportuje liczby zachowanych i przyciętych obiektów oraz scalone liczby fontów, obrazów i form XObjectów per kategoriaTPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.81.0
Version 2.80.0
Dodano (Added)
TPdf.SaveAsReachableprzepisuje dokument jako jedną czystą rewizję, która zachowuje tylko obiekty pośrednie osiągalne z katalogu i słownika /Info traileraTPdfPruneReportraportuje liczby zachowanych i przyciętych obiektów pośrednich wraz z rozmiarami bajtowymi źródła i wyjścia oraz ustrukturyzowane przyczyny niepowodzeń dla zaszyfrowanego lub zniekształconego wejścia- Nieosiągalne osierocone obiekty pozostawione przez aktualizacje przyrostowe, scalania stron lub naprawione zapisy są wymiatane, a przebudowany klasyczny odsyłacz i trailer zachowują
/Root,/Infoi/IDbez zmiany numeracji TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.80.0
Version 2.79.0
Dodano (Added)
TPdf.CreateDocumentSearchtworzy wyszukiwanie w przód lub wstecz w całym dokumencie, zwracające jedno dopasowanie na raz bez budowania indeksu tekstu całego dokumentuTPdfDocumentSearchResultraportuje stronę opartą na jedynce, zakres znaków, dopasowany tekst i prostokąty w przestrzeni strony dla każdego wyniku- Sesje wyszukiwania przyjmują
IPdfCancellationToken, utrzymują tylko bieżące uchwyty stron i tekstu PDFium i bezpiecznie kończą się przy zamknięciu dokumentu TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.79.0
Version 2.78.0
Zmieniono (Changed)
TPdfRangeRequestSchedulerwywłaszcza teraz nakładające się transfery o niższym priorytecie, więc krytyczne dla stron wskazówki PDFium nie czekają za pobieraniami w tle- Rzadkie bajty dostępne zewnętrznie anulują zbędne aktywne transfery, a wywołania zwrotne transportu zastąpione lub zduplikowane zwracają False bez publikowania nieaktualnego pokrycia
- Podniesienie priorytetu zachowuje niezależne historie ponowień, a wywłaszczanie transportu nie zużywa już budżetu ponowień nietkniętych ogonów zakresów
TPdfRangeRequestStatistics.SupersededRequestCountraportuje pracę transportu wypartą przez wskazówki o wyższym priorytecie lub zewnętrznie dostarczone pokrycieTPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.78.0
Version 2.77.0
Dodano (Added)
TPdf.SaveAsNormalizedContentzapisuje znormalizowaną składniowo treść stron do strumienia lub atomowo zastąpionego pliku i raportuje liczby stron znormalizowanych, pominiętych i scalonychNormalizePdfContentSequencezapewnia ograniczoną samodzielną normalizację tokenów dla zdekodowanych sekwencji strumieni treści
Zmieniono (Changed)
- Tablice
/Contentsstron można teraz scalać w jeden strumień, zachowując ciągi, nazwy, ładunki obrazów wewnętrznych, nieznane operatory i stan graficzny między strumieniami - Zniekształcone tokeny, niezbalansowane zakresy stanu, nieobsługiwane filtry, zaszyfrowane wejście i przepisania podpisanych dokumentów mają jawne zasady i ustrukturyzowane raportowanie stanu
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.77.0
Version 2.76.0
Dodano (Added)
TPdfStreamInspectorinwentaryzuje dowolne fizyczne strumienie PDF i raportuje offsety obiektów, surowe długości, łańcuchy filtrów, DecodeParms, znaczniki plików zewnętrznych, stan szyfrowania oraz natywne ścieżki obrazów lub załącznikówCopyRawDatakopiuje kompletne zakodowane ładunki lub zwalidowane okna bajtów, aDecodeDatastosuje predyktory ASCIIHex, ASCII85, LZW, Flate, RunLength, TIFF 8-bit i PNG w zadeklarowanej kolejnościTPdfStreamInspectOptionsogranicza zasoby źródła, surowe, zdekodowane, słownikowe, liczbę strumieni i współczynnik ekspansji, z ustrukturyzowanymi raportami dla limitów, zniekształconych danych, nieobsługiwanych kodeków, szyfrowania i niepowodzeń zapisu
Zmieniono (Changed)
- Rozstrzyganie długości strumieni udostępnia teraz dokładne zakresy dla bezpośrednich i pośrednich wartości
/Length, w tym strumienie zerowej długości i ładunki zawierające dosłowną sekwencjęendstream TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.76.0
Version 2.75.0
Dodano (Added)
TPdfLoadOptionsdodaje zasadę zgodną, ścisłą i odzyskiwania do ładowania z pliku, pamięci, zakresów bajtów i własnych strumieniTPdfLoadReportraportuje natywną ścieżkę odzyskiwania, ważność xref, uszkodzone offsety, konflikty wpisów, liczby rewizji, budżety audytu i ustrukturyzowane problemy dla dokumentów klasycznych, hybrydowych i ze strumieniem xrefTPdf.SaveAsRepairedtworzy pełną kopię o jednej rewizji i niezależnie ładuje ją ściśle przed dostarczeniem zweryfikowanego strumienia lub atomowym zastąpieniem pliku docelowego
Zmieniono (Changed)
- Istniejące przeciążenia ładowania zachowują zgodne zachowanie i publikują teraz natywną ważność xref oraz stan odzyskiwania przez
LastLoadReport - Ścisłe ładowanie odrzuca dokumenty, które wymagały natywnej przebudowy xref lub nie przeszły audytu strukturalnego, a wyjście naprawy podpisanego dokumentu wymaga wyraźnej autoryzacji wywołującego
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.75.0
Version 2.74.0
Dodano (Added)
TPdf.MergeFilesscala listy źródeł plikowych z zakresami stron i hasłami per źródło, utrzymując otwarty najwyżej jeden dokument źródłowyTPdfBatchMergeOptionsdodaje obsługę błędów stop lub skip, importy w zakresie źródła lub porcjami, zasady formularzy i konspektu, sterowanie wstawianiem, wywołania zwrotne postępu, anulowanie, kopiowanie preferencji przeglądarki i sterowanie wycofaniemTPdfBatchMergeReportraportuje strony zatwierdzone i wycofane, wyniki źródeł, natywne wywołania importu, największą partię, szczyt otwartych źródeł, detekcje zasad, problemy i status końcowy
Zmieniono (Changed)
- Domyślna ścieżka wsadowa wykonuje jeden natywny import stron na źródło, aby PDFium mógł ponownie użyć sklonowanych obiektów w tym źródle, a następnie zamyka źródło przed otwarciem następnego pliku
- Tryb porcjowany zapewnia dokładniejsze punkty anulowania i mniejsze natywne partie, a nieudane częściowe źródła oraz wyniki stop lub anulowania mogą usunąć wszystkie strony wstawione przez operację
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.74.0
Version 2.73.0
Dodano (Added)
TPdfRandomAccessStorezapewnia bezpieczne dla wątków sekwencyjne i pozycjonowane we/wy, trzyma małą treść w ograniczonej pamięci i raz przelewa ją do prywatnego magazynu tymczasowego przy wybranym przez wywołującego proguTPdf.SaveMemoryLimitiSaveTemporaryDirectorykonfigurują odstawianie zapisu, aLastSaveSpillCountiLastSaveLargestMemoryBufferudostępniają mierzalne diagnostyki per zapis
Zmieniono (Changed)
- Bufory odstawiania zapisu, konwersji standardów, walidacji, szyfrowania, DSS i PAdES współdzielą teraz ograniczony magazyn roboczy z wyłącznymi plikami przelewowymi usuwanymi przy zamknięciu i czyszczeniem pamięci
- Własne wywołania zwrotne bloków PDFium serializują zwykłe przesunięcia strumienia i używają pozycjonowanych odczytów niezależnych od kursora, gdy są wsparte przez
TPdfRandomAccessStore - Skan możliwości XFA oparty na plikach czyta teraz nakładające się bloki o stałym rozmiarze zamiast kopiować kompletny PDF do pamięci
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.73.0
Version 2.72.0
Dodano (Added)
TPdf.BeginIncrementalSave,CommitIncrementalSaveiEndIncrementalSavezapewniają sesję rewizji, która dopisuje tylko zmienione lub nowo utworzone obiekty pośrednieTPdfIncrementalCommitInforaportuje liczbę zmienionych obiektów, dopisane bajty, łączne bajty wyjścia i liczbę udanych rewizji dla każdego zatwierdzenia
Zmieniono (Changed)
- Każde brudne zatwierdzenie zachowuje kompletne poprzednie wyjście jako dokładny bajtowy prefiks, nie emituje rewizji, gdy nic się nie zmieniło, i kontynuuje klasyczny format lub format strumienia xref źródła
- Natywne przyrostowe wyjście strumienia xref jest naprawiane o wymagany typ, wpis własny, długość, indeks i terminator obiektu przed dalszym przetwarzaniem
- Dokumenty zaszyfrowane są odrzucane przed rozpoczęciem sesji, a dokumenty podpisane wymagają wyraźnego zezwolenia wywołującego, więc polityki podpisów nie można przypadkowo obejść
- Przeciążenie plikowe kończy równoległy plik tymczasowy przed atomowym zastąpieniem miejsca docelowego i wycofuje stan sesji po każdym niepowodzeniu zapisu lub zastąpienia
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.72.0
Version 2.71.0
Dodano (Added)
TPdf.SaveAsObjectStreamzapisuje pliki PDF 1.5+ z ograniczonymi skompresowanymi grupami obiektów i czystym strumieniem xref zawierającym kompletne wpisy typu 2PackPdfObjectStreamsmoże zmodernizować klasyczne, hybrydowe, strumieniowe xref i istniejące wejście strumieni obiektów po rozstrzygnięciu aktywnej rewizji
Zmieniono (Changed)
- Lokalne dla stron porządkowanie obiektów, adaptacyjne szerokości pól xref, bezpośredni dostęp do katalogu oraz konfigurowalne sufity elementów i zdekodowanych bajtów równoważą rozmiar pliku z wydajnością dostępu swobodnego
- Przeciążenie plikowe kończy równoległy plik tymczasowy przed atomowym zastąpieniem miejsca docelowego, a nieprawidłowe opcje przyrostowe, wersji i grupowania są odrzucane przed rozpoczęciem wyjścia
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.71.0
Version 2.70.0
Dodano (Added)
TPdf.SaveAsLinearizedzapisuje prawdziwy PDF Fast Web View do strumienia lub pliku, używając grupowania obiektów pierwszej strony, dwóch sekcji odsyłaczy oraz tabel wskazówek offsetów stron i obiektów współdzielonych z Annex F- Aktywne elementy strumieni obiektów są materializowane automatycznie, co pozwala wejściom strumieni xref i strumieni obiektów stać się wyjściem przyjaznym zakresom bez zmiany widocznej treści stron
Zmieniono (Changed)
- Przeciążenie plikowe kończy równoległy plik tymczasowy przed atomowym zastąpieniem miejsca docelowego, a przeciążenie strumieniowe zachowuje normalne opcje zapisu PDFium i jawne sprawdzenia wersji
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.70.0
Version 2.69.0
Dodano (Added)
TPdfRangeRequestSchedulerprzekształca wskazówki zakresów bajtów PDFium w uprzyorytetyzowaną, scaloną, ograniczoną rozmiarem pracę transportu bez wymuszania ciągłego pobierania- Pełne i częściowe uzupełnienia, ograniczone ponowienia, deduplikacja rzadkiej dostępności, statystyki żądań i bezpieczne dla generacji anulowanie obsługują pipeline'y HTTP Range i własnych transportów
TPdfProgressiveDocument.RangeRequestsautomatycznie odbiera wskazówki dokumentu, formularza i stron, podnosząc priorytet tylko dokładnie tych bajtów, które blokują interaktywną stronę
Zmieniono (Changed)
CancelProgressiveLoadanuluje teraz aktywną pracę zakresów przed rozebraniem natywnej dostępności i strumienia, a nieaktualne uzupełnienia transportu są bezpiecznie ignorowaneTPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.69.0
Version 2.68.0
Dodano (Added)
TPdfProgressiveDocumentutrzymuje sesję dostępności PDFium przy życiu, podczas gdy zdalny lub rosnący strumień o dostępie swobodnym otrzymuje zakresy bajtów żądane przez PDFiumCheckDocumentAvailability,CheckFormAvailabilityiLoadAvailablePagezwracają scalone wskazówkiTPdfDownloadRange, więc host może pobrać tylko dane potrzebne do otwarcia i wyświetlenia zlinearyzowanej stronyAvailableByteCountobsługuje monotoniczne ciągłe pobieranie, aOnDataAvailableobsługuje rzadkie i nieuporządkowane pamięci podręczne zakresów
Zmieniono (Changed)
- Pliki zlinearyzowane używają natywnych bram PDFium: dokumentu progresywnego, formularza i stron; pliki niezlinearyzowane automatycznie przełączają się na natywny moduł ładowania własnych strumieni po pojawieniu się kompletnego pliku
TPdfStreamAdaptermoże udostępniać logiczny rozmiar końcowy różny od aktualnie przechowywanych bajtów, zachowując jawny limit 4 GiBFPDF_FILEACCESSTPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.68.0
Version 2.67.0
Dodano (Added)
TPdfView.AllowFormEventswyłącza zdarzenia myszy, klawiatury i fokusu, które przeglądarka przekazuje do warstwy wypełniania formularzy, dla przeglądarki tylko do odczytu lub takiej, która sama steruje interakcją z formularzem- Pola formularzy nadal renderują się normalnie po wyłączeniu: ładowanie i zamykanie stron są celowo pozostawione bez bramki, ponieważ te inicjalizują warstwę formularzy zamiast reagować na wejście
- Przełącznik dołącza do istniejących przełączników
AllowUserPageChangeiAllowUserTextSelectioni domyślnie przyjmuje True, więc istniejące zachowanie pozostaje niezmienione
Zmieniono (Changed)
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.67.0
Version 2.66.0
Dodano (Added)
- Akcje nazwane wywoływane przez dokument (ISO 32000-1 §12.6.4.11) docierają teraz do hosta przez nowe zdarzenie
OnNamedAction; wcześniej każda z nich była odrzucana - Pozostawione nieobsłużone, cztery standardowe nazwy nawigacyjne —
NextPage,PrevPage,FirstPage,LastPage— przenoszą stronę, obcinając na pierwszej i ostatniej zamiast zawijać TPdf.PerformNamedActionpozwala aplikacji wywołać to samo zachowanie bezpośrednio, zwracając False dla nazwy, która nie ma znaczenia dostarczonego przez bibliotekę
Naprawiono (Fixed)
- Test szyfrowania mierzył ciało strumienia, skanując wstecz od
endstream, co czasem brało bajt szyfrogramu za terminator wiersza i zgłaszało sporadyczne niepowodzenie; biblioteka była poprawna przez cały czas
Zmieniono (Changed)
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.66.0
Version 2.65.0
Dodano (Added)
BuildToUnicodeCMapgeneruje ToUnicode CMap (ISO 32000-1 §9.10.3), którego potrzebuje font CID, aby jego tekst dało się kopiować, przeszukiwać i odczytywać technologiom wspomagającym — bez niej tekst renderuje się poprawnie, ale wyodrębnia się jako nic- Wpisy są dzielone przy limicie 100 na blok narzuconym przez specyfikację, zduplikowane glify zapisywane raz, a
.notdefpomijany - CMap stosuje konwencję CID = GID, więc żaden strumień
CIDToGIDMapnie jest potrzebny obok niego
Zmieniono (Changed)
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.65.0
Version 2.64.0
Dodano (Added)
- Adnotacje odręczne i stemple rysują się z własnych obiektów stron, a nie ze strumienia treści strony, i te obiekty są teraz osiągalne:
AnnotationObjectCountiAnnotationObjectInfoje odczytują,AddPathToAnnotationprzekazuje adnotacji ścieżkę zbudowaną przezCreatePath, aRemoveAnnotationObjectjedną usuwa - Budowanie wyglądu stempla nie wymaga już zewnętrznego narzędzia: utwórz ścieżkę jak zwykle, a następnie przekaż ją adnotacji zamiast stronie
- PDFium przyjmuje obiekty stron tylko na podtypach odręcznych i stempli, więc każdy inny podtyp jest odmawiany z komunikatem nazywającym ograniczenie zamiast kończyć się niejasnym niepowodzeniem
Zmieniono (Changed)
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.64.0
Version 2.63.0
Dodano (Added)
TPdf.AddStandardFontTextrysuje tekstem jednym z 14 fontów, które każdy czytnik PDF musi zapewniać, nie osadzając w ogóle programu fontu — powstały plik jest mierzalnie mniejszy niż ten sam tekst narysowany przezAddText, który osadza znaleziony krój systemowy- Nowa enumeracja
TPdfStandardFontnazywa wszystkie 14 krojów, więc wywołujący nie może się pomylić literówką w nazwie fontu bazowego; PDFium dopasowuje te nazwy dokładnie, a literówka po cichu dałaby brak fontu - PDF/A i PDF/X wymagają osadzenia wszystkich fontów, więc wyjście celujące w te profile powinno nadal używać
AddText
Zmieniono (Changed)
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.63.0
Version 2.62.0
Dodano (Added)
TPdf.TextObjectGlyphOutlinezwraca obrys jednego glifu fontu obiektu tekstowego jako segmenty ścieżki, do konwertowania tekstu na grafikę wektorową lub badania glifu, który podstawienie fontu mogło zmienić- Wynik ponownie używa istniejącego typu
TPdfPathSegments, więc odczytuje się dokładnie jak obrys narysowanego obiektu ścieżki - Współrzędne są we własnej przestrzeni projektowej fontu, znormalizowane tak, że jeden em to 1.0; żądany rozmiar fontu ich nie skaluje, więc wywołujący, który chce jednostek urządzenia, mnoży sam przez rozmiar w punktach
- Pusty wynik oznacza, że font nie udostępnia obrysu dla tego glifu, co nie jest błędem; żądanie glifu obiektu nietekstowego zgłasza wyjątek
Zmieniono (Changed)
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.62.0
Version 2.61.0
Dodano (Added)
TPdf.InspectAvailabilityraportuje, co PDFium może powiedzieć o PDF bez ładowania go jako dokumentu: czy plik jest zlinearyzowany („zoptymalizowany pod sieć”), czy pełne parsowanie by się powiodło, czy zawiera dane formularza i którą stronę przeglądarka pokazałaby pierwszą- Nowe typy
TPdfAvailability,TPdfLinearizationiTPdfFormAvailabilityprzenoszą odpowiedzi; strumień jest czytany, ale nie zatrzymywany, a jego pozycja jest przywracana przy powrocie - To zamyka ostatnią lukę w rodzinie
FPDFAvail_*, która była związana i załadowana, ale nie miała wywołującego nigdzie w bibliotece - Delphi, Lazarus i C++Builder każde obejmują raportowane fakty, gwarancję pozycji strumienia i odrzucenie strumienia nil
Zmieniono (Changed)
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.61.0
Version 2.60.0
Dodano (Added)
- Oznaczona treść (ISO 32000-1 §14.6) jest teraz osiągalna z wysokopoziomowego API:
PageObjectMarksodczytuje każdy znacznik BDC i jego listę właściwości z obiektu strony,AddPageObjectMarkjeden zapisuje,RemovePageObjectMarkjeden usuwa, aPageObjectMarkedContentIDraportuje MCID - Nowe typy
TPdfContentMark,TPdfContentMarkParamiTPdfMarkParamKindprzenoszą nazwę znacznika i jego typowane parametry (integer, float, string, blob), z rodzajem wartości rozstrzygniętym przez PDFium zamiast zgadywanym z gettera, który się powiedzie - Dodanie znacznika przebudowuje strumień treści strony, więc znacznik przetrwa zapis; musiało to być jawne, ponieważ
SaveAssam z siebie nie regeneruje treści - Delphi, Lazarus i C++Builder niosą po sześć przypadków, w tym jeden, który rozpakowuje zapisany strumień treści, aby potwierdzić, że operator BDC i jego lista właściwości naprawdę wylądowały
Zmieniono (Changed)
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.60.0
Version 2.59.0
Dodano (Added)
TPdfAnnotationzyskujeHasLinkUriiLinkUri, więcCreateAnnotationmoże teraz wyprodukować działający link sieciowy: adnotacja zapisywana jest z akcją/URIwskazującą podany adres- Ustawienie URI linku na podtypie innym niż
anLinkzgłasza wyjątek, ponieważ tylko adnotacja Link niesie słownik akcji - Pole jest na razie tylko do zapisu; odczytanie celu linku z powrotem przechodzi przez rodzinę
FPDFLink_*, która potrzebuje uchwytu dokumentu - Delphi, Lazarus i C++Builder wszystkie weryfikują, że zapisane bajty niosą akcję
/URIi adres docelowy
Zmieniono (Changed)
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.59.0
Version 2.58.12
Dodano (Added)
- Walidacja PDF/X zgłasza
pvxiTrimBoxWithArtBox, gdy strona niesie/TrimBoxi/ArtBoxrazem; obie opisują gotową stronę, więc RIP nie ma jak rozstrzygnąć, która jest wiążąca (ISO 15930) - Walidacja PDF/X zgłasza
pvxiPageBoxOutsideMediaBox, gdy/TrimBoxlub/BleedBoxsięga poza/MediaBox, w tym pole o ujemnym początku; pola poza medium nie da się naświetlić - Prostokąty są normalizowane przed porównaniem, więc akceptowana jest dowolna kolejność rogów, a pole dotykające dokładnie krawędzi medium nadal przechodzi walidację
- Raporty preflight klasyfikują oba problemy pod strukturą i nazywają konkretne lekarstwo
- Delphi, Lazarus i C++Builder wszystkie obejmują dwa odrzucone przypadki i jeden zgodny
Zmieniono (Changed)
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.58.12
Version 2.58.11
Dodano (Added)
- Walidacja PDF/UA zgłasza
pvuaiTociWithoutToc, gdy dokument otagowuje wpisy TOCI, ale nigdy nie otagowuje należnego im kontenera TOC, co zostawia technologię wspomagającą ogłaszającą elementy spisu treści bez spisu treści (ISO 14289-1 §7.7) - Raporty preflight klasyfikują problem pod strukturą i zalecają owinięcie wpisów w element TOC
- C++Builder zyskuje pierwsze pokrycie testowe PDF/UA obok przypadków Delphi i Lazarus
Zmieniono (Changed)
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.58.11
Version 2.58.10
Dodano (Added)
- Walidacja PDF/A zgłasza
pvaiSymbolicTrueTypeEncoding, gdy symboliczny font TrueType niesie wpis/Encoding; ISO 19005-1 §6.3.7 dopuszcza tylko wbudowaną cmap fontu, więc/Encodingbyłby z nią sprzeczny - Flaga symboliczna jest odczytywana z
/FontDescriptor, niezależnie od tego, czy jest zapisana bezpośrednio w słowniku fontu, czy wskazana pośrednio; font niesymboliczny zachowuje swoje wymagane/WinAnsiEncodinglub/MacRomanEncodingbez bycia oflagowanym - Raporty preflight klasyfikują problem pod treścią i zalecają usunięcie wpisu
- Delphi i Lazarus obejmują przypadek oflagowany plus oba zaakceptowane; C++Builder obejmuje przypadek oflagowany i niesymboliczny
Zmieniono (Changed)
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.58.10
Version 2.58.9
Dodano (Added)
- Walidacja PDF/A zgłasza limity implementacyjne kontenerów z ISO 19005-1 Annex C:
pvaiNameOverLimitdla nazw dłuższych niż 127 bajtów,pvaiArrayOverLimitpowyżej 8191 elementów,pvaiDictOverLimitpowyżej 4095 wpisów ipvaiNestingOverLimitpowyżej 28 poziomów zagnieżdżenia - Limity są włączne, więc kontener stojący dokładnie na limicie nadal przechodzi walidację; testy przypinają zarówno odrzuconą, jak i zaakceptowaną stronę każdej granicy
- Raporty preflight klasyfikują cztery problemy pod strukturą i nazywają konkretny limit w każdej rekomendacji
- Delphi i Lazarus obejmują wszystkie cztery limity plus przypadki graniczne; C++Builder obejmuje limit tablicy i granicę
Zmieniono (Changed)
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.58.9
Version 2.58.8
Dodano (Added)
- Walidacja PDF/R zgłasza
pvriPageImageMismatch, gdy liczba obrazów nie zgadza się z liczbą stron; ISO 23504-1 §6.5.1 czyni każdą stronę dokładnie jednym obrazem pasowym, więc strona bez obrazu lub z kilkoma nie jest zgodna - Testy Delphi, Lazarus i C++Builder obejmują stronę bez obrazu, stronę z dwoma oraz zgodny przypadek jednoobrazowy
Zmieniono (Changed)
- Testy wstrzykiwania znaczników PDF/R startują teraz ze strony źródłowej, która już niesie obraz pasowy, ponieważ wstrzykiwanie znaczników dodaje metadane i nie może dostarczyć treści strony
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.58.8
Version 2.58.7
Dodano (Added)
- Walidacja PDF/R zgłasza
pvriFontForbidden, gdy strona wymienia zasób fontu; strona PDF/raster niesie zeskanowany obraz i nic więcej (ISO 23504-1 §6.5.2) - Walidacja PDF/R zgłasza
pvriForbiddenImageFilterdla kodowań pasowych poza białą listą, więc/LZWDecode,/RunLengthDecode,/ASCII85Decode,/ASCIIHexDecode,/JBIG2Decodei/Cryptsą odrzucane, a/CCITTFaxDecode,/DCTDecode,/JPXDecodei/FlateDecodeprzechodzą (ISO 23504-1 §6.6) - Raporty preflight klasyfikują oba problemy pod treścią i zalecają konkretne lekarstwo
- Testy Delphi, Lazarus i C++Builder obejmują zasób fontu, odrzucony filtr oraz stronę używającą tylko kodowań z białej listy
Zmieniono (Changed)
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.58.7
Version 2.58.6
Dodano (Added)
- Walidacja PDF/E zgłasza
pveiFontNotEmbedded, gdy dokument wykazuje użycie fontu, ale nie niesie osadzonego programu fontu, więc wymóg jest sprawdzany zarówno na ścieżce bez DLL, jak i przez PDFium - Rysunek techniczny musi renderować się identycznie dekady później, więc ISO 24517-1 nie zwalnia żadnego z 14 standardowych fontów; sprawdzenie obejmuje
/Type1,/TrueType,/Type0i/MMType1tak samo - Raporty preflight klasyfikują nowy problem pod treścią i zalecają osadzenie każdego programu fontu
- Testy Delphi, Lazarus i C++Builder obejmują deskryptor bez programu, osadzony
/FontFile2oraz dokument, który w ogóle nie używa fontu
Zmieniono (Changed)
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.58.6
Version 2.58.5
Dodano (Added)
InjectPdfEMarkerszapisuje teraz output intent wymagany przez ISO 24517-1 §6.2: osadzony docelowy profil ICC sRGB, nazywający go output intent/GTS_PDFE1oraz tabelę/OutputIntentskatalogu, wszystko w ramach tej samej aktualizacji przyrostowej- Strumień profilu wyprowadza swoje
/Nz nagłówka ICC zamiast zakładać trzy komponenty, więc profil CMYK zostałby opisany poprawnie - Walidacja PDF/E zgłasza
pveiMissingOutputIntentipveiMissingIccProfile, więc kandydat bez zadeklarowanego warunku kolorystycznego nie jest już akceptowany - Testy Delphi, Lazarus i C++Builder obejmują zaakceptowany output intent, taki bez profilu docelowego oraz katalog w ogóle bez output intent
Zmieniono (Changed)
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.58.5
Version 2.58.4
Dodano (Added)
- Walidacja PDF/X zgłasza teraz
pvxiFontNotEmbeddedze skanu bajtów, więc nieosadzony font jest łapany na ścieżce bez DLL zamiast tylko przez sprawdzenie wsparte PDFium - W przeciwieństwie do PDF/A standardowe 14 fontów nie jest zwolnione w PDF/X, więc każde użycie fontu bez osadzonego programu fontu jest zgłaszane
- Sprawdzenie pozostaje konserwatywne: uruchamia się tylko wtedy, gdy plik wykazuje użycie fontu, a nie niesie żadnego
/FontFile,/FontFile2ani/FontFile3, ponieważ liczenie deskryptorów względem programów daje fałszywe pozytywy przy współdzielonych deskryptorach - Testy Delphi, Lazarus i C++Builder obejmują deskryptor bez programu, osadzony program oraz dokument, który nie używa fontu
Zmieniono (Changed)
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.58.4
Version 2.58.3
Dodano (Added)
- Walidacja PDF/X zgłasza teraz
pvxiColorSpaceForbidden, gdy kandydat PDF/X-1a niesie/DeviceRGB,/CalRGBlub/Lab, które ISO 15930-1 §6.2 wyklucza ze swojej wymiany CMYK - Sprawdzenie jest bramkowane wyłącznie na PDF/X-1a, więc PDF/X-3 i nowsze nadal pozwalają na RGB i przestrzenie niezależne od urządzenia, które łączą z output intent
- Sprawdzane są tylko jednoznaczne tokeny nazw przestrzeni kolorów; strumień
ICCBasedwymaga rozstrzygnięcia/Ni pozostaje przy warstwie modelu obiektów - Testy Delphi, Lazarus i C++Builder obejmują oflagowaną przestrzeń RGB, oflagowaną przestrzeń Lab, zaakceptowaną parę CMYK i skali szarości oraz dozwolony przypadek na PDF/X-3
Zmieniono (Changed)
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.58.3
Version 2.58.2
Dodano (Added)
- Walidacja PDF/X zgłasza teraz
pvxiTransparencyForbiddendla grupy przezroczystości lub aktywnej maski miękkiej, których zakazują ISO 15930-1 §6.2 (PDF/X-1a) i ISO 15930-3 §6.3 (PDF/X-3) - Sprawdzenie jest bramkowane na wykrytej zgodności, więc PDF/X-4 i PDF/X-6 nadal pozwalają na przezroczystość, a plik, którego poziomu nie udało się zidentyfikować, nigdy nie jest oflagowany za regułę, która może go nie dotyczyć
- Maska miękka jawnie wyłączona przez
/SMask /Nonenie jest traktowana jako przezroczystość PdfHasActiveSMaskprzeniosło się zFPdfPdfado interfejsuFPdfPdfCommon, aby każdy walidator mógł współdzielić jedną regułę maski miękkiej- Testy Delphi, Lazarus i C++Builder obejmują oflagowaną grupę na X-1a, oflagowaną maskę miękką na X-3, wyłączoną maskę miękką oraz dozwolony przypadek na X-4
Zmieniono (Changed)
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.58.2
Version 2.58.1
Dodano (Added)
- Walidacja PDF/X sprawdza teraz kształt output intent wymaganego przez ISO 15930-7 §6.2.4:
pvxiOutputIntentSchemezgłasza podtyp, który jest obecny, ale nie jest/GTS_PDFX, apvxiOutputIntentMissingIdentifierzgłasza brakujący/OutputConditionIdentifier - Podtyp jest dopasowywany jako cały token nazwy, więc dłuższa nazwa taka jak
/GTS_PDFXVersionjuż nie przechodzi, podczas gdy zapis tej samej nazwy escapowany#xxnadal przechodzi - Output intent, który w ogóle nie niesie podtypu, jest zostawiany w spokoju, ponieważ jego brak jest już zgłaszany przez problemy poziomu znaczników
- Raporty preflight składają oba problemy pod kategorią output intent i sugerują poprawkę
- Testy Delphi, Lazarus i C++Builder obejmują zaakceptowany podtyp, podtyp PDF/A, dłuższy token nazwy, nieobecny podtyp oraz brakujący identyfikator warunku
Zmieniono (Changed)
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.58.1
Version 2.58.0
Zmieniono (Changed)
- Wszystkie 35 wywołań zwrotnych, które PDFium wywołuje z własnych ramek C++ (wypełnianie formularzy, XFA, platforma JavaScript, pauza renderowania progresywnego oraz odczyt i zapis strumieni), powstrzymują teraz każdy wyjątek Pascala i zwracają udokumentowaną wartość niepowodzenia zamiast rozwijać się przez granicę języków
- Program obsługi zdarzenia, który zgłasza wyjątek, nieudana alokacja lub nieoczekiwany błąd wewnątrz wywołania zwrotnego nie mogą więc już położyć procesu ani zostawić PDFium w niezdefiniowanym stanie
Naprawiono (Fixed)
- Rejestracja timera formularza przeciekała swój wpis, gdy nie dało się utworzyć timera bazowego
Dodano (Added)
- Testy Delphi, Lazarus i C++Builder obejmują teraz zapis do strumienia docelowego, który odmawia zapisu, i asercjonują, że dokument pozostaje potem użyteczny i zapisywalny
Version 2.57.8
Naprawiono (Fixed)
- Starsze wydania Delphi (XE5 i wcześniejsze) przestawały kompilować bibliotekę trial z
E2003 Undeclared identifier: 'GetTickCount64'wFPdfPades.pas, ponieważ jednostka Windows dostarczana z tymi kompilatorami nie eksportuje tego symbolu - Te same kompilatory zawodziły też na
GetUserDefaultLocaleNamewPDFium.pasi na przypisaniuTBytesdoarray of BytewGetXfaFormPackets, więc wywołanie zwrotne ustawień regionalnych XFA i migawka pakietów budują się teraz również na tych kompilatorach
Zmieniono (Changed)
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.57.8
Version 2.57.7
Zmieniono (Changed)
- Każde przepisanie po stronie zapisu obcina teraz strumień docelowy przed zapisem zamiast tylko go przewijać, więc bufor dostarczony przez wywołującego, który trzymał już dłuższy dokument, nie może zatrzymać nieaktualnego ogona za nowym
%%EOF - Testy Delphi, Lazarus i C++Builder obejmują teraz zapis do wstępnie wypełnionego strumienia
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.57.7
Version 2.57.6
Naprawiono (Fixed)
- Skan obiektów poprzedzający szyfrowanie akceptował ciągi cyfr dowolnej długości, więc długa liczba gdziekolwiek w pliku mogła przewinąć się na ujemny lub błędny numer obiektu i dodać fantomowy wpis do przebudowanej tabeli odsyłaczy
- Numery obiektów powyżej limitu ISO 32000-1 Annex C i generacje powyżej 65535 są teraz odrzucane jako nagłówki obiektów zamiast być obcinane
Dodano (Added)
- Testy Delphi, Lazarus i C++Builder asercjonują teraz dokładną liczbę używanych wpisów przebudowanej tabeli
Zmieniono (Changed)
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.57.6
Version 2.57.5
Naprawiono (Fixed)
- Szyfrowanie z
EncryptMetadata = Falsezapisywało/EncryptMetadata falsedo słownika Encrypt, ale nadal szyfrowało strumień metadanych dokumentu, więc czytnik stosujący się do tej deklaracji znajdował nieczytelny XMP - Strumień
/Type /Metadatajest teraz kopiowany bez zmian, gdy szyfrowanie metadanych jest wyłączone, podczas gdy każdy inny strumień nadal jest szyfrowany
Dodano (Added)
AnsiNameTokenMatchesKeyjest teraz częścią interfejsuFPdfPdfCommondo świadomych ograniczników porównań nazw- Testy Delphi, Lazarus i C++Builder obejmują teraz oba tryby szyfrowania metadanych
Zmieniono (Changed)
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.57.5
Version 2.57.4
Naprawiono (Fixed)
- Tabela odsyłaczy przebudowywana podczas szyfrowania pomijała obowiązkową głowę listy wolnych obiektu 0 wymaganą przez ISO 32000-1 §7.5.4, więc jej pierwsza podsekcja startowała jeden obiekt za późno
- Każdy przebudowany wpis twierdził generację 0; obiekty zapisane z wyższą generacją zachowują ją teraz, więc tabela zgadza się z nagłówkami obiektów, na które wskazuje
Dodano (Added)
- Testy Delphi, Lazarus i C++Builder obejmują teraz wpis głowy listy wolnych i zachowanie generacji w przebudowanej tabeli
Zmieniono (Changed)
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.57.4
Version 2.57.3
Naprawiono (Fixed)
- Zaszyfrowane wyjście gubiło słowo kluczowe
streamkażdego obiektu strumienia, więc zapisany plik nie był już prawidłową składnią PDF, a czytniki ścisłe zgłaszały treść strony ani jako strumień, ani jako tablicę strumieni - Przepisanie
/Lengthdopasowywało/Lengthjako zwykły podciąg, więc słownik strumienia niosący/Length1(każdy osadzony font) miał zniekształconą nazwę klucza, podczas gdy prawdziwa długość pozostawała nieaktualna - Strumień podający swoją długość pośrednio jako
/Length N 0 Rmiał numer obiektu nadpisany nową długością; wpis jest teraz zastępowany bezpośrednią zaszyfrowaną długością - Słownik strumienia w ogóle bez
/Lengthotrzymuje teraz taki wpis zamiast zostawiać czytnik bez długości
Dodano (Added)
AnsiFindDictKeyTokenjest teraz częścią interfejsuFPdfPdfCommondo wyszukiwań kluczy słowników najwyższego poziomu świadomych ograniczników- Testy Delphi, Lazarus i C++Builder obejmują teraz zachowanie
/Length1, zastąpienie pośredniej długości i zgodność rozmiaru ciała strumienia
Zmieniono (Changed)
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.57.3
Version 2.57.2
Naprawiono (Fixed)
SaveAsEncryptediSaveAsEncryptedToStreamzRevision = erR6produkowały dokumenty, które odrzucały własne poprawne hasło w mniej więcej jednym pliku na cztery, ponieważ licznik rund algorytmu 2.B ISO 32000-2 §7.6.4.3 startował o rundę za nisko, a dodatkowa runda zmieniała wartości/U,/O,/UEi/OE- Dokumenty zaszyfrowane R6 otwierają się teraz ponownie z hasłem użytkownika lub właściciela w każdym zgodnym czytniku i nadal odrzucają błędne hasło
Dodano (Added)
- Zestawy testów Lazarus i C++Builder zyskały pokrycie szyfrowania, wcześniej dostępne tylko w Delphi: długości kluczy R6, pola słownika Encrypt, powtórzona podróż szyfrowania i ponownego otwarcia oraz odrzucenie błędnego hasła
Zmieniono (Changed)
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.57.2
Version 2.57.1
Zmieniono (Changed)
- Pisanie w polu formularza, przesuwanie kursora tekstowego i przełączanie checkboxów przemalowują teraz tylko obszar, który PDFium zgłasza jako uszkodzony, zamiast całej przeglądarki
- Prostokąty uszkodzeń są normalizowane dla skierowanej w górę osi Y strony, poszerzane o jeden piksel, aby krawędzie antyaliasowanych widżetów pozostały czyste, i przycinane do widocznego obszaru klienckiego
- Prostokąt uszkodzenia przewinięty całkowicie poza viewport nie planuje już przemalowania, podczas gdy nieaktywny widok lub niezmapowana strona nadal wraca do pełnego przemalowania
- Testy Delphi, Lazarus i C++Builder obejmują teraz ograniczone unieważnianie formularzy, odwrócone pola stron, prostokąty poza ekranem i bezpieczeństwo nieaktywnych widoków
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.57.1
Version 2.57.0
Dodano (Added)
TPdfThumbnailView.Orientationobsługuje pionowe i poziome układy miniatur, zachowując istniejące domyślne ustawienie pionoweFirstVisiblePageIndex,LastVisiblePageIndexiEnsureCurrentPageVisibleudostępniają i sterują oknem miniatur przy użyciu indeksów stron opartych na jedynce
Zmieniono (Changed)
- Zmiana
CurrentPageIndexprzewija teraz wybraną miniaturę w widok w dowolnej orientacji - Testy Delphi, Lazarus i C++Builder obejmują teraz wartości domyślne orientacji, przełączanie, widoczne zakresy i widoczność wybranej strony
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.57.0
Version 2.56.2
Zmieniono (Changed)
HighlightSearchText,AddSearchTextHighlightiClearHighlightunieważniają teraz tylko prostokąty urządzenia dla zakresów wyszukiwania, które zostały dodane lub usunięte, zamiast przemalowywać cały widok- Zastępowanie wyróżnień tymi samymi dopasowaniami lub dołączanie zduplikowanych dopasowań nie planuje już niepotrzebnego przemalowania
- Testy Delphi, Lazarus i C++Builder obejmują teraz ograniczoną unieważnianie, idempotentne aktualizacje, czyszczenie i bezpieczeństwo nieaktywnych widoków
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.56.2
Version 2.56.1
Zmieniono (Changed)
TPdfThumbnailViewponownie używa wyrenderowanych bitmap dla stron, które pozostają widoczne między przemalowaniami i sąsiadującymi pozycjami przewijania- Pamięć podręczna zachowuje tylko bieżący widoczny zakres stron i zwalnia wpisy dokładnie wtedy, gdy strony opuszczają ten zakres, przypisany dokument ulega zmianie lub wymiary miniaturek ulegają zmianie
- Testy Delphi, Lazarus i C++Builder obejmują teraz ponowne użycie pamięci podręcznej, przycinanie okna, unieważnianie rozmiaru, zastępowanie dokumentu i niszczenie komponentu
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.56.1
Version 2.56.0
Dodano (Added)
TPdfView.CutSelectedFormTextToClipboardiTPdfView.PasteFormTextFromClipboardzapewniają edycję schowka Unicode dla aktywnego widżetu formularza edytowalnego
Zmieniono (Changed)
- Aktywne edytory formularzy obsługują teraz standardowe skróty klawiaturowe kopiuj, wytnij, wklej i zaznacz wszystko przed przekazaniem wprowadzania tekstu do PDFium
- Wytnij i wklej odrzucają pola tylko do odczytu oraz sesje bez uprawnień do wypełniania lub modyfikacji formularza, podczas gdy wytnij kopiuje pomyślnie przed usunięciem zaznaczonego tekstu
- Testy Delphi, Lazarus i C++Builder obejmują teraz zachowanie bez fokusu, przebieg skrótów w obie strony oraz odrzucanie tylko do odczytu
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.56.0
Version 2.55.0
Dodano (Added)
TPdfView.AddSearchTextHighlightdołącza unikalne dopasowania dla innego wyszukiwanego terminu do bieżącej nakładki strony, pozwalając kilku zapytaniom pozostać wyróżnionymi razem
Zmieniono (Changed)
HighlightSearchTextpozostaje punktem wejścia zastępczym i współdzieli teraz addytywny skaner, podczas gdy zduplikowane zakresy znaków są ignorowane, aClearHighlightusuwa pełny zgromadzony zbiór- Testy Delphi, Lazarus i C++Builder obejmują teraz akumulację odrębnych zapytań i tłumienie zduplikowanych zakresów
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.55.0
Version 2.54.0
Dodano (Added)
TPdfudostępnia teraz pełne migawki obiektów strony, partionowane aktualizacje stylów, afiniczne przekształcenia obiektów, segmenty ścieżek, ścieżki przycinania i podrzędne Form XObject- Inspekcja znaków obejmuje teraz kolory wypełnienia i obrysu, nazwę i flagi czcionki, luźne granice glifów, efektywne macierze, uchwyty obiektów tekstowych oraz konwersję indeksu znaku na indeks tekstu
- Adnotacje wykonują teraz przebieg w obie strony geometrii obramowania oraz strumieni wyglądu normal, rollover i down
- Nowe akcesory miniatur raw i zdekodowanych, przekształcenia treści strony i adnotacji oraz
RenderPageWithMatrixzapewniają bezpośrednie zaawansowane ścieżki renderowania i edycji
Zmieniono (Changed)
- Zmiany stylu obiektów strony mogą być zatwierdzane jako jedna partia, tak aby PDFium regenerował treść strony tylko raz
- Renderowanie macierzowe używa istniejącej ścieżki bitmapy zero-copy, gdy układ docelowej bitmapy jest zgodny
Version 2.53.1
Naprawiono (Fixed)
- Wbudowany chiński podpis menu Kopiuj używa teraz niezależnych od kodowania punktów kodowych Unicode i wyświetla się poprawnie w buildach Lazarus
- Starsze łańcuchy narzędzi Delphi mogą kompilować
FPdfAsync, gdy ich jednostkaWinapi.Windowspomija deklaracjęGetTickCount64
Version 2.53.0
Dodano (Added)
- Nowy fixture testów
Tests.ApiCoverageobejmujący publiczne API TPdf, które wcześniej nie miały pokrycia testami end-to-end:GetPageBox/SetPageBox(odczyt/zapis MediaBox/CropBox, błędy brakującego boxu i przebieg zapisu w obie strony),FlattenPage/FlattenAllPages(wartość zwracana i zachowanie liczby stron),GenerateFormAppearances(brak akcji na dokumentach bez formularza),SaveAsEncrypted/SaveAsEncryptedToStream(AES-256 z przebiegiem hasła w obie strony — weryfikuje, że zaszyfrowany plik odmawia otwarcia bez hasła i otwiera się z nim), walidacja granicDeletePage(strona 0 i poza zakresem zgłaszająEPdfError) oraz wprowadzone w v2.38.0 wartowniki adnotacjiHasContents/HasAuthor(weryfikujące, żeDefault(TPdfAnnotation)pozostawia je jakoFalse)
Version 2.52.0
Dodano (Added)
TPdfView.CopySelectedFormTextToClipboardkopiuje zaznaczenie tekstu wewnątrz aktywnego widżetu AcroForm do schowka Windows jakoCF_UNICODETEXT
Zmieniono (Changed)
- Operacje kopiowania tekstu strony i aktywnego formularza współdzielą teraz ten sam defensywny moduł zapisu schowka Unicode i pozostawiają schowek niezmieniony, gdy ich zaznaczenie jest puste
- Testy Delphi, Lazarus i C++Builder obejmują teraz nieaktywne lub nieaktywne wywołania kopiowania formularza oraz przebieg w obie strony zaznaczenia aktywnego formularza przez schowek Windows
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.52.0
Version 2.51.0
Dodano (Added)
TPdfView.SelectLineAtzaznacza wizualną linię tekstu zawierającą stronę opartą na jedynce i indeks znaku oparty na zerze bez wymagania wprowadzania myszą
Zmieniono (Changed)
- Programowe zaznaczanie linii, zaznaczanie potrójnym kliknięciem oraz
Shift+HomelubShift+Endwspółdzielą teraz jeden model granicy linii oparty na polach znaków - Testy Delphi, Lazarus i C++Builder obejmują teraz stabilne zaznaczanie linii oraz nieprawidłowe indeksy stron lub znaków
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.51.0
Version 2.50.0
Dodano (Added)
TPdf.LoadDocumentakceptuje teraz oparte na zerze oknoIndexiCountw buforzeTBytes, pozwalając osadzonym PDF ładować się bez przydzielania tymczasowego wycinka tablicy bajtów
Zmieniono (Changed)
- Ładowanie zakresu bajtów odrzuca ujemne lub spoza zakresu okna przed zmianą stanu dokumentu i zachowuje istniejące opcje czasu życia bufora buforowanego i pożyczonego
- Testy Delphi, Lazarus i C++Builder obejmują teraz okna osadzonych PDF oraz nieprawidłowe argumenty zakresu bajtów
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.50.0
Version 2.49.1
Dodano (Added)
TPdfView.FitModeobsługuje terazpfmFitHeightdo dopasowania bieżącej strony do widocznej wysokości obszaru widoku, z możliwością przewijania poziomego, gdy jest to potrzebne
Naprawiono (Fixed)
- Tryby dopasowania teraz zbiegają się po zmianie widoczności paska przewijania modyfikującej obszar klienta, utrzymując spójność wyników fit-page, fit-width i fit-height między VCL i LCL
- Testy przeglądarki Delphi, Lazarus i C++Builder obejmują teraz wybór
pfmFitHeighti podróże powrotne wyliczeń TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.49.1
Version 2.49.0
Dodano (Added)
- Publiczna powierzchnia powiązania PDFium obejmuje teraz wszystkie 470 wyeksportowanych funkcji w przeglądanych nagłówkach, w tym dostęp do opisów załączników przez
FPDFAttachment_SetDescriptioniFPDFAttachment_GetDescription TPdfudostępnia teraz opisy załączników, ważność odniesień krzyżowych, przesunięcia końca trailer, rewizję security-handler, ładowanie do pamięci 64-bitowej, zakresy bajtów podpisów, zakresy tekstu łączy web i rozszerzone migawki danych obrazu, filtru, metadanych i profilu ICC- Pomocnicy formularzy obsługują teraz natywne fokusowanie pól, zapytania i aktualizacje opcji wybranego wyboru, przekazywanie kółka myszy, zapisywalne pociągnięcia atramentem i nakładki formularzy po renderowaniu progresywnym
Zmieniono (Changed)
FormFieldCount, indeksy pól formularza i kolejność tabulacji opisują teraz tylko adnotacje widgetów zamiast obejmować niepowiązane adnotacje stron- Strony
TPdfheadless wchodzą teraz i wychodzą z cyklu życia strony wypełniania formularza, aby natywne fokusowanie i API pól z fokusem działały bezTPdfView - Eksport opisów załączników jest ograniczony możliwościami, więc aplikacje używające starszej kompilacji PDFium nadal mogą ładować bibliotekę i wykrywać niedostępną funkcję
Naprawiono (Fixed)
- Progresywne renderowanie stron maluje teraz kontrolki formularzy, gdy wypełnianie formularzy jest włączone
- Testy Delphi, Lazarus i C++Builder obejmują teraz nową diagnostykę dokumentów, opisy załączników, ścieżki atramentu, zachowanie formularzy, zakresy bajtów podpisów, zakresy łączy web i metadane obrazów
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.49.0
Version 2.48.0
Dodano (Added)
TPdfMatrixudostępnia teraz fabryki, klonowanie i przypisywanie, diagnostykę stanów skończonych i odwracalności, porównanie oparte na tolerancji, dostęp do translacji, raportowanie wyznacznika i rozkład afiniczny- Kompozycja prepend, obrót świadomy punktu obrotu, skalowanie, pochylenie i odbicia, plus mapowanie prostokątów stretch, contain i cover obsługują przepływy pracy w przestrzeni lokalnej i dopasowane układy bez ręcznej arytmetyki współczynników
- Niemutujący dostęp odwrotny, odwrotne mapowanie punktów, transformacje wektorów i czworokątów, dynamiczne partie punktów i prostokątów, warianty w miejscu i jednorazowe transformowane granice rozszerzają wielokrotnie użytkowaną powierzchnię geometrii
Zmieniono (Changed)
- Translacja, skalowanie i odbicia osi aktualizują teraz tylko dotknięte współczynniki zamiast kierować przez ogólne mnożenie afiniczne
- Transformacja prostokątów normalizuje swoje wejście raz, używa wyspecjalizowanej dokładnej ścieżki wyrównanej do osi, gdy to możliwe, i oblicza ogólne obrócone granice bez tymczasowych rekordów punktów
- Transformacje partii punktów i prostokątów przydzielają jedną tablicę wyników lub używają ponownie pamięci wywołującego, podczas gdy transformowane granice punktów są akumulowane w jednym przejściu bez tablicy pośredniej
Naprawiono (Fixed)
- Mapowanie prostokątów odrzuca wyniki o rozmiarze zerowym, nieskończone i z przepełnieniem
Singleprzed opublikowaniem nienadającej się do użycia macierzy - Testy Delphi, Lazarus i C++Builder weryfikują teraz kolejność kompozycji, niezmienniki punktu obrotu, odwrotne podróże powrotne, dopasowane prostokąty, rozkład i zachowanie geometrii masowej
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.48.0
Version 2.47.0
Dodano (Added)
FPdfAsynczapewnia teraz ustrukturyzowane przyczyny i komunikaty anulowania, usuwalne rejestracje wywołań zwrotnych, źródła oparte na limicie czasu, oczekiwanie na anulowanie i atomowe operacje try-cancel przez rozszerzone interfejsy zachowujące oryginalne APITPdfFuture<T>.RunExdodaje konfigurowalną dyspozycję odpowiedzi i priorytet workera, podczas gdy koperty wyników udostępniają identyfikatory operacji, ważność wartości, nazwy klas wyjątków, pomiar czasu ukończenia i wielokrotnie użyteczne pomocniki ukończeniaTPdfAsyncExecutordodaje wielokrotnie użyteczną pulę stałych workerów z czterema pasami priorytetowymi FIFO, opcjonalne ciśnienie powrotne ograniczonej kolejki, anulowalne uchwyty zadań, oczekiwanie świadome limitu czasu, migawki zadań, zagregowane statystyki i płynne zamykanie
Zmieniono (Changed)
- Powtarzające się zadania asynchroniczne mogą używać ponownie wątków workerów i operacji kolejki O(1) zamiast tworzyć wątek dla każdego zadania, podczas gdy synchronizowane ukończenie pozostaje dostępne dla hostów UI
- Błędy executora i future zachowują diagnostykę klasy i komunikatu wyjątku, anulowanie zachowuje swoją pierwotną przyczynę, a wyjątki wywołań zwrotnych pozostają odizolowane od cyklu życia workera i zamykania
- Testy Delphi, Lazarus i C++Builder obejmują teraz rozszerzoną powierzchnię anulowania, metadanych future, kontroli zadań, ciśnienia powrotnego, porządkowania priorytetów, statystyk, błędów i zamykania
Naprawiono (Fixed)
- Współbieżni właściciele anulowania otrzymują teraz deterministyczny wynik pierwszego pisarza zamiast polegać na oddzielnej sekwencji obserwacji i anulowania
- Oczekiwanie na bezczynność głównego wątku przetwarza synchronizowane odpowiedzi zadań, zapobiegając pozostawieniu przez ukończonego workera executora trwale niebezczynnego podczas skoordynowanego zamykania
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.47.0
Version 2.46.0
Dodano (Added)
FPdfAsn1udostępnia teraz klasy identyfikatorów, kodowanie i dekodowanie 64-bitowych numerów tagów wysokiego rzędu, przeanalizowane rekordy TLV, okna czytnika podrzędnego z zerowym kopiowaniem, typowane dekodery prymitywów i wycinki treści lub zakodowanych wartości- Writery DER obsługują teraz pełny zakres INTEGER 64-bitowego bez znaku, walidowaną dowolną treść INTEGER, ENUMERATED, automatyczny wybór UTCTime lub GeneralizedTime, tagi application i private, wielowartościowe SEQUENCE i kanonicznie posortowany wynik SET OF
ValidateDerzwraca błędy walidacji uwzględniające przesunięcie, wymuszając konfigurowalne limity zagnieżdżenia, liczby węzłów, długości treści, liczby błędów, korzenia i opcjonalnego porządkowania SET
Zmieniono (Changed)
- Konkatenacja DER i kompozycja wielowartościowa używają jednej alokacji wyniku, bufory writera udostępniają operacje reserve, count, capacity i przeniesienia własności, a sortowanie SET OF używa teraz
O(n log n)sortowania przez scalanie - Wartości BOOLEAN, INTEGER, BIT STRING, OBJECT IDENTIFIER, NULL, UTF8String, PrintableString, IA5String, UTCTime i GeneralizedTime otrzymują kontrole formy kanonicznej podczas kodowania, typowanego dekodowania lub walidacji
- Pakiet wykonawczy Lazarusa eksportuje teraz
FPdfAsn1, a zestawy testów Delphi, Lazarus i C++Builder ćwiczą tę samą publiczną powierzchnię DER
Naprawiono (Fixed)
- Liczby tagów specyficznych dla kontekstu większe niż 30 nie są już obcinane do niskich pięciu bitów identyfikatora
- Zniekształcone identyfikatory tagów wysokiego rzędu, nieminimalne określone długości, nieprawidłowe UTF-8, niezerowe wypełnienie BIT STRING, nieprawidłowe pola czasu, końcowe korzenie i naruszenia limitów zasobów są odrzucane deterministycznie
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.46.0
Version 2.45.0
Dodano (Added)
FPdfPreflightReportprzypisuje teraz ważność Info, Warning lub Error każdemu problemowi i udostępnia API ważności, statusu, kategorii, kodu problemu, wyszukiwania, przeszukiwania, spłaszczania i filtrowania na poziomie standardu i raportu- Raporty preflight eksportują teraz SARIF 2.1.0, JUnit XML, NDJSON i natywny XML przez pasujące metody
To*iSave*ToFiledla potoków CI, automatyzacji i przesyłania strumieniowego - Stabilne odcisky raportów SHA-256 identyfikują równoważne wyniki walidacji niezależnie od ścieżek źródłowych i znaczników czasu generowania
Zmieniono (Changed)
- Raporty JSON, CSV, text, Markdown i HTML zawierają teraz ważność i rozszerzone podsumowania statusu; HTML dodaje dostępne podpisy tabel i podsumowanie statusu
- Konstrukcja kolekcji problemów i standardów używa geometrycznego wzrostu pojemności, wyniki zapytań są wstępnie wymiarowane, ucieczka JSON zapisuje do jednego ograniczonego bufora wynikowego, a wszystkie pliki raportów używają jednego bezpośredniego writera UTF-8
- Podsumowania kategorii problemów używają deterministycznego porządkowania, znaczniki czasu zawierają milisekundy, JSON niesie
formatVersion: 2, a komórki CSV neutralizują formuły arkuszy kalkulacyjnych
Naprawiono (Fixed)
- Eksport JSON zachowuje teraz prawidłowe dodatkowe pary Unicode i zastępuje odizolowane jednostki kodowe surogatów UTF-16 zamiast emitować zniekształcone dane skalarne
- Eksport HTML ucieka teraz apostrofom, a filtrowane widoki raportów posiadają niezależne tablice problemów zamiast współdzielić zmienną pamięć wyników
TPdf.AboutInfo, metadane pakietu Lazarus i metadane instalatora zgłaszają teraz spójnie Version 2.45.0
Version 2.44.0
Dodano (Added)
- Zakładki i miejsca docelowe udostępniają stan otwarcia, liczby elementów potomnych, cele akcji, tryby widoku miejsca docelowego oraz do czterech parametrów widoku
Metadata,GrantedPermissions,UserGrantedPermissions,HasPermissioniUserHasPermissiondostarczają typowanych migawek inspekcji dokumentu oraz zapytań o uprawnieniaExtractThumbnail(PageNumber)renderuje żądaną stronę bez zmiany aktywnej strony, a wyniki znacznika czasu RFC 3161 udostępniają zasady, czas wygenerowania i szczegóły nonce
Zmieniono (Changed)
- Ścieżki zakładek, JavaScript, metadanych, miejsc docelowych i miniatur używają walidowanych buforów dwuprzebiegowych, geometrycznego przyrostu kolekcji oraz przemierzania bezpiecznego dla cykli
- Postprocessing zapisu rozwiązuje aktywny katalog, drzewo stron i akcję otwarcia przez bieżącą rewizję xref, buforuje zdekodowane strumienie obiektów i skanuje słowniki PDF z granicami leksykalnymi
- Współdzielony analizator PDF wymusza teraz dokładne nagłówki obiektów, generacje, klucze słowników, długości strumieni, geometrię predyktora, zakresy liczb całkowitych oraz granice komentarzy, ciągów dosłownych i ciągów szesnastkowych
- Walidacja odpowiedzi RFC 3161 wiąże teraz zarówno nonce, jak i SHA-256
messageImprint, wymaga strukturalnie poprawnego podpisującego i stosuje ścisłe reguły długości DER, OID, INTEGER i GeneralizedTime
Naprawiono (Fixed)
- Dokumenty przyrostowe nie wybierają już nieaktywnych zduplikowanych katalogów ani nieprawidłowo sformatowanych sufiksów odwołań podczas dodawania domyślnej akcji otwarcia
- Tokeny znacznika czasu z długimi formami długości DER zachowują kompletny zakodowany token, podczas gdy nieprawidłowa kolejność pól opcjonalnych CMS oraz puste zbiory podpisujących są odrzucane
- Czyste kompilacje Delphi zapisują teraz pola ziarna nonce PAdES poprzez wyrównane bezpieczne kopie bajtów i przekazują bajty odpowiedzi XFA z dokładnie właściwym natywnym typem wskaźnika
TPdf.AboutInfo, metadane pakietu Lazarus oraz metadane instalatora zgłaszają teraz spójnie wersję 2.44.0
Version 2.43.0
Dodano (Added)
- Rekordy pól i adnotacji XFDF udostępniają teraz flagi obecności, które odróżniają pominiętą wartość XML od jawnie pustej wartości
Zmieniono (Changed)
- Import XFDF akceptuje elementy i atrybuty z prefiksem przestrzeni nazw, mieszaną treść tekstową i CDATA, odwołania do encji oraz wartości znaczące pod względem białych znaków, odrzucając jednocześnie nieprawidłowe odwołania skalarnych wartości Unicode
- Import i eksport XFDF używają indeksowanego dopasowywania pól i ograniczonych buforów geometrycznych, poprawiając przepustność i szczytowe zachowanie alokacji dla głęboko zagnieżdżonych formularzy, dużych kolekcji adnotacji, list pisma odręcznego, wierzchołków i czworokątów znaczników
- Walidacja PDF/A i PDF/UA używa ograniczonego przyrostu dla dużych kolekcji stron, strumieni, nazw struktur i RoleMap; rozwiązywanie RoleMap dla PDF/UA podąża teraz za bezpośrednimi tablicami oraz obiektami pośrednimi nazw lub tablic o dokładnej generacji
Naprawiono (Fixed)
- Pełne obiegi XFDF zachowują teraz głęboko zagnieżdżone ścieżki pól, jawne puste wartości pól, jawne puste treści adnotacji oraz rozróżnienie między treścią nieobecną a pustą
- Nieprawidłowe ładowania buforów pamięci i przypisania stron spoza zakresu są odrzucane bez pozostawiania częściowego stanu dokumentu lub strony, a nieudane ponowne ładowanie strony natywnej zachowuje poprzednio aktywną stronę
- Duże identyfikatory treści oznaczonej oraz bufory metadanych podpisów są ograniczane i walidowane przed alokacją lub dostępem natywnym
Version 2.42.0
Dodano (Added)
TPdfMatrixudostępnia terazInvert,TryInvert,TransformPointiTransformRectdo mapowania współrzędnych, testowania trafień, znormalizowanych granic oraz jawnej obsługi macierzy osobliwychTPdf.WrapTextzyskał przeciążenieBreakLongWords, które dzieli CJK i inne teksty bez spacji, zachowując jednocześnie poprawne pary surogatowe UTF-16TPdfAnnotation.AttachmentPointSetsudostępnia każdy czworokąt w wieloliniowych adnotacjach znaczników, podczas gdy istniejące poleAttachmentPointspozostaje aliasem dla pierwszego zestawu
Zmieniono (Changed)
- Ekstrakcja tekstu, budowanie treści czytelnej, wyszukiwanie słów oraz mapowanie offsetów tekstu mówionego używają teraz ograniczonych alokacji i ścieżek wyszukiwania binarnego, redukując powtarzalne alokacje i skany liniowe na dużych stronach
- Serializacja ASN.1 i generowanie zaszyfrowanych plików PDF używają teraz geometrycznych buforów wyjściowych; porządkowanie obiektów zaszyfrowanych używa sortowania
O(n log n), a wiersze xref są zapisywane bezpośrednio do bufora końcowego WrapTextzachowuje granice wierszy CR, LF i CRLF oraz ponownie wykorzystuje jeden natywny obiekt pomiaru dla całej operacji- Import i eksport XFDF zachowują każdy czworokąt znacznika; import stosuje również kolory RGB/wnętrza i analizuje współrzędne dziesiętne niezależnie od ustawień regionalnych procesu
Naprawiono (Fixed)
- Starsze wywołujący mogą ponownie aktualizować treść i autora adnotacji, przypisując niepuste ciągi bez ustawiania nowszych wartowników
HasContentsiHasAuthor - Jawnie puste ciągi adnotacji używają teraz prawidłowego natywnego bufora zakończonego zerem, dzięki czemu czyszczenie
/Contents,/Ti innych opcjonalnych kluczy tekstowych nie przekazuje już wskaźnika nil do PDFium
Version 2.41.0
Zmieniono (Changed)
- Raporty Preflight
SaveJsonToFile,SaveMarkdownToFileorazSaveTextToFilezapisują teraz w Delphi kodowanie UTF-8 (zgodnie z istniejącą metodąSaveHtmlToFile) zamiast systemowej strony kodowej ANSI; znaki spoza zakresu ASCII w ścieżkach plików, zaleceniach i uwagach o zakresie były zniekształcane w Delphi podczas zapisu tymi metodami SaveCsvToFilezapisuje teraz UTF-8 z prefiksem BOM, dzięki czemu Excel dla systemu Windows automatycznie wykrywa kodowanie; bez prefiksu BOM Excel traktuje plik UTF-8 CSV jako kodowany na stronie kodowej 1252 i zniekształca znaki spoza zakresu ASCII
Naprawiono (Fixed)
- Demo
ExtractImageswyciekało buforowane obiektyTBitmapwFExtractedImages, gdy formularz był zamykany bez ich wcześniejszego jawnego wyczyszczenia; formularz nadpisuje teraz metodęDestroy, aby wywoływaćClearExtractedImages, co zwalnia każdy buforowany bitmap
Version 2.40.0
Zmieniono (Changed)
TPdf.RenderPage(HDC, ...)maskuje teraz wyjątki FPU/SSE wokół wywołaniaFPDF_RenderPage, co odpowiada zachowaniuTPdfView.RenderPage(HDC)(naprawionemu w v2.25.0) oraz każdemu punktowi wejściowemu renderowania zwracającemu bitmapę; przeciążenie direct-to-DC na poziomieTPdfwcześniej pozostawiało wyjątki FPU niezamaskowane w kompilatorach starszych niż D12
Naprawiono (Fixed)
ColorToARGBzwraca teraz w pełni przezroczysty piksel (alfa 0) dlaclNoneiclDefaultzamiast traktować wartość wartownika jako dosłowny kolor RGB; poprzednie zachowanie powodowało ciemne, niemal nieprzezroczyste wypełnienie, gdy wywołujący przekazywałclNone, oczekując braku koloru
Version 2.39.1
Naprawiono (Fixed)
- Jawne zapisy PDF 1.3 usuwają teraz wpisy
/SMask /None,/AIS falseoraz/TK true, które jedynie powtarzają początkowy stan grafiki, podczas gdy nadal odrzucany jest niestandardowy stan przezroczystości
Version 2.39.0
Zmieniono (Changed)
CreatePDForazImageToPDFużywają teraz potwierdzonych miejsc docelowych zapisu i zgłaszają sukces tylko wtedy, gdySaveAszakończy się pomyślnieBatchExport,PDFtoJpgorazSplitPDFprzydzielają teraz unikalne katalogi wyjściowe, dzięki czemu powtarzane uruchomienia i dane wejściowe o takich samych nazwach zachowują wcześniejsze wynikiSplitViewzawija teraz wyszukiwanie raz, nie pozostawiając ukrytego stanu strony po anulowaniu lub braku dopasowania, oraz przerywa niekompletne zadania drukowania zamiast przesyłać częściowe dane wyjściowe
Naprawiono (Fixed)
MergePDFodrzuca teraz nieprawidłowo sformatowane tokeny zakresu stron oraz ścieżki wyjściowe nadpisujące pliki źródłowe, zlicza rzeczywiście zaimportowane strony i odmawia zapisu pustego wyniku- Przykłady demo
Attachmentdla Delphi i C++Builder zatwierdzają teraz zapisy na tej samej ścieżce za pomocą bezpiecznego przed wycofaniem zastępowania plików, dzięki czemu nieudana zmiana nazwy nie może usunąć oryginalnego pliku PDF
Version 2.38.0
Zmieniono (Changed)
SetAnnotationDatachroni teraz zapisy/Contentsi/Authorza pomocą wartownikówHasContents/HasAuthorwTPdfAnnotation, co jest zgodne z istniejącym wzorcemHasName/HasSubject/HasIcon; wcześniej te dwa pola były zapisywane bezwarunkowo, przez co przypisanie rekorduDefault(TPdfAnnotation)w celu aktualizacji wyłącznie koloru lub flag po cichu nadpisywało istniejącą treść i autora adnotacji pustymi ciągami;GetPageAnnotationustawia teraz te wartowniki, dzięki czemu cykl odczytu-modyfikacji-zapisu zachowuje oryginalne wartości
Naprawiono (Fixed)
GenerateFormAppearancesodczytuje teraz wartość pola wyboru/przycisku opcji za pomocąFPDFAnnot_GetFormFieldValue(które przechodzi do słownika pola nadrzędnego zgodnie z ISO 32000-1 §12.7.5) zamiastFPDFAnnot_GetStringValue(Annot, 'V', ...)(które odczytuje słownik widżetu); widżet zazwyczaj nie zawiera/V, przez co stan/ASnigdy nie był synchronizowany ze stanem zaznaczenia, a spłaszczone pole wyboru lub przycisk opcji były renderowane jako niezaznaczone
Version 2.37.0
Zmieniono (Changed)
ParseTsaUrlogranicza teraz port do zakresu1..65535po sparsowaniu; nadmiarowa wartość portu w przeciwnym razie uległaby zawinięciu w wyniku obcięciaDWORDi mogłaby trafić na prawidłowy port- Metoda XFDF
ParseFieldakceptuje teraz parametr głębokości (domyślnie 0, ograniczony do 64) i zwraca puste pole po osiągnięciu limitu, dzięki czemu złośliwie zagnieżdżony łańcuch<field>o głębokości 100 000 nie może już przepełnić stosu
Naprawiono (Fixed)
- Żądanie TSA HTTP zabezpiecza teraz przed pustą treścią żądania przed przekazaniem
@ReqDer[0]doWinHttpSendRequest; dereferencja tablicy dynamicznej o zerowej długości prowadziłaby do dostępu do nieuziemionego wskaźnika;BuildTimeStampReqzawsze zwraca niepustą sekwencję SEQUENCE, ale miejsce wywołania chroni teraz ten kontrakt
Uwagi (Notes)
- Komentarz nagłówka
FPdfTsaWindotyczący sprawdzania odwołań HTTPS został poprawiony: WinHttp domyślnie weryfikuje łańcuch certyfikatów serwera, ale **nie** przeprowadza sprawdzania odwołań CRL/OCSP, chyba że zostanie to wyraźnie włączone za pomocąWinHttpSetOption; poprzednie sformułowanie twierdziło, że sprawdzanie odwołań jest darmowe, co było mylące
Version 2.36.0
Zmieniono (Changed)
- Żądania TSA HTTP wysyłają teraz jawny nagłówek
Content-Lengthoprócz nagłówkówContent-TypeiAccept; WinHttp tworzy go na podstawie całkowitej długości, ale niektóre serwery proxy zgodne z RFC 3161 wymagają jawnego nagłówka i bez niego odrzucają żądanie z błędem411 Length Required - Eksport XFDF odrzuca teraz znaki sterujące C0 (inne niż TAB/LF/CR, które są już ucieczkowe) zamiast emitować nieprawidłową sekwencję backslash-hex; poprzednie obejście
\-01Fnie jest prawidłowym formatem XML (ukośnik wsteczny nie ma specjalnego znaczenia w XML), więc każdy zgodny czytnik odrzuciłby dokument jako nieprawidłowo sformatowany InjectAssociatedFileszapisuje teraz/Subtypew słowniku strumienia EmbeddedFile, gdy wywołujący dostarczyTAssociateFile.MIMEType; to pole było zadeklarowane i udokumentowane, ale wtryskiwacz wcześniej wpisywał na sztywno/Type /EmbeddedFilei ignorował je (ISO 32000-2 §7.11.4 zezwala na/Subtypew strumieniu)
Naprawiono (Fixed)
- Import XFDF pomijał pierwszy bajt zawartości po znaku UTF-8 BOM oraz pierwszy bajt, gdy BOM nie był obecny: wywołania
BytesToAnsi(Bytes, 4, ...)(z BOM) orazBytesToAnsi(Bytes, 1, ...)(bez BOM) używały przesunięć startowych przesuniętych o jeden, ponieważBytesToAnsipobiera indeks tablicy liczony od 0; wywołania używają teraz odpowiednio3oraz0 - Funkcja
ExtractSignatureValuemiała dwa błędy wcięć wiszącegoif, przez które instrukcjaR.Position:= CNbyła uruchamiana bezwarunkowo dla opcjonalnych gałęzicertificates [0]isignedAttrs [0]; gałęzie te są teraz owinięte w sekcjebegin/end, dzięki czemu pozycja jest przesuwana tylko wtedy, gdy opcjonalny znacznik TLV został rzeczywiście odczytany (ten sam błąd został naprawiony wAddSignatureTimestampToCmsw wersji v2.22.0)
Version 2.35.0
Zmieniono (Changed)
- Funkcje
TFPDFAvail_IsDocAvail,TFPDFAvail_IsPageAvailorazTFPDFAvail_IsFormAvailprzyjmują terazhints: PFX_DOWNLOADHINTSzamiastvar hints: FX_DOWNLOADHINTS, dzięki czemu udokumentowany tryb tylko do odczytunullptr(sprawdzenie bieżącej dostępności bez żądania dodatkowych danych) jest osiągalny z poziomu Delphi; nagłówek PDFium wyraźnie zezwala na to, byhintsmiał wartość null, co wcześniejsze powiązanie zvaruniemożliwiało TFPDF_SetSystemFontInfoprzyjmuje terazpFontInfo: PFPDF_SYSFONTINFOzamiastvar pFontInfo: FPDF_SYSFONTINFO, więc wywołujący mogą przekazaćnil, aby nakazać PDFium zaprzestanie korzystania z wcześniej zarejestrowanego interfejsu czcionek systemowych (udokumentowana ścieżka wyłączenia)TPdfThumbnailView.Paintoblicza terazVisibleRowsza pomocą tego samego wzoru coUpdateScrollBarRange(ClientHeight div RowHeight), dzięki czemu liczba renderowanych wierszy odpowiada rozmiarowi strony paska przewijania; poprzedni wzór przeznaczony tylko do rysowania ((ClientHeight - FMarginY) div RowHeight + 1) mógł różnić się o jeden wiersz przy granicznych wysokościach, co marnowało renderowanie wiersza poza stroną lub pomijało ostatni widoczny wiersz
Version 2.34.0
Dodano (Added)
TPdf.SaveAsEncrypted/SaveAsEncryptedToStream— wysokopoziomowe API, które zapisuje dokument, a następnie szyfruje go za pomocą standardu PDF 2.0 AES-256-CBC (V=5/R=5/R=6); przyjmuje rekordTPdfEncryptOptionsz hasłem użytkownika/właściciela, uprawnieniami i wersją, po czym deleguje zadanie doEncryptDocumentBytes- Szyfrowanie ciągów dosłownych StrF:
EncryptDocumentBytesszyfruje teraz ciągi dosłowne typu(...)w obiektach niestrumieniowych (słownik Info itp.) do ciągów szesnastkowych AES-256-CBC, co odpowiada formatowi szyfrowania strumieniowego (16-bajtowy wektor IV + szyfrogram PKCS7); ciągi szesnastkowe typu<...>pozostają nienaruszone
Version 2.33.0
Dodano (Added)
- Wtryskiwacz szyfrowania AES-256-CBC dla całego dokumentu w module
FPdfEncrypt.pas; funkcjaEncryptDocumentBytesprzyjmuje plik PDF w formacie tekstowym oraz hasło, szyfruje każdy pośredni obiekt strumieniowy (16-bajtowy wektor IV + AES-256-CBC PKCS7 przy użyciu klucza pliku), aktualizuje wartość/Length, dołącza obiekt słownika/Encrypti odbudowuje kompletną klasyczną tabelę odwołań skrośnych wraz z sekcją trailer zawierającą wpisy/Encrypti/ID; kończy to wdrażanie stosu szyfrowania PDF 2.0 (blok AES + GCM + SHA-512/384 + wyprowadzenie klucza R6 + słownik + przeszukiwanie dokumentu) EncryptStreamPayloadhelper — format strumienia PDF 2.0 AES-256 (wektor IV dodany na początku szyfrogramu AES-CBC-PKCS7), możliwy do wielokrotnego użycia przez wywołujących zarządzających własnym układem obiektów
Version 2.32.0
Dodano (Added)
- Skrót SHA-512 / SHA-384 (FIPS 180-4) w nowym module
FPdfSha512.pas, zaimplementowany w czystym Pascalu; wymagany do iteracji skrótu hasła R6 w PDF 2.0, która rozgałęzia się na podstawie 128-bitowej wartości mod 3 w celu wyboru SHA-256/384/512 w każdej rundzie; zgodność potwierdzona testami znanej odpowiedzi FIPS-180-4 B.1 - Algorytm wyprowadzania klucza szyfrowania PDF 2.0 oraz generator słownika Encrypt w nowym module
FPdfEncrypt.pas; implementuje algorytm 2.B z ISO 32000-2 §7.6.4.3 (schemat skrótu R6: AES-128-CBC + iteracyjny wybór SHA-256/384/512), wyprowadza 32-bajtowy klucz szyfrowania pliku oraz wpisy/O,/U,/OE,/UE,/Perms, a także tworzy słownik Encrypt z wartościami V=5/R=5/R=6 oraz/CFM /AESV3; wykorzystuje bufory bajtowe w stylu TBytes
Version 2.31.0
Dodano (Added)
- Prymitywy szyfru blokowego AES (FIPS 197) w nowym module
FPdfAes.pas; czysty Pascal, implementujący szyfry blokowe AES-128 i AES-256, funkcje pomocnicze trybu CBC oraz silnik CSPRNG; testy znanej odpowiedzi z FIPS-197 Dodatek C.2 / C.3 weryfikują poprawność; stanowi to kryptograficzny fundament pod stos szyfrowania standardu PDF 2.0 i jego funkcje - Szyfrowanie uwierzytelnione AES-GCM (NIST SP 800-38D) w nowym module
FPdfAesGcm.pas; implementuje mnożenie GHASH (GF(2^128)), GCTR oraz konstrukcję GCM AEAD w oparciu o prymitywy blokowe AES; przypadki testowe NIST GCM 1 i 3 (AES-128) dokładnie pasują do autorytatywnego szyfrogramu i znacznika, a przypadek testowy 13 (AES-256) przechodzi pełny cykl szyfrowania-deszyfrowania; GCM jest trybem określonym w specyfikacji ISO/TS 32003 dla dokumentów PDF 2.0 i nowszych - Walidacja integralności ParentTree i ClassMap w PDF/A Level A (ISO 19005-1 §6.8.3); błąd
pvaiParentTreeMissingoznacza StructTreeRoot pozbawiony drzewa numerów /ParentTree; błądpvaiClassMapUnresolvedoznacza odwołanie do klasy /C bez obecności /ClassMap
Version 2.30.0
Dodano (Added)
- Wstrzykiwanie powiązanych plików (
InjectAssociateFiles/TPdf.SaveAsWithAssociateFiles, ISO 32000-2 §7.11.4); nowy modułFPdfAssocFilesdołącza tablice referencji specyfikacji plików/AFdo katalogu lub dowolnego słownika strony, pokrywając wszystkie osiem wartości/AFRelationshipz tabeli 45 standardu ISO 32000-2; ponownie wykorzystuje sprawdzony wzorzec aktualizacji przyrostowych zInjectPadesDssMarkers - Obsługa standardu PDF/X-6 (ISO 15930-9:2020);
TPdfXConformancedodaje wartośćpxc6, którą wtryskiwacz i walidator przekazują przez identyfikacjępdfxid:GTS_PDFXVersion; PDF/X-6 jest opartym na PDF 2.0 następcą formatu PDF/X-4 w zakresie pełnej wymiany danych - PDF/A zabrania akcji
/Thread(luka w białej liście ISO 19005-1 §6.6.1); lista zabronionych akcji obejmuje teraz Thread obok Launch, ResetForm, ImportData, SetOCGState, SetState, GoTo3DView, Rendition oraz Hide
Naprawiono (Fixed)
- Ścieżka walidacji PDF/A-4e respektuje teraz te same testy struktury tagowanej, MarkInfo oraz podziałów wyrazów co Level A; wprowadzone w v2.29.0 złagodzenie po stronie zapisu dotyczyło
PdfAIsLevelE, ale trzy bramki wValidatePdfACompliancesprawdzały wyłączniePdfAIsLevelA, przez co dokument PDF/A-4e pozbawiony struktury tagowanej przechodził walidację bez zgłaszania uwag - Rozbieżność w testach
/BaseStatedla OCG: poprawka z wersji v2.28.0 w procedurze PostProcess prawidłowo rozszerzyła akceptację na/ONlub/OFF(ISO 32000-1 tabela 8.70), ale testy w Delphi i C++ wciąż oczekiwały odrzucenia wartości/OFF; testy używają teraz rzeczywiście nieprawidłowej wartości (/Undefined), a nowy test pozytywny blokuje akceptację/OFF - Nadmierne dopasowanie geoprzestrzennego
/Subtype /GEO: funkcjaContainsDictionarySubtype('GEO')dopasowywała dowolny słownik zawierający ten token, włączając niepowiązane słowniki, takie jak zabłąkany/ViewerPreferences << /Subtype /GEO >>; nowa funkcjaContainsMeasureDictionarySubtypedodatkowo wymaga obecności/Type /Measurelub klucza pokrewnego właściwego dla Measure, dzięki czemu słowniki inne niż powiązane z Measure nie wyzwalają już wymogu ADBE ExtensionLevel 3
Version 2.29.0
Dodano (Added)
- Obsługa formatu PDF/A-4 (ISO 19005-4:2020) w walidatorze, wtryskiwaczu XMP oraz warstwie modelu obiektowego Pdfium;
TPdfAConformancedodaje wartościpac4base,pac4fipac4e; poziom bazowy to PDF 2.0 (ISO 32000-2) i zastępuje dotychczasowe poziomy A/B/U kombinacją bazy oraz opcji F (formularze) i E (dostępność); funkcjaValidatePdfAodczytuje pakiet XMP z wartościąpdfaid:part=4(poziom bazowy pomija element zgodności),SaveAsPdfAgo emituje, aSignPadesWithPdfAakceptujepac4basejako kontener do długoterminowej archiwizacji - Powiązanie
FPDFBookmark_GetColor— ostatni niepowiązany publiczny eksport z PDFium (469/469);TBookmarkotrzymuje polaHasColoriColor, wypełniane z tablicy zakładek/C(ISO 32000-1 §12.3.3); powiązanie to wykorzystuje tolerancyjne ładowanie, dzięki czemu starsze biblioteki DLL wydane przed tym eksportem nadal działają poprawnie - Sprawdzanie wersji nagłówka PDF/E-1 (ISO 24517-1 §5)
pveiBadPdfVersion— standard PDF/E-1 bazuje na PDF 1.6, więc nagłówek inny niż 1.6 jest teraz oznaczany jako błąd - PDF/R-1 (ISO 23504-1)
pvriEncryptVersionMismatch— szyfrowanie jest dozwolone wyłącznie przy nagłówku%PDF-2.0; ciało dokumentu w wersji 1.x zawierające sekcję/Encryptjest teraz oznaczane jako błąd (wcześniej operacja ta była ignorowana) - Błąd PDF/R-1
pvriBadMediaBox— poleMediaBoxkażdej strony musi mieć format[0 0 w h]; funkcjaPdfRHasNonZeroMediaBoxOriginjest niezależnym od ustawień regionalnych skanerem ASCII pomijającym definicje MediaBox będące referencjami pośrednimi - Błąd PDF/A Level A
pvaiRoleMapUnresolved(ISO 19005-1 §6.8.3.4) — obecna, lecz niekompletna mapa RoleMap, pozostawiająca niestandardowe typy struktury/Sbez zmapowania, jest teraz oznaczana jako błąd, co eliminuje lukę w dotychczasowym sprawdzeniu obecnościpvaiRoleMapMissing
Naprawiono (Fixed)
- Funkcja
PdfVersionToName(20)zwracała"1.0"zamiast"2.0", co powodowało uszkodzenie wpisu/Versionw katalogu oraz błędne komunikaty walidatora przy każdym zapisie PDF 2.0; formatowanie dzieli teraz jawnie numer główny i podrzędny dla kodów wersji>= 20 - Koder liczb ujemnych INTEGER w
FPdfAsn1.pasnie kompilował się w Delphi 12 (błądE2015przyInteger(-(V<0))), co blokowało cały projekt testowy; naprawiono poprzez użycieInt64(-Ord(V<0))dla maski rozszerzenia znaku - Lista zabronionych adnotacji w PDF/A zawiera teraz adnotacje typu
/RichMediawe wszystkich częściach standardu (wcześniej pominięte; ISO 32000-1 §12.5.6.35 zabrania ich stosowania w kontenerze PDF/A)
Version 2.28.0
Dodano (Added)
- Typ
TPdfVersionzawiera teraz wartośćpv20dla standardu PDF 2.0 (ISO 32000-2); funkcjaDecodePdfVersion(20)zwracapv20zamiastpvUnknown, aEncodePdfVersion(pv20)emituje wartość 20, dzięki czemu wersja dokumentu PDF 2.0 nie ulega zagubieniu przy ponownym odczycie i może być zapisana w sposób jawny
Zmieniono (Changed)
- Funkcja
DecodeDateanalizuje teraz łańcuchy dat PDF z opcjonalnymi polami końcowymi zgodnie z dokumentacją PDF Reference 3.8.3, zamiast wymagać pełnego 23-znakowego formatuD:YYYYMMDDHHmmSSOHH'mm'; zgodne skrócone daty, takie jakD:20260712,D:20260712153000orazD:20260712153000Zsą teraz akceptowane (wcześniej były one odrzucane przez sztywny warunek sprawdzania długościLength=23); przesunięcie strefy czasowej w godzinach jest teraz weryfikowane pod kątem rzeczywistego zakresu UTC-12..UTC+14 zamiast warunku> 23 - Funkcja
FPdfMeasure.MeasureTextkoduje teraz nazwę czcionki jako FPCAnsiString/ DelphiUTF8Encode, co odpowiada innym miejscom wywołań FPDF_BYTESTRING w bibliotece, zamiast prostego rzutowania naAnsiString, które zniekształcało nie-ASCII nazwy rodzin czcionek za pomocą bieżącej strony kodowej
Naprawiono (Fixed)
- Ścieżka wartości ujemnych w
TDerWriter.Integerzawieszała się lub generowała nieprawidłowe struktury DER: pętlawhile V <> -1 do V := V shr 8pozostawiała tablicęInnerpustą dla wartościValue = -1(co skutkowało błędem przekroczenia zakresu przy następującym wywołaniuInner[Length(Inner)-1]) i nadprodukowała bajty dla innych wartości ujemnych; koder wyodrębnia teraz bajty w kodzie uzupełnienia do dwóch z przesunięciami rozszerzającymi znak i zatrzymuje się poprawnie, gdy reszta jest czystym rozszerzeniem znaku; pola INTEGER w strukturach CMS/PAdES są dodatnie, więc dotyczy to tylko wywołujących przekazujących wartości ujemne, ale ścieżka ta została poprawiona - Funkcje
TPdf.GetCharacterOriginorazTPdfView.GetCharacterOriginignorowały wartość zwracaną przezFPDFText_GetCharOrigini w przypadku błędu zwracały niezainicjowany punkt; wynik jest teraz zainicjowany zerami, a nieudany odczyt zwraca punkt początkowy (zgodnie z kontraktem metodyGetCharacterRectangle)
Version 2.27.0
Zmieniono (Changed)
- Demo
PDFVieweriMultiPageViewerdla Delphi, C++Builder i Lazarus obsługują wyszukiwanie, klawiszeEnteriF3orazEscdo anulowania aktywnego wyszukiwania lub drukowania - Drukowanie podglądu uwzględnia bieżący obrót i wybiera orientację pionową lub poziomą
- Demo
ViewerInteractionLabobsługują skrótyCtrl+A,Ctrl+C,Enter,F3iEscbez przechwytywania natywnych poleceń edycji
Naprawiono (Fixed)
- Anulowanie drukowania w C++Builder i Lazarus przerywa zadanie drukarki i opuszcza zagnieżdżone pętle kopii, stron i sortowania
- Przycisk Cancel w demo
MultiPageViewerdla Delphi jest teraz podłączony do swojej procedury obsługi, a pola wyszukiwaniaMultiPageViewerw C++Builder/Lazarus zachowują natywną edycję klawiszami strzałek, Home i End
Version 2.26.0
Zmieniono (Changed)
TPdf.GetObjectBitmap,TPdf.GetBitmap,TPdf.GetThumbnaili odpowiednikiTPdfViewpobierają teraz blokadę renderowania wokół wywołańFPDFImageObj_GetBitmap/FPDFPage_GetThumbnailAsBitmap, na wzórRenderPage/RenderTile; to wywołania po stronie renderującej PDFium, które wcześniej działały bez blokady i mogły wchodzić w wyścig z równoczesnymUnloadPage/ReloadPagena tym samym dokumencieTPdf.RenderPageThumbnailrespektuje teraz wpis/Rotatestrony: dopasowanie jest ponownie obliczane na podstawie wymiarów po obrocie dla stron/Rotate 90oraz270, dzięki czemu proporcje miniatury odpowiadają temu, co pokazuje podgląd, zamiast bazować na wymiarach wewnętrznych (bez obrotu) zwracanych przezFPDF_GetPageSizeByIndex
Naprawiono (Fixed)
TPdfView.GetCharacterRectangleignorowało wartość zwracaną przezFPDFText_GetCharBoxi przekazywało niezainicjowanyTPdfRectangledoPageToDevice, gdy PDFium zgłaszał błąd; prostokąt jest teraz inicjalizowany zerami, a nieudaneGetCharBoxzwracaRect(0,0,0,0)GetLinkAnnotations: długość bufora ścieżki URI i ścieżki pliku była zaniżona o jeden — drugie wywołanieFPDFAction_GetURIPath/GetFilePathprzekazywałosize(wraz z końcowym NUL) jako długość bufora przydzielonego jakosize-1; wywołanie przekazuje terazsize-1, więc nie zapisze poza przydziałem w kompilacji PDFium, która nie stosuje samoczynnego przycinania
Version 2.25.0
Zmieniono (Changed)
TPdf.AddText,SetText,AddPathiInsertFormObjectFromXObjectunieważniają teraz buforowaną stronę tekstu i adnotacje łączy przed regeneracją treści strony, na wzórSetTextPositionsiRemoveObject; wcześniej wywołanieGetText/GetWebLinks/FindFirstpo edycji strony zwracało nieaktualne dane tekstu i łączy przechwycone przed edycją, a przetrzymany uchwytFPDF_TEXTPAGEbył używany po regeneracji treści, co skutkowało niezdefiniowanym zachowaniemTPdfView.RenderPage(HDC, ...)pobiera teraz blokadę renderowania i maskuje wyjątki FPU/SSE wokół wywołaniaFPDF_RenderPage, na wzór wszystkich pozostałych punktów wejścia renderowania; poprzednie przeciążenie piszące bezpośrednio do DC mogło wchodzić w wyścig z równoczesnymUnloadPage/ReloadPagena tym samym dokumencie i pozostawiało wyjątki FPU niemaskowane w kompilatorach starszych niż D12- Demo
PrintPDFw Delphi wywołuje teraz przy anulowaniuPrinter.Abortzamiast pozwalać, by blokfinallydoszedł doPrinter.EndDoc, co wysyłało do drukarki strony wyrenderowane przed anulowaniem; demo w Lazarusie już obsługiwało to poprawnie
Naprawiono (Fixed)
TPdf.GetCharacter,TPdf.GetCharcodei ich odpowiedniki wTPdfViewobcinały punkty kodowe płaszczyzny astralnej (emoji, CJK Extension B) zwracane przezFPDFText_GetUnicodedo dolnych 16 bitów poprzezWideChar(), produkując samotną surrogate psującą dalsze przetwarzanie tekstu; znaki powyżej U+FFFF zwracają teraz U+FFFD (znak zastępczy), a do pobrania pełnego kodowania UTF-16 znaków astralnych służyGetTextGetWebLinkswywoływałoSetLength(Rectangles, FPDFLink_CountRects(...))bez zabezpieczenia przed zwróceniem-1, co na źle uformowanej stronie kończyło się wyjątkiemEOutOfMemory; ujemna liczba jest teraz ograniczana do zeraTPdf.Destroyczyści teraz łańcuchPasswordz pamięci (przezUniqueString+FillChar) zanim bufor zarządzany licznikiem odwołań zostanie zwolniony, dzięki czemu hasło nie pozostaje czytelne na stercie po zniszczeniu komponentu
Version 2.24.0
Dodano (Added)
TPdf.DeletePage,GetAttachment,GetAttachmentName,GetAttachmentType,SetAttachmentiDeleteAttachmentsprawdzają teraz indeks strony/załącznika i zgłaszająEPdfErrordla wartości poza zakresem, na wzór istniejącego zachowania akcesorów adnotacji; wcześniej indeks poza zakresem trafiał wprost do PDFium i skutkował cichym brakiem działania lub niezdefiniowanym zachowaniem
Naprawiono (Fixed)
- Wycieki uchwytów obiektów stron przy błędzie w
TPdf.AddText,AddBitmapiAddJpegImage: gdyFPDFText_SetText,FPDFImageObj_SetBitmap,FPDFImageObj_SetMatrixlubFPDFImageObj_LoadJpegFileInlinezgłaszało wyjątek po utworzeniu obiektu, ale zanimFPDFPage_InsertObjectprzekazał go stronie, natywny uchwytFPDF_PAGEOBJECTprzeciekał; każda ze ścieżek niszczy teraz obiekt przy wyjątku przed jego ponownym zgłoszeniem TPdf.UnloadPageporzucało trwający uchwytFPath(ustawiony przezCreatePath, ale jeszcze niewykorzystany przezAddPath), przypisując munilbez wywołaniaFPDFPageObj_Destroy; uchwyt jest teraz niszczony, więc ścieżka utworzona i porzucona (albo przerwana przełączeniem strony) nie przecieka już więcejTPdf.InsertFormObjectFromXObjectpomijało wywołanieUpdatePage(FPDFPage_GenerateContent), które wykonuje każde sąsiednie wstawienie (AddText/AddPath/AddBitmap/AddJpegImage/SetText/RemoveObject), przez co Form XObject wstawiony tą drogą znikał przy następnym ponownym wczytaniu lub zapisie;UpdatePagejest teraz wywoływane po wstawieniu
Version 2.23.0
Naprawiono (Fixed)
- Walidacja
/BaseStatetreści opcjonalnej akceptuje teraz/OFFobok/ON(ISO 32000-1 Table 8.70 dopuszcza obie wartości); poprzednie sprawdzenie odrzucało poprawne konfiguracje/OCProperties /D /BaseState /OFFbłędem “malformed optional content”, mimo że plik był zgodny ze standardem - Walidacja
/Intenttreści opcjonalnej akceptuje teraz/Designoraz tablice nazw, takie jak[/View /Design], a nie tylko literał/View; ISO 32000-1 Table 8.70 definiuje/Intentjako nazwę lub tablicę nazw z zakresu/Viewi/Design, a poprzednie sprawdzenie jedną wartością nadmiarowo odrzucało wynik standardowych narzędzi autorskich - Wykrywanie słownika geoprzestrzennego Measure dla bramki PDF 1.7
/Extensions /ADBEExtensionLevel 3 nie wymaga już/Type /Measure, który ISO 32000-1 Table 254 oznacza jako opcjonalny; producenci GeoPDF pomijający/Type(PDFBox, QGIS, FME) wcześniej omijali bramkę i po cichu produkowali niezgodne wyjście PDF 1.7, a detektor dopasowuje teraz samo/Subtype /GEO
Version 2.22.0
Zmieniono (Changed)
- Obliczenia dopasowania zoomu w
TPdfView(GetPageZoom,GetPageWidthZoom,GetPageHeightZoom) używają terazClientWidth/ClientHeightzamiast wymiarów oknaWidth/Height, więcpfmFitPage/pfmFitWidth/pfmFitHeightdopasowują stronę do widocznego obszaru roboczego, a nie do zewnętrznej ramki z paskami przewijania i obramowaniem; znika tym samym redundantny pasek przewijania pojawiający się, gdy dopasowana strona była minimalnie większa od obszaru klienta AddSignatureTimestampToCmszgłasza teraz jawnyExceptionwskazujący nieczytelne pole CMS SignerInfo (version / sid / digestAlgorithm / signedAttrs / signatureAlgorithm) zamiast po cichu wykonywaćExiti przepuszczać częściowy parsing dalej, jakby był to kompletny podpisany CMS; poprawiono też brakujący blokbegin/endwokół opcjonalnej gałęzisignedAttrs [0], który pozostawiałR.Positionbez przesunięcia
Naprawiono (Fixed)
- Wyciek uchwytu klucza prywatnego CNG w
ResolveWinSigner: gdyCryptAcquireCertificatePrivateKeykończyło się sukcesem, ale późniejsze wydobycie wystawcy/numeru seryjnego lubTWinCmsSigner.Createzgłaszało wyjątek, uchwytNCryptKeyHandlenigdy nie był zwalniany, bo własność przechodzi na podpisującego dopiero przy udanym konstruktorze; konfigurację po pozyskaniu uchwytu otoczono teraz zabezpieczeniem, dzięki czemu przy każdej awarii uchwyt jest zwalniany przezNCryptFreeObject EcDsaP1363ToDerodrzuca teraz całkowicie zerową połowęrlubszamiast emitowaćINTEGER 0; podpisy ECDSA zr = 0lubs = 0są nieprawidłowe (RFC 4754 §6 / FIPS 186-4 §6 wymagają1 ≤ r, s ≤ n-1), a pobłażliwy weryfikator przyjąłby je inaczej jako prawdziwe
Version 2.21.12
Naprawiono (Fixed)
- Jawne zapisy do PDF 1.5 przez PDF 1.7 odrzucają teraz nieprawidłowe struktury
/OCPropertiesw katalogu dokumentu, w tym brakujące wymagane wpisy/OCGslub/D, nieprawidłowe wartości konfiguracji domyślnej oraz wpisy stanu niebędące tablicami
Version 2.21.11
Naprawiono (Fixed)
- Jawne zapisy z określoną wersją PDF odrzucają teraz bezpośrednie i pośrednie wpisy
/Annotsstron, których słowniki adnotacji pomijają wymagane wpisy/Subtypelub/Rect
Version 2.21.10
Naprawiono (Fixed)
- Jawne zapisy do PDF 1.7 wymagają teraz, aby słowniki geoprzestrzenne
/Type /Measure /Subtype /GEOoraz adnotacje Projection deklarowały/Extensions /ADBEz/BaseVersion /1.7i/ExtensionLevel 3lub nowszym
Version 2.21.9
Naprawiono (Fixed)
- Jawne zapisy do PDF 1.7 wymagają teraz, aby adnotacje RichMedia oraz akcje
RichMediaExecutedeklarowały/Extensions /ADBEz/BaseVersion /1.7i/ExtensionLevel 3lub nowszym
Version 2.21.8
Naprawiono (Fixed)
- Jawne zapisy do PDF 1.7 wymagają teraz, aby strumienie 3D PRC deklarowały
/Extensions /ADBEz/BaseVersion /1.7i/ExtensionLevel 1lub nowszym, zamiast traktować PRC jako podstawową funkcję PDF 1.7
Version 2.21.7
Naprawiono (Fixed)
- Jawne zapisy do PDF 1.4 i starszych odrzucają teraz wpisy
/SMaskInDataobrazów XObject, w tym jawną wartość0, ponieważ osadzone kanały miękkiej maski JPEG 2000 wymagają PDF 1.5 lub nowszego
Version 2.21.6
Naprawiono (Fixed)
- Jawne zapisy do PDF 1.4 i starszych odrzucają teraz 16-bitowe obrazy XObject, które wymagają PDF 1.5 lub nowszego, natomiast cele PDF 1.5 przez PDF 1.7 zachowują dane obrazu
/BitsPerComponent 16
Version 2.21.5
Naprawiono (Fixed)
- Jawne zapisy do PDF 1.4 i starszych odrzucają teraz wartości
/PageLayout /TwoPageLefti/TwoPageRightw katalogu dokumentu, które wymagają PDF 1.5 lub nowszego, natomiast cele PDF 1.5 przez PDF 1.7 zachowują żądany dwustronicowy układ
Version 2.21.4
Naprawiono (Fixed)
- Jawne zapisy do PDF 1.3 odrzucają teraz wpisy
/Langw katalogu dokumentu, które wymagają PDF 1.4 lub nowszego, natomiast cele PDF 1.4 przez PDF 1.7 zachowują identyfikator języka
Version 2.21.3
Naprawiono (Fixed)
- Jawne zapisy PDF 1.3 odrzucają teraz drzewa nazw
/EmbeddedFileskatalogu dokumentu, wymagające PDF 1.4 lub nowszego, nie odrzucając przy tym strumieni osadzonych plików odwoływanych przez starsze specyfikacje pliku
Version 2.21.2
Naprawiono (Fixed)
- Jawne zapisy PDF 1.3 odrzucają teraz aktywne strumienie metadanych, które wymagają PDF 1.4 lub nowszego, zachowując je dla celów od PDF 1.4 do PDF 1.7
Version 2.21.1
Naprawiono (Fixed)
- Walidacja odwołań hybrydowych stosuje teraz uzupełniające wpisy
/XRefStmprzed klasycznymi symbolami zastępczymi xref tej samej wersji, dzięki czemu skompresowane adnotacje i inne obiekty zależne od wersji nie są pomijane, gdy tabela zgodności oznacza je jako wolne
Version 2.21.0
Zmieniono (Changed)
- Wszystkie przykłady przeglądarek Delphi, C++Builder i Lazarus mogą otwierać plik PDF przekazany jako pierwszy argument wiersza poleceń, a przykłady
MultiPageViewerdla C++Builder i Lazarus udostępniają jawne skróty zaznaczania wszystkich elementów i kopiowania
Naprawiono (Fixed)
- Przykłady przeglądarek odrzucają teraz nieprawidłowe cele stron zakładek i linków, zachowują błędy ładowania, spójnie walidują ręczne wprowadzanie powiększenia, drukują żądaną wypełnioną formularzem stronę zamiast powtarzać widoczną stronę i przerywają anulowane zadania drukowania Delphi zamiast wysyłać częściowe wyjście
Version 2.20.0
Zmieniono (Changed)
- Wszystkie przykłady przeglądarek Delphi, C++Builder i Lazarus oferują teraz spójne skróty do otwierania, wyszukiwania, zapisywania, drukowania, powiększania i nawigacji po stronach, a każdy wariant
ViewerInteractionLabobsługuje też przeskakiwanie do stron, zweryfikowane ręczne powiększenie od 10–600%, trwałe dzienniki interakcji i testy pętli współrzędnych kliknięcia
Version 2.19.1
Naprawiono (Fixed)
- Jawna walidacja wersji PDF podąża teraz za aktywnym łańcuchem wersji klasycznej, hybrydowej lub xref-stream, łącznie z wpisami skompresowanych obiektów, dzięki czemu zastąpione, zwolnione i niezapisane obiekty nie powodują już fałszywych błędów wersji funkcji
Version 2.19.0
Zmieniono (Changed)
- Przykłady załączników, wyodrębniania obrazów, wyodrębniania tekstu, konwersji stron i podziału dla C++Builder i Lazarus używają teraz dedykowanych folderów wyjściowych lub bezpiecznie sfinalizowanych plików, stabilnych nazw z dopełnieniem zerami, responsywnych aktualizacji postępu i podsumowań zakończenia z liczbą błędów na element
Naprawiono (Fixed)
CJKTextLabdla C++Builder mierzy teraz tekst przez wyeksportowane funkcje edycji PDFium, aMergePDFunika niejednoznacznego przeciążenia komunikatu VCL, przywracając czyste kompilacje w RAD Studio 37
Version 2.18.3
Naprawiono (Fixed)
- Znacznik czasu dokumentu PAdES B-LTA jest teraz rejestrowany jako wykrywalne pole podpisu — niewidoczny Widget dostępny przez
/Annotspierwszej strony i/FieldsAcroForm (ETSI EN 319 142-1 §5.4.3) — zamiast nieosiągalnego osieroconego obiektu, którego nie mogły znaleźć walidatory wyliczające pola podpisu; istniejące adnotacje i pola są zachowane
Version 2.18.2
Naprawiono (Fixed)
- Podpisywanie PAdES i klasyczny zapis tabel odwołań krzyżowych zgłaszają teraz wyraźny błąd, gdy przesunięcie bajtowe przekracza stałą szerokość pola 10-cyfrowego (~9,3 GB), zamiast po cichu pozostawiać symbol zastępczy
/ByteRangeniezapisany (co tworzy nieważny podpis) lub przekraczać 20-bajtową linię xref (ISO 32000-1 §7.5.4); wynik strumienia tabel odwołań krzyżowych używa 8-bajtowych pól binarnych i nie jest objęty tą zmianą
Version 2.18.1
Naprawiono (Fixed)
- Podpisywanie PAdES rozwiązuje teraz odwołania pośrednie
/Annots,/AcroFormi/Fieldspierwszej strony przez pełny nagłówek obiektu (ISO 32000-1 §7.5.3) i przez rzeczywisty numer generacji odwołania; poprzednie wyszukiwanie podłańcucha mogło dopasować numer obiektu wewnątrz dłuższego (rozwiązując5 0 Rdo15 0 obj), a zakodowana na stałe generacja pomijała obiekty zgen>0, uszkadzając tablice pól podpisu lub odrzucając prawidłowe dokumenty - Gdy katalog, pierwsza strona,
/Annots,/AcroFormlub/Fieldsznajdują się wewnątrz strumienia obiektów, podpisywanie ponawia teraz próbę na rozszerzonej kopii przed jej odrzuceniem, zamiast od razu odrzucać dokument
Version 2.18.0
Dodano (Added)
ReadPdfVersionInforaportuje wersję nagłówka, efektywną wersję rdzenia, nadpisanie katalogu i poziom rozszerzenia deweloperskiego Adobe ze strumienia PDF
Zmieniono (Changed)
- Jawne zapisy PDF 1.3–1.7 walidują teraz struktury katalogu, zasobów stron, XFA, redakcji i rozszerzeń deweloperskich w kontekście ich macierzystego obiektu; zaszyfrowane wyjście z jawną wersją i przyrostowa normalizacja PDF 1.3 są odrzucane w celu zachowania integralności dokumentu
- Zapisy na ścieżkach pliku zapisują teraz do tymczasowego pliku siostrzanego i zastępują miejsce docelowe dopiero po powodzeniu wszystkich sprawdzeń kompresji, normalizacji i wersji
Naprawiono (Fixed)
- Wyniki PDF 1.3 zawierają teraz wymagany pełny zasób
/ProcSeti usuwają klucze przezroczystości PDF 1.4, gdy jedynie powielają one wartości stanu grafiki inicjalnej PDF 1.3 - Pliki z odwołaniami hybrydowymi, strumieniem xref i strumieniem obiektów nie są już przepisywane przez kompresor klasyczny xref, co zapobiega usuwaniu wpisów skompresowanych obiektów
- Nazwy przypominające klucze funkcji przezroczystości lub katalogu wewnątrz łańcuchów, komentarzy lub niezwiązanych map zasobów nie powodują już fałszywych błędów wersji docelowej
Version 2.17.0
Dodano (Added)
- Podpisy PAdES są teraz rejestrowane jako niewidoczne adnotacje Widget w tablicy
/Annotspierwszej strony i w tablicy/FieldsAcroForm, zachowując istniejące adnotacje i pola formularza
Zmieniono (Changed)
- Przyrostowe aktualizacje PDF/A, PDF/X, PDF/E, PDF/R, PDF/UA, PDF/VT i PAdES zachowują teraz źródłową reprezentację tabel odwołań krzyżowych: dokumenty ze strumieniem xref otrzymują aktualizację xref-stream zgodnie z wymogami ISO 32000-1 §7.5.8.1, natomiast dokumenty klasyczne nadal otrzymują tabelę xref
- Przesunięcia tabel odwołań krzyżowych,
startxref,/Prev, wartości ByteRange PAdES i przetwarzanie zakresów SHA-256 używają teraz 64-bitowych pozycji z fragmentarycznym haszowaniem, umożliwiając obsługę plików większych niż 2 GB w kompilacjach 64-bitowych - Generowane zapisywalne pakiety XMP rezerwują teraz 2048 bajtów dopełnienia przed zamykającą instrukcją pakietu
Version 2.16.10
Naprawiono (Fixed)
- Rozwijanie strumieni obiektów nie wskrzesza już nieaktualnych kopii obiektów, które przyrostowa aktualizacja przeniosła ze strumienia obiektów do zwykłej definicji (ISO 32000-1 §7.5.7); sprawdzenia zgodności i wstrzykiwanie znaczników poprzednio rozwiązywało nieaktualny katalog lub słownik metadanych w takich plikach
Version 2.16.9
Naprawiono (Fixed)
- W Free Pascal ciągi tekstowe, których dane wejściowe nie są prawidłowym UTF-8, są poszerzane bajt po bajcie jako Latin-1 i zapisywane jako szesnastkowe ciągi UTF-16BE; poprzednio surowe bajty wysokie przeciekały do ciągu dosłownego, co nie jest prawidłowym kodowaniem ciągu tekstowego PDF 1.7
- Dekodowanie strumieni rozpoznaje teraz dane deflate bez opakowania RFC 1950 zlib (powszechna wada uszkodzonych zapisywarek) i dekompresuje je w trybie surowym, dzięki czemu skany zgodności nie są już po cichu ślepe na takie strumienie
Version 2.16.8
Naprawiono (Fixed)
- Przyrostowe aktualizacje zapisywane przez ścieżkę po przetworzeniu zapisu odświeżają teraz drugi element
/IDdrugiego (zmieniającego się) nagłówka zgodnie z wymogami ISO 32000-1 §14.4; poprzednio oba elementy były kopiowane dosłownie, przez co narzędzia do buforowania i synchronizacji widziały niezmieniony identyfikator po każdej aktualizacji
Version 2.16.7
Naprawiono (Fixed)
- Wygaszanie treści strumienia używane przez skany zgodności wymaga teraz, by słowo kluczowe
streambyło poprzedzone końcem wiersza (ISO 32000-1 §7.3.8.1); słowo wewnątrz ciągu dosłownego, jak(downstream), poprzednio wygaszało całą następującą strukturę aż do następnegoendstream, ukrywając rzeczywiste naruszenia przed sprawdzeniami na poziomie bajtów - Skany zabronionych funkcji PDF/X i PDF/E dodatkowo wygaszają ciągi dosłowne i komentarze (§7.2.2), dzięki czemu wartość taka jak
/Title (see /JavaScript docs)ani skomentowany token nie generuje już fałszywego wynikuJavaScript,AcroFormlubLZWDecode
Version 2.16.6
Naprawiono (Fixed)
- Wpisy DPM PDF/VT są teraz walidowane w czasie zapisu zgodnie z dokumentacją: nazwy kluczy naruszające regułę NMTOKEN z ISO 16612-2 §6.6 lub regułę prefiksu rejestrującego z Załącznika E, a także zduplikowane nazwy, są odrzucane zamiast być zapisywane do słownika DPart — nazwa zawierająca spację poprzednio dzieliła się na fałszywą parę klucz/wartość i uszkadzała słownik
Version 2.16.5
Naprawiono (Fixed)
- Usuwanie wpisu słownika, którego wartością jest szesnastkowy ciąg (np.
/Check <...>), usuwa teraz cały wpis; poprzednio wstrzykiwacze pozostawiały za sobą osierocony szesnastkowy ciąg, tworząc składniowo uszkodzony słownik - Usuwanie wpisu, którego odwołanie pośrednie używa znaków nowej linii między tokenami (ISO 32000-1 §7.3.10 dopuszcza dowolne białe znaki), nie pozostawia już za sobą numeru generacji i słowa kluczowego
R
Version 2.16.4
Naprawiono (Fixed)
- Skan maksymalnego numeru obiektu nie wymaga już, by nagłówki obiektów zaczynały wiersz (ISO 32000-1 §7.5.3 dopuszcza dowolne białe znaki lub delimiter przed nimi), więc wstrzykiwacze nie mogą już przydzielić numeru obiektu kolidującego z nagłówkiem wbudowanym
N G obji po cichu uszkadzać pliku; numery obiektów są ograniczone przez sufit z Załącznika C - Strumienie, których
/Lengthjest odwołaniem pośrednim, teraz rozwiązują wskazany obiekt całkowity i używają jego wartości, gdy zgadza się ona z zamykającymendstream; poprzednio takie strumienie były ograniczane przez wyszukiwanie wzorca, które skracało treści legalnie zawierające sekwencję bajtówendstream— typowe dla osadzonych załączników PDF
Version 2.16.3
Naprawiono (Fixed)
- Kompresja strumieni przepuszcza dokumenty ze strumieniem tabel odwołań krzyżowych (pliki PDF 1.5+ bez klasycznego słowa kluczowego
trailer) bez zmian; ścieżka przebudowy poprzednio błędnie parsowałastartxrefjako lokalizację tabeli i syntetyzowała odgadnięty nagłówek, co mogło tworzyć nieotwieralny plik - Kompresor pomija strumienie metadanych XMP, dzięki czemu dokument PDF/A zachowuje swój obowiązkowy niefiltrowany strumień metadanych (ISO 19005-1 §6.7.2), i pozostawia niezmienione zewnętrzne strumienie plików (
/Fz/FFilter) - Przebudowana tabela tabel odwołań krzyżowych skanuje kopię dokumentu z usuniętymi strumieniami, więc binarna zawartość strumieni nie może już fałszować nagłówków obiektów ani nadymać tabeli;
/Sizeprzebudowanego nagłówka odzwierciedla teraz rzeczywistą tabelę, a numery obiektów są ograniczone sufitem z Załącznika C - Lokalizowanie oryginalnej tabeli tabel odwołań krzyżowych akceptuje teraz zakończenia wierszy tylko CR (ISO 32000-1 §7.5.1) i nie może już dopasować liter
xrefwewnątrzstartxref; skanowanie słowa kluczowego strumienia zyskało tę samą ochronę przed ogonemendstream, co reszta kodu, i pomija teraz skanowane treści strumieni
Version 2.16.2
Naprawiono (Fixed)
- Parsowanie liczb całkowitych w czytniku PDF na poziomie bajtów akceptuje teraz jawny znak
+dopuszczony przez ISO 32000-1 §7.3.3 i odrzuca ciągi cyfr powodujące przepełnienie, dzięki czemu wrogie lub uszkodzone dokumenty nie mogą już zawijać parsowanych długości i przesunięć do mylących wartości
Version 2.16.1
Naprawiono (Fixed)
- Wstrzykiwacz PDF/UA zapisuje wartość
/Langkatalogu jako poprawny ciąg tekstowy PDF; poprzednio przekazywał wartość przez ucieczkę XML, więc tag języka zawierający&lub nawiasy tworzył uszkodzony wpis, a dane wejściowe spoza ASCII były zapisywane jako surowe UTF-8 - Wpis Info
/ISO_PDFEVersionPDF/E używa wspólnego kodera ciągów tekstowych, dzięki czemu wartości spoza ASCII pozostają prawidłowe w PDF 1.7 - Ucieczka XML dla pakietów XMP usuwa teraz znaki kontrolne niedozwolone w XML 1.0, dzięki czemu metadane skopiowane z uszkodzonego dokumentu źródłowego nie mogą już czynić całego strumienia metadanych niepoprawnie sformowanym
- Konwersja daty PDF na XMP weryfikuje, że pola daty są numeryczne, i dopełnia brakujące pole minut, zapobiegając błędnie sformowanym datom ISO 8601 w generowanych XMP; na platformach innych niż Windows awaryjny znacznik czasu zawiera teraz porę dnia zamiast samej daty
Version 2.16.0
Dodano (Added)
- Dekodowanie strumieni rekonstruuje teraz predyktory
/DecodeParms(predyktory PNG 10–15 i predyktor TIFF 2, ISO 32000-1 §7.4.4.4) po FlateDecode, uwzględniając/Colors,/BitsPerComponenti/Columns; strumienie obiektów skompresowane z predyktorem — powszechny wybór zapisywarek PDF 1.5+ — poprzednio ujawniały bajty różnicowe, przez co obiekty w nich przechowywane były po cichu niewidoczne dla skanów zgodności i wstrzykiwania znaczników
Naprawiono (Fixed)
- Wykrywanie FlateDecode parsuje teraz wartość
/Filterjako nazwę lub tablicę zamiast dopasowania podłańcucha, dzięki czemu kaskadowe łańcuchy filtrów i wystąpienia słowa w niezwiązanych wartościach nie wyzwalają już fałszywego inflate; nieobsługiwane łańcuchy wracają jak poprzednio do surowych bajtów
Version 2.15.1
Naprawiono (Fixed)
- Skaner słowników pomija teraz ciągi dosłowne, szesnastkowe ciągi i komentarze podczas równoważenia
<</>>(ISO 32000-1 §7.2.2), więc słowniki zawierające wartości takie jak(A >> B)lub szesnastkowy ciąg przylegający do zamykającego ogranicznika nie są już skracane podczas parsowania nagłówka, katalogu i skanów zgodności - Wyodrębnianie ciągów dosłownych dekoduje teraz pełny zestaw ucieczek z Tabeli 3 §7.3.4.2 —
\n \r \t \b \f, ósemkowe\ddd, kontynuacje wierszy i normalizację EOL bez ucieczki — zamiast kopiować literę ucieczki dosłownie, przywracając poprawne porównania/Producer,/GTS_PDFXVersioni/ISO_PDFEVersiondla zapisywarek używających ucieczkowych ósemkowych - Ciągi dosłowne zapisywane przez wstrzykiwacze znaczników stosują teraz ucieczkę znaków CR, LF i innych znaków kontrolnych, dzięki czemu wartości przeżywają normalizację końców wierszy po stronie czytnika bajt po bajcie
Version 2.15.0
Naprawiono (Fixed)
- Przyrostowe aktualizacje zapisywane przez wstrzykiwacze znaczników PDF/A, PDF/X, PDF/E, PDF/R, PDF/UA i PDF/VT oraz przez ścieżki podpisywania PAdES i DSS zachowują teraz trwały identyfikator pliku dokumentu źródłowego: pierwszy element
/IDnagłówka jest przenoszony dosłownie zgodnie z wymogami ISO 32000-1 §14.4 i odświeżany jest tylko drugi (zmieniający się) element; poprzednio oba elementy były regenerowane, przez co zewnętrzne odwołania i przepływy pracy weryfikacji długoterminowej widziały inną tożsamość dokumentu po każdym zapisie - Podpisy PAdES, wstrzykiwanie DSS i znaczniki czasu dokumentu B-LTA przenoszą teraz odwołanie
/Infonagłówka źródłowego (ISO 32000-1 §7.5.6), dzięki czemu właściwości dokumentu nie znikają już z paneli czytnika po podpisaniu; nagłówek Document Time-stamp zyskuje też tablicę/ID - Awaryjny
/Infonagłówka dla dokumentów ze strumieniem tabel odwołań krzyżowych lokalizuje teraz poprawnie słownik strumienia XRef i zachowuje numer generacji odwołania; poprzednio nigdy nie dopasowywał się w zgodnych plikach PDF 1.5+, po cichu pomijając/Info
Version 2.14.4
Naprawiono (Fixed)
- Data
/Msłownika podpisu zapisywana przezTPdf.SignPadesiSignPadesByteszawiera teraz obowiązkowy prefiksD:i znacznik UTCZwymagane przez ISO 32000-1 §7.9.4; rygorystyczne walidatory poprzednio odrzucały czas podpisania jako błędnie sformowany ciąg daty
Version 2.14.3
Naprawiono (Fixed)
- Wyszukiwanie kluczy słownika we wspólnym czytniku PDF dopasowuje teraz pełne tokeny nazw (ISO 32000-1 §7.3.5); poprzednio strumień, którego słownik wymieniał
/Length1przed/Length(typowe dla strumieni FontFile), był skracany do nieprawidłowej liczby bajtów, po cichu oślepiając skany zgodności PDF/A, PDF/UA i inne odczytujące strumienie czcionek, CMap lub metadanych - Wyszukiwania kluczy nagłówka
/Encrypt,/Root,/Sizei/Infonie dopasowują już dłuższych kluczy mających ten sam prefiks (np./EncryptMetadata) - Rozwijanie strumieni obiektów nie ufa już uszkodzonej lub wrogiej wartości
/N: wartości nie będące liczbami całkowitymi dają teraz 0 zamiast niezainicjowanej liczby, a górna granica wyprowadzona z/Firstzapobiega nadmiernym alokacjom podczas skanowania błędnie sformowanych dokumentów
Version 2.14.2
Naprawiono (Fixed)
- Wstrzykiwacze znaczników PDF/X, PDF/VT, PDF/UA, PDF/E i PDF/R kopiują teraz zaszyfrowane dokumenty źródłowe bez zmian zamiast dołączać sekcje aktualizacji w postaci jawnej; poprzednie zachowanie tworzyło pliki, których najnowszy nagłówek tracił wpis
/Encrypt(ISO 32000-1 §7.5.6), przez co zgodne czytniki błędnie odczytywały zaszyfrowaną treść jako jawną TPdf.SignPades,SignPadesBytesiInjectPadesDssMarkerszgłaszają terazEPadesCrypto, gdy dokument źródłowy jest zaszyfrowany, zamiast po cichu emitować uszkodzony lub nieweryfikowalny plik; usuń szyfrowanie przed podpisaniem lub osadzeniem materiału DSS
Version 2.14.1
Naprawiono (Fixed)
TPdf.SignPadesiSignPadesByteswypełniają teraz wszystkie cztery pola/ByteRangesłownika podpisu; poprzednio ostatnie trzy pola pozostawały przy swoich zerowych symbolach zastępczych, przez co wytworzone podpisy deklarowały pusty zakres bajtów i nie przechodziły weryfikacji w zgodnych walidatorach- Słowniki Document Time-stamp PAdES B-LTA otrzymują tę samą poprawkę wypełnienia
/ByteRange ValidatePadesComplianceakceptuje teraz standardowy układ podpisu, gdzie przerwa zakresu bajtów zawiera wartość szesnastkową/Contents, i sprawdza, że drugi segment zakresu kończy się dokładnie na końcu pliku; poprzednio sprawdzenie pokrycia przechodziły tylko zakresy bez przerw
Version 2.14.0
Dodano (Added)
TPdf.ExportXFDFserializuje każdą wartość pola formularza i adnotację ze wszystkich stron do dokumentu XFDF (ISO 19444-1), emitując<fields>dla hierarchicznych wartości formularza i<annots>dla wszystkich obsługiwanych podtypów adnotacjiTPdf.ImportXFDFodczytuje dokument XFDF z powrotem do załadowanego PDF, odtwarzając adnotacje na pasujących stronach i stosując wartości pól do ich widgetów- Rekord
TPdfAnnotationzyskał polaName(NM),Subject,ModificationDate(M),CreationDate,Icon,Opacity(CA), punkty końcowe linii, wierzchołki wielokąta/polilinii i gesty listy atramentowej, dzięki czemu cykl eksportu/importu XFDF zachowuje pełne metadane adnotacji - Nowy przykład
XfdfLabw zestawach demonstracyjnych Delphi, C++Builder i Lazarus prezentuje cykl eksportu i importu
Version 2.13.6
Naprawiono (Fixed)
ValidatePdfAtraktuje teraz strumienie/Metadatakatalogu bez/Type /Metadatalub/Subtype /XMLjako brakujące metadane XMP przezpvaiMissingXmpMetadata- Raporty kontrolne PDF/A klasyfikują teraz
pvaiMissingXmpMetadatajako Metadane i zalecają strumień/Metadatakatalogu z/Type /Metadata,/Subtype /XML, niefiltrowanym XMP i znacznikamipdfaid
Version 2.13.5
Naprawiono (Fixed)
ValidatePdfAraportuje teraz adnotacje Widget bez słownika wyglądu oraz adnotacje PDF/A-2 / PDF/A-3 wymagające/AP, ale go niemające, przezpvaiAnnotationApDictViolation- Raporty kontrolne PDF/A kategoryzują teraz
pvaiAnnotationApDictViolationjako treść, której wstrzykiwanie znaczników nie może naprawić
Version 2.13.4
Naprawiono (Fixed)
ValidatePdfAraportuje teraz obrazy wbudowane PDF/A-2 i PDF/A-3, których wartość/Ilub/Interpolatewynositrue, przezpvaiImageDictionaryViolation, uzupełniając istniejącą obsługę słownika XObject obrazu- Raporty kontrolne PDF/A kategoryzują teraz
pvaiImageDictionaryViolationjako treść, której wstrzykiwanie znaczników nie może naprawić
Version 2.13.3
Naprawiono (Fixed)
ValidatePdfAraportuje teraz obrazy wbudowane PDF/A-1 używające filtrów/LZWDecodelub skróconego/LZWwewnątrz strumieni zawartości przezpvaiInlineImageLzwForbidden, uzupełniając istniejącą obsługę obrazów wbudowanych PDF/A-2 i PDF/A-3- Skaner filtrów obrazów wbudowanych omija teraz wiodące nazwy zasobów takie jak
/GS1, unikając zawieszenia podczas skanowania szerszych strumieni zawartości PDF/A-1
Version 2.13.2
Dodano (Added)
TPdf.SetFocusedFormFieldTextzapisuje tekst do bufora edycji aktualnie sfokusowanego pola formularza przezFORM_ReplaceSelection, symetrycznie doFocusedFormFieldText; dla pól tekstowych/kombi AcroForm wartość zatwierdza się do/Vprzy utracie fokusu i jest trwała; dla pól tekstowych XFA zapis trafia jedynie do bufora w pamięci (PDFium nie udostępnia publicznego API do uzgadniania wartości XFA z powrotem do pakietu datasets, więc nie jest trwały po zapisie)- Platforma hosta JavaScript jest teraz dołączana zawsze, gdy silnik V8 jest dostępny, niezależnie od tego, czy dokument jest XFA — dzięki czemu osadzony JavaScript AcroForm (skrypty na poziomie dokumentu, obliczenia pól,
app.alert) może się też wykonywać; poprzedniom_pJsPlatformbył dołączany tylko dla dokumentów XFA, pozostawiając JS AcroForm po cichu wyłączonym
Zmieniono (Changed)
- Dołączanie platformy JavaScript jest teraz niezależne od decyzji XFA w
InitializeFormFill— tabelam_pJsPlatformjest budowana zawsze, gdyV8FeaturesAvailablejest true, stosowana po dowiązaniu wersji XFA/wywołań zwrotnych, a nie zagnieżdżona wewnątrz
Version 2.13.1
Dodano (Added)
- Nowe zdarzenia hosta ujawniają informacje, które wywołania zwrotne formularza z v2.13.0 poprzednio pochłaniały:
OnXfaUriAction,OnXfaPageCountChanged,OnXfaFocusChange,OnXfaEmail,OnXfaHttpRequest,OnXfaOpenFile,OnJavaScriptBeep,OnJavaScriptPrint,OnJavaScriptMail,OnJavaScriptSubmitForm; każde zdarzenie domyślnie zachowuje się jak puste, gdy jest nieprzypisane, więc istniejące hosty są nienaruszone - Właściwość tylko do odczytu
TPdf.XfaFormPacketszwraca jednorazową migawkę wszystkich pakietów XFA (TXfaPacketList), udostępniając wcześniej tylko zadeklarowane, lecz nieużywane typyTXfaPacket/TXfaPacketList - Specyficzne dla XFA kody błędów PDFium
FPDF_ERR_XFALOAD/FPDF_ERR_XFALAYOUTsą teraz powiązane i ujawniane przezLastPdfError, zastępując ogólny komunikat "Unknown error" w przypadku błędów ładowania/układu XFA
Zmieniono (Changed)
FFI_DoURIActionWithKeyboardModifierkonsultuje terazOnXfaUriActionprzed otwarciem URI z pola XFA w powłoce, dając hostowi prawo weta (bezpieczeństwo: złośliwe pole XFA mogło poprzednio bezwarunkowo uruchamiać dowolne adresy URL); nieprzypisana procedura obsługi zachowuje dotychczasowe domyślne zachowanieShellExecuteWDecodeFormFieldTypekieruje teraz typy pól XFA przezIsXfaFormFieldzamiast jawnego rozgałęzienia na 8 przypadków, utrzymując wyrównanie enum zFPDF_FORMFIELD_XFA_*według przesunięcia porządkowego
Naprawiono (Fixed)
ValidatePdfAraportuje teraz twierdzenia PDF/A-1 używające strumieni tabel odwołań krzyżowych lub strumieni obiektów PDF 1.5 za pomocą nowego problemupvaiPdfA1Pdf15Structure, nadal zezwalając na strumienie obiektów dla PDF/A-2 i PDF/A-3
Version 2.13.0
Dodano (Added)
- Pełna obsługa środowiska wykonawczego XFA (XML Forms Architecture):
TPdf.InitializeFormFillpodłącza teraz wszystkie 14 wywołań zwrotnychFPDF_FORMFILLINFOwersji 2 (FFI_DisplayCaret,FFI_GotoURL,FFI_PageEvent,FFI_PopupMenu,FFI_OpenFile,FFI_EmailTo,FFI_UploadTo,FFI_GetPlatform,FFI_GetLanguage,FFI_DownloadFromURL,FFI_PostRequestURL,FFI_PutRequestURL,FFI_OnFocusChange,FFI_DoURIActionWithKeyboardModifier) i dołączaIPDF_JsPlatform, dzięki czemupdfium.dllz włączoną obsługą XFA może renderować i skryptować dynamiczne formularze XFA - Nowy moduł
Lib\FPdfXfa.pasdeklarujący stałe XFA (FXFA_PAGEVIEWEVENT_*,FXFA_MENU_*,FXFA_SAVEAS_*,FPDF_FORMFIELD_XFA_*) oraz typyTXfaPacket/TXfaSaveFormat, wcześniej jedynie wspominane w komentarzach - Czytnik statycznych pakietów XFA w
TPdf:GetXfaPacketCount/GetXfaPacketName/GetXfaPacketContent/GetXfaPacketByNameorazGetXfaTemplate/GetXfaDatasets/GetXfaConfigwyodrębniają pakiety XFAtemplate,datasetsiconfigjako surowy XML — przydatne do audytu zgodności i migracji danych - Sondy możliwości: globalne
XfaFeaturesAvailableoraz dla dokumentuTPdf.XfaRuntimeAvailable(czyFPDF_LoadXFAfaktycznie się powiodło) iTPdf.XfaStaticReadable(czy eksporty czytnika pakietów się rozwiązują) TPdfFormFieldTyperozszerzono ofiXfa,fiXfaCheckBox,fiXfaComboBox,fiXfaImageField,fiXfaListBox,fiXfaPushButton,fiXfaSignatureifiXfaTextField, aDecodeFormFieldTypemapuje nowe wartościFPDF_FORMFIELD_XFA_*- Zdarzenia hosta JavaScript w
TPdf:OnJavaScriptAlert,OnJavaScriptResponse,OnXfaGotoUrliOnXfaRuntimeMissing - Nowy przykład Delphi
XfaLabdemonstrujący wykrywanie XFA, wyodrębnianie pakietów, sondowanie możliwości i awaryjną ścieżkę braku środowiska wykonawczego
Zmieniono (Changed)
TPdf.LoadDocumentwstępnie skanuje teraz dane wejściowe pod kątem znaczników XFA (/XFAw słowniku AcroForm albo/NeedsRenderingw katalogu) i przy ich obecności automatycznie wybierapdfium.v8.dll, ustawiającEnableV8Engine := Trueprzed pierwszym wczytaniem biblioteki singleton; gdy zwykłypdfium.dllzostał już wczytany, proces nie może się przełączyć, więc ten przypadek sygnalizujeOnXfaRuntimeMissingTPdf.GetPageCountodzwierciedla teraz liczbę stron raportowaną przez silnik XFA przezFFI_PageEventpo dynamicznej repaginacji- Gdy dokument XFA jest otwarty, ale środowisko wykonawcze jest niedostępne,
InitializeFormFillustawia terazversion=1ixfa_disabled=1zamiast żądać wersji 2 z nieprzypisanymi wywołaniami zwrotnymi
Version 2.12.2
Naprawiono (Fixed)
ValidatePdfAComplianceraportuje teraz używane niestandardowe przestrzenie nazw XMP bezpdfaExtension:schemas, nadal akceptując standardowe metadanepdfaidbez deklaracji rozszerzeń- Walidacja osadzonych plików PDF/A-3 wymaga teraz zarówno wpisów
/F, jak i/UFnajwyższego poziomu w słownikach filespec i ignoruje zagnieżdżone klucze strumieni/EFpodczas sprawdzania tych nazw
Version 2.12.1
Naprawiono (Fixed)
ValidatePdfACompliancedekoduje teraz ucieczkowe tokeny nazw PDF przed dopasowaniem JavaScript, LZWDecode, Type1 i powiązanych zabronionych nazw, dzięki czemu zaciemnione, ale semantycznie identyczne nazwy są poprawnie raportowane- Sprawdzenia obrazów wbudowanych PDF/A odrzucają teraz wartości
/Filteri/Fużywające/LZWDecode, skróconego/LZWlub/Crypt, w tym form tablicowych i ucieczkowych nazw - Walidacja PDF/A raportuje teraz strumienie metadanych z zabronionymi filtrami strumieni, profile ICC OutputIntent z brakującą lub niespójną liczbą składowych
/Noraz specyfikacje osadzonych plików PDF/A-3 z brakującym lub nieprawidłowym/AFRelationship
Version 2.12.0
Dodano (Added)
- Żądania HTTP TSA ustawiają teraz jawne limity czasu 30 s dla każdej fazy (rozwiązywanie/łączenie/wysyłanie/odbieranie) przez
WinHttpSetTimeouts - Wyprowadzanie nonce dla żądań znacznika czasu PAdES B-T / B-LTA per żądanie, gdy wywołujący pomija
TPadesSignOptions.Nonce: SHA-256 fold monotonicznego licznika + zegar ścienny +GetTickCount64+ identyfikator procesu zastępuje poprzedni stały fallback$100000000, dzięki czemu dwa żądania wystawione w tej samej milisekundzie nie używają już tego samego nonce anty-powtórkowego PdfInflateogranicza teraz zdekompresowane wyjście do 256 MiB, aby zatrzymać strumień skompresowany zlib przed wyczerpaniem pamięci na wrogich lub uszkodzonych danych wejściowych (“bomba zlib”); limit jest wystarczający dla każdego prawdziwego strumienia PDF
Zmieniono (Changed)
- Mieszanie warstw nakładki
TPdfViewnie używa jużGetPixel/SetPixelVper piksel; prostokąt jest teraz mieszany przez 32-bpp poza-ekranowąTBitmapiScanLinew jednym przebiegu, eliminując tysiące przejść jądra GDI na odświeżenie i sprawiając, że duże zaznaczenia są responsywne FPdfAsn1.TDerReader.ReadIntegerodrzuca teraz pola INTEGER dłuższe niż 8 bajtów (oraz 8-bajtowe wartości ujemne, których bit znaku wymagałbyshl >= 64), zwracając 0 zamiast obliczać nieprawidłową wartość poprzez niezdefiniowane zachowanie przesunięcia na wejściu ASN.1 w CMS/PAdESParseTimeStampRespnie odzwierciedla już nonce żądania jakoTPadesTimestamp.Nonce; pole pozostaje 0 sygnalizując “nie zweryfikowano”
Naprawiono (Fixed)
PointsToPixelszwracało dane wejściowe bez zmian dla każdego DPI: dzielnik wynosiłPointsPerInch(stała 72) zamiast literału 72, co sprowadzało wzór doResult := Points; zewnętrzne wywołania robiące przeliczenie punkty→piksele urządzenia przez ten pomocnik otrzymują teraz poprawną wartośćPoints × PixelsPerInch / 72PdfMaxObjNumzaniżał liczbę w dokumentach używających strumieni obiektów (PDF 1.5+ ObjStm): obiekty skompresowane wewnątrz/ObjStmnie mają znacznikaN 0 obj, więc skan surowych bajtów je pomijał, a wtryskiwacze alokująceMaxObj+1dla nowych obiektów kolidowały z ukrytymi członkami ObjStm i po cichu psuły plik; skan rozszerza teraz najpierw strumienie obiektów, dzięki czemu każdy numer obiektu jest widocznyInjectPdfAMarkersnie fałszuje już twierdzenia o zgodności PDF/A na zaszyfrowanym dokumencie: PDF/A (ISO 19005-1 §7.1) zabrania szyfrowania, a wtryskiwacz poprzednio przepuszczał źródło ze znacznikami nawet mimo tego, że natychmiastowa walidacja i tak by je odrzuciła; gdy ustawionoHasEncrypt, źródło jest teraz przepuszczane bez zmian. Zwykła ścieżkaTPdf.SaveAsPdfAi tak usuwa szyfrowanie (saRemoveSecurity) przed wstrzyknięciem, więc dotyczy to tylko bezpośrednich wywołującychPdfReadStreamBytesodrzuca teraz/Lengthwiększy niż cały plik przed alokacją bufora wynikowego
Version 2.11.0
Dodano (Added)
- Rekord PDFium
FPDF_FILEHANDLERdeklaruje teraz swoje sześć wywołań zwrotnych (Release,GetSize,ReadBlock,WriteBlock,Flush,Truncate) jako rzeczywiste pola zamiast komentarzy, zgodnie z układem nagłówka C. Wywołania zwrotne transferu plików FFI środowiska XFA (FFI_OpenFile/FFI_EmailTo/FFI_UploadTo/FFI_DownloadFromURL), które zwracają lub konsumująPFPDF_FILEHANDLER, pozostają nadal niezaimplementowane w pascalowej warstwie wypełniania formularzy, ale typ jest teraz strukturalnie poprawny dla każdej przyszłej ścieżki przesyłania XFA - Ładowanie i zwalnianie biblioteki PDFium (
LoadLibrary/UnloadLibrary) jest teraz serializowane przez krytyczną sekcję globalną procesu, dzięki czemu dwa wątki roboczeTPdfFuture<T>nie mogą jednocześnie obserwowaćPDFiumLibrary=0i dokonywać podwójnego wiązania - Sekcja
initialization/finalizationwywołuje terazUnloadLibraryprzy zwalnianiu modułu, zapewniając uruchomienieFPDF_DestroyLibrary(dołączenie wątku roboczego, usuwanie izolatu V8, czyszczenie czcionek/pamięci podręcznej)
Zmieniono (Changed)
TPdf.SetActivepochłania teraz każdy wyjątek podczas ładowania (poprzednio tylkoEPdfError), dzięki czemu błąd strumienia lub naruszenie dostępu podczas konfiguracji formularza/strony pozostawiaActive=Falsezamiast częściowo załadowanego komponentu w nieokreślonym stanie- Spójne kodowanie znaków dla argumentów kluczy metadanych PDFium:
TPdf.GetMetaTextużywa teraz tego samego podziału FPCAnsiString/ DelphiUTF8EncodecoGetViewerPreferencei ścieżki ładowania, zamiast prostego rzutowaniaAnsiString(Tag) - Deduplikacja pomocników
BytesToAnsi,AnsiToBytes,WriteBytesiWriteStr:FPdfCompressimportuje je teraz zFPdfPdfCommon(aliasyWriteBytesToStream/WriteAnsiToStreamzostały wycofane), a redundantna trójargumentowa przeciążkaBytesToAnsiwFPdfPdfazostała usunięta;FPdfAsn1zachowuje lokalną kopię celowo, aby warstwa kryptograficzna pozostała niezależna od modułu warstwy zgodności
Naprawiono (Fixed)
- Wyciek zasobu w
TPdf.LoadDocument(plik, pamięć,TBytes,TMemoryStream, strumień niestandardowy) iTPdf.CreateDocument: jeśliInitializeFormFilllubReloadPagezgłosiło wyjątek po pomyślnym ukończeniuFPDF_LoadDocument/FPDF_CreateNewDocument, natywny uchwytFPDF_DOCUMENTbył wyciekany, ponieważFActivebyło w tym momencie nadal False; każda ścieżka teraz opakowuje konfigurację po załadowaniu wtry/excepti zamyka dokument w przypadku błędu, pozostawiając komponent czysto nieaktywny - Lepsza diagnostyka ładowania biblioteki DLL PDFium:
CheckLoadLibrarywykrywa terazERROR_BAD_EXE_FORMAT(193) i raportuje niezgodność architektury 32/64-bitowej wskazując na pasującą kompilacjęDLLs/Win32lubDLLs/Win64zamiast przekazywać tylko ogólny błąd systemowy;CheckGetProcAddressinformuje teraz, że wdrożonypdfium.dlljest starszy niż wiązanie, gdy brakuje wymaganego eksportu, zamiast gołego systemowego komunikatu o nieznalezionej procedurze
Version 2.10.1
Naprawiono (Fixed)
- Standaryzacja sid w SignerInfo PAdES: identyfikator sygnatariusza używa teraz formy
issuerAndSerialNumberz RFC 5652 §5.3 (issuer Name + serialNumber, oba pobrane dosłownie z DER certyfikatu sygnatariusza), zastępując poprzedni niestandardowysubjectKeyIdentifier+ pełnocertyfikatowy znacznik SHA-256, który odrzucały program Adobe Acrobat i inne zgodne walidatory. Nowy walker DER TbsCertificate (ExtractIssuerAndSerial) odczyuje issuer SEQUENCE i serial INTEGER jako surowe bajty TLV — numery seryjne często przekraczają zakresInt64, więc surowy TLV jest obowiązkowy. PostaćsubjectKeyIdentifierpozostaje tylko jako fallback, gdy parsowanie DER certyfikatu się nie powiedzie
Zmieniono (Changed)
TCmsSignerId.SerialNumber: Int64zastąpionoSerialDer: TBytes(surowy TLV serialNumber). Konstruktor CMS osadza wycięty TLV dosłownie wIssuerAndSerialNumber, unikając przepełnieniaInt64dla 20-bajtowych numerów seryjnych CA (górna granica RFC 5280 §4.1.2.2)
Version 2.10.0
Dodano (Added)
- Długoterminowa walidacja PAdES B-LT: gdy
TPadesSignOptions.Level >= plB_LT, funkcjaSignPadesBytesdołącza aktualizację przyrostową niosącą słownik/DSSz certyfikatem sygnatariusza i pełnym łańcuchem pośrednim (samopodpisany root jest wykluczony zgodnie z RFC 5652 §10.2.3), plus znacznik/Extensions /ESICLevel 1 (EN 319 142-1 §5.4.2) - Architektoniczny znacznik czasu PAdES B-LTA: gdy
Level >= plB_LTAi ustawionoTsaUrl, dołączany jest słownik sygnatury Document Time-stamp (/SubFilter /ETSI.RFC3161), którego/ByteRangeobejmuje cały plik; znacznik ESIC jest awansowany do Level 2. To kompletuje cztery poziomy bazowe PAdES (B-B, B-T, B-LT, B-LTA) - Kolekcja łańcucha certyfikatów:
ResolveWinSignerwywołuje terazCertGetCertificateChaini wypełniaTPadesResolvedSigner.ChainCertDerpośrednimi certyfikatami CA, tak że/DSS /Certsw B-LT niesie każdy certyfikat potrzebny do walidacji podpisu bez zewnętrznych wyszukiwań.CertFreeCertificateContextjest teraz dowiązany, zamykając wyciek jednego kontekstu na sygnaturę odnotowany w v2.8.0 - Przepływ integracji PDF/A:
TPdf.SignPadesWithPdfAnajpierw konwertuje dokument na PDF/A (najwyższy poziom, jaki biblioteka dziś generuje), a następnie nakłada żądaną sygnaturę PAdES — wzorzec kontenera długoterminowego archiwizacji zalecany w EN 319 142-1 Annex A.7
Version 2.9.0
Dodano (Added)
- Zaufany znacznik czasu PAdES B-T:
TPadesSignOptionszyskuje polaLevel,TsaUrliNonce. GdyLevel >= plB_Ti ustawionoTsaUrl, funkcjaSignPadesBytespobiera wartość sygnatury ze zbudowanego CMS, żąda znacznika czasu RFC 3161 nad nim i osadza zwrócony TimeStampToken jako atrybut niepodpisany SignerInfosignature-time-stamp— krok zaufanego czasu B-T (EN 319 142-1 §6.3 req o) FPdfTsa: wieloplatformowy klient RFC 3161 —BuildTimeStampReq(wersja 1, SHA-256 messageImprint nad wartością sygnatury, nonce, certReq=true),ParseTimeStampResp(akceptuje PKIStatus 0/1, odrzuca 2+, pobiera TimeStampToken ContentInfo dosłownie) orazRequestTimestamp(jednokrotne build+POST+parse).PadesTsaAvailablewarunkuje funkcję na platformach bez backendu HTTPFPdfTsaWin: backend Windows WinHttp, dynamicznie dowiązany z winhttp.dll (zero nowych zależności kompilacji; HTTPS negocjowany przez magazyn certyfikatów Windows). Odzwierciedla wzorzec dynamicznego dowiązaniaFPdfCryptoWinFPdfCms:ExtractSignatureValueprzechodzi zbudowany CMS, aby odzyskać surowe oktety sygnatury (dane wejściowe hasha TSA), aAddSignatureTimestampToCmsodbudowuje ContentInfo z nowymunsignedAttrs [1](0xA1) niosącym atrybut znacznika czasu. Walidator stage-1 rozpoznaje wynik jako sygnaturę B-T
Version 2.8.0
Dodano (Added)
- Stos podpisywania PAdES B-B: cztery nowe, czysto-Pascalowe/wieloplatformowe bloki budulcowe (
FPdfSha256,FPdfAsn1,FPdfCms,FPdfCrypto) oraz backend Windows CNG (FPdfCryptoWin) pozwalająTPdf.SignPades/SignPadesToStreamwytwarzać sygnaturę PAdES B-B kompleksowo. Certyfikat sygnatariusza jest rozwiązywany przez odcisk SHA-1 z magazynu Current User “MY”; RSA-PSS (zalecane), RSA PKCS#1 v1.5 i ECDSA są obsługiwane poprzezNCryptSignHash FPdfSha256: samodzielny SHA-256 FIPS 180-4 (Init/Update/Final + pomocniki jednokrotne). FPC 3.2.2 nie dostarcza jednostki SHA-2, więc biblioteka posiada własną, aby utrzymać każdą ścieżkę kodu CMS na jednym typieTSHA256Digestbez rozgałęzień RTLFPdfAsn1: koder DER (TDerWriter) i czytnik (TDerReader) obejmujące SEQUENCE/SET/OID/INTEGER/OCTET STRING/UTCTime/GeneralizedTime/tagi context-specific, z kodowaniem definite-length i obsługą IMPLICIT-tag wymaganą przez CMSFPdfCms: konstruktor CAdES SignedData (BuildSignedData) emitujący atrybuty podpisane content-type, message-digest i signing-certificate-v2 wymagane przez bazę PAdES, z opcjonalnymi signing-time i commitment-type-indication. Skrót signedAttrs jest obliczany nad postacią otagowaną SET (0x31) i ponownie emitowany z tagiem IMPLICIT [0] (0xA0) zgodnie z RFC 5652 §5.4FPdfCrypto+FPdfCryptoWin: abstrakcja backendu kryptograficznego zPadesCryptoAvailable/ResolvePadesSigneroraz implementacja Windows dowiązująca dynamicznie crypt32.dll / ncrypt.dll (bez nowej zależności DLL kompilacji). Sygnatury ECDSA są ponownie kodowane z formy Windows IEEE P1363 r¦s do postaci DERECDSA-Sig-Valuewymaganej przez CMSSignPadesBytes: wstrzykiwanie sygnatury na poziomie bajtów — rezerwuje szczelinę hex/Contentso stałej szerokości, oblicza obejmujący/ByteRange, tworzy skrót dokumentu, buduje i osadza CMS oraz dołącza aktualizację przyrostową. Walidator (v2.7.0) rozpoznaje wynik jako sygnaturę PAdES B-B
Version 2.7.0
Dodano (Added)
- Walidator strukturalny PAdES (ETSI EN 319 142-1 V1.2.1): nowa jednostka
FPdfPadesi metodaTPdf.ValidatePadessprawdzają słowniki wartości sygnatury osiągalne z/ByteRange, przechodząSignedDataCMS wewnątrz/Contentswystarczająco daleko, aby potwierdzić kształt CAdES detached, oraz wykrywają cztery poziomy bazowe (B-B, B-T, B-LT, B-LTA) oraz słowniki Document Time-stamp (/SubFilter /ETSI.RFC3161) - Zbiór problemów PAdES na poziomie klauzul: 26 typów wyliczeniowych
ppei*obejmuje dopuszczalność/SubFilter(adbe.pkcs7.sha1iadbe.x509.rsa_sha1oznaczone jako zabronione), pokrycie pliku/ByteRange, zakaz/Cert, kształtSignedDataCMS (jeden sygnatariusz, detached eContent, zakres wersji), wymagane atrybuty podpisane (content-type,message-digest,signing-certificate/v2), zabronione skróty (MD5, SHA-1), wzajemne wykluczenie/Reasonvscommitment-type-indication(req d), wymóg zaufanego czasu B-T,/DSS+/Certs+ znacznik ESIC Level 1 dla B-LT oraz Document Time-stamp + znacznik ESIC Level 2 dla B-LTA - Iniektor DSS:
TPdf.SaveAsPadesDss/SaveAsPadesDssToStreamdołączają aktualizację przyrostową niosącą słownik/DSS(z tablicami strumieniowymi/Certs,/OCSPs,/CRLs) i znacznik/Extensions /ESIC(Level 1 lub 2) na kopii dokumentu, zachowując oryginalne bajty — krok osadzania materiału walidacji B-LT/B-LTA (klauzula 5.4.2) - Etap wieloplatformowy, bez zależności: walidator i iniektor są czysto-Pascalowe i działają w każdym obsługiwanym IDE (Delphi, Lazarus, FPC, C++Builder); dla tego wydania nie jest wymagany żaden backend kryptograficzny i nie wprowadzono żadnej nowej zależności DLL
Version 2.6.0
Zmieniono (Changed)
- Deduplikacja między standardami: kolejnych siedem zduplikowanych funkcji pomocniczych (PdfEnclosingObjNum, PdfDictRefNum, PdfExpandObjectStreams, PdfTextStr, ExtractLiteralString, ExtractXmpAttr) zostało usuniętych z poszczególnych jednostek standardów i skonsolidowanych w
FPdfPdfCommon, redukując około ~300 linii obciążenia utrzymania z copy-paste - Jakość PreflightReport: problemy klas zawartości PDF/X i PDF/E, które wcześniej wpadały do ogólnej kategorii “missing marker”, mają teraz dokładne kategorie Content/Metadata/Security oraz rekomendacje specyficzne dla klauzul (około 15 typów wyliczeniowych w obu standardach)
- Pokrycie testów PDF/E i PDF/R: kolejnych sześć typów wyliczeniowych o zerowym pokryciu zyskało pozytywne testy (
pveiLzwForbidden,pveiJavaScriptForbidden,pveiFormFieldsForbidden,pveiEmbeddedFilesForbidden,pvriBadHeader,pvriProhibitedInfoEntry) - Naprawa budowania Lazarus:
Tests.PdfVT(jednostka DUnitX tylko dla Delphi dodana w v2.5.x) jest teraz wykluczona z projektu Lazarus, aby przywrócić kompilację
Version 2.5.3
Dodano (Added)
- Kompletność OutputIntent (PDF/X-4 §6.2.4):
pvviOutputIntentSchemeoznacza OutputIntent, którego/Snie jest/GTS_PDFX;pvviOutputIntentMissingIdentifieroznacza brakujący/OutputConditionIdentifier - Wyjątek Reference XObject dla PDF/VT-2 (§6.2.2):
pvviReferenceXObjectForbiddennie jest już zgłaszane dla plikuPDF/VT-2, który może legalnie używać Reference XObjects na bazie X-5g/5pg - Walidacja znaków granicy MIME (RFC 2046 §5.1.1):
vtmviBoundaryInvalidCharoznacza granicę, której znaki wykraczają poza zestaw bchars lub której długość przekracza 70
Naprawiono (Fixed)
InjectPdfVTMarkerszapisuje teraz Info/CreationDatei/ModDatez opcji zapisu, tak że wygenerowany plik przechodziValidatePdfVTCompliancebez fałszywegopvviInfoModDateMismatch(injektor wcześniej przepisywał daty XMP, ale pozostawiał daty słownika Info nieaktualne)
Version 2.5.2
Dodano (Added)
- Spójność Info
/ModDate(§6.3 NOTE 2, baza PDF/X-4):pvviInfoModDateMismatchoznacza/ModDatew słowniku Info, które po normalizacji daty-PDF-do-daty-XMP nie równa sięxmp:ModifyDate - Zgodność fragmentu inline PDF/VT-2s (Annex A.2): walidator MIME uruchamia teraz
ValidatePdfVTCompliancena każdej części inlineapplication/pdfi oznacza treść inną niż PDF/VT przezvtmviInlinePdfNotPdfVT
Version 2.5.1
Dodano (Added)
- Walidacja podziału DParts (ISO 16612-2 §6.5 Table 4):
pvviDPartsBadChunkingoznacza tablicę/DParts, której niekońcowe podtablice nie mają dokładnie 8192 wpisów lub której ostatnia podtablica wykracza poza 1..8192 - Spójność RecordLevel między strumieniami (Annex A.2): walidator MIME PDF/VT-2s wyodrębnia teraz
/RecordLevelz każdego inline PDF i oznacza niezgodność przezvtmviRecordLevelMismatch, uzupełniając istniejące sprawdzanie NodeNameList - Wskazówki powtarzalnych obiektów graficznych (§6.7):
pvviGtsScopeInvalidValueoznacza/GTS_Scopepoza {SingleUse, Record, File, Stream, Global, Unknown};pvviGtsScopeRecordWithoutRecordLeveloznacza/Recordbez/RecordLevel;pvviGtsXidNotUuidoznacza/GTS_XID, które nie jest identyfikatorem URI uuid: RFC 4122;pvviGtsEnvMissingoznacza brakujące/GTS_Env, gdy/GTS_Scopeto Stream lub Global (§6.7.4) - Wykrywanie referencji naprzód MIME (Annex A.2):
vtmviForwardReferenceoznacza inline PDF, który cytuje nazwę pliku (przez/EF /F) niewprowadzoną przez wcześniejszą część załącznika w strumieniu
Naprawiono (Fixed)
- Funkcje
ExtractNodeNameListFromPdfiExtractRecordLevelFromPdfwFPdfPdfvtMimerozwiązały powtarzający się błąd off-by-one, w którym przesunięcie 1-based zwracane przezAnsiFindKeybyło traktowane jako bezwzględne przesunięcie bajtowe w rozwiniętym PDF
Version 2.5.0
Dodano (Added)
- Metadane części dokumentu PDF/VT (DPM, ISO 16612-2 §6.6):
TPdfVTSaveOptionszyskałoDpmEntriesiDpmTarget, tak że moduł zapisu może dołączyć słownik/DPMdo syntetyzowanego węzła DPart, z walidacją nazwy klucza względem reguły drugorzędnego prefiksu z Annex E oraz reguł NMTOKEN / unikalności / kształtuGTS_Managed§6.6 po stronie walidatora - Wymiana strumieniowa PDF/VT-2s (Annex A): nowa jednostka
FPdfPdfvtMimedostarczaBuildPdfVT2sStreamiValidatePdfVT2sStreamdla koperty MIMEmultipart/mixedniosącej fragmenty inline PDF/VT plus załącznik profile ICC, z regułą porządku nagłówkaX-PDFVT-Stream-version: 1i sprawdzaniem spójnościNodeNameListmiędzy strumieniami TPdf.ValidatePdfVTwykonuje teraz autorytatywny zliczania akcji JavaScript przezFPDFDoc_GetJavaScriptActionCount, uzupełniając skan nazw/JavaScriptna poziomie bajtów
Naprawiono (Fixed)
- Poprawność
Trappedw PDF/VT na bazie PDF/X-4: wartość wyliczeniowaptvUnknownzostała usunięta (PDF/X-4 zabrania/Unknown),ptvUnspecifiedjest normalizowane do/Falseprzy zapisie (brak/Trappedrównież jest zabroniony), a nowy problempvviTrappedInvalidoznacza nieobecną lubUnknownwartość ValidatePdfVTCompliancerozwija teraz strumienie obiektów (PdfExpandObjectStreams) przed skanowaniem, tak że katalog, słownik OutputIntent lub Metadata przechowywane wewnątrz skompresowanego ObjStm (PDF 1.5+, typowe dla producentów PDF/X-4) są osiągalne przez wyszukiwania na poziomie bajtów
Zmieniono (Changed)
- PDF/VT-1 dziedziczy teraz pełne zakazy zawartości PDF/X-4:
pvviAcroFormForbidden(/AcroFormlub/XFA),pvviAdditionalActionsForbidden(katalog/AA),pvviMissingTrimBoxipvviReferenceXObjectForbidden(Reference XObject, tylko X-5g/5pg) - Deduplikacja między standardami:
BuildDictObj,IccComponentCount, wbudowany profil ICC sRGB (GetSrgbIccProfile),PdfTextStr,PdfEnclosingObjNum,PdfDictRefNumiPdfExpandObjectStreamszostały awansowane z potrojonych kopii lokalnych wFPdfPdfa/FPdfPdfx/FPdfPdfvtdo jednego kanonicznego domu wFPdfPdfCommon; 3144-bajtowy literał ICC istnieje teraz dokładnie raz w bazie kodu
Version 2.4.0
Naprawiono (Fixed)
InjectPdfUaMarkersnie odrzuca już referencji trailer/Infona bazie strumienia odsyłaczy (cross-reference-stream): lokalna kopiaSourceTrailerInfoRef(w której brakowało mechanizmu fallback dla strumienia xref) została zastąpiona wspólną wersjąPdfSourceTrailerInfoRef(przeniesioną z kopii PDF/A, która miała ten fallback od wersji v2.0.0)- Wspólna funkcja
PdfReadStreamBytesobsługuje teraz pośrednie referencje/Length N G R(przeniesione z lokalnej kopii PDF/A), dzięki czemu walidatory PDF/VT, PDF/R i PDF/E nie odczytują błędnie ani nie pomijają strumieni metadanych XMP generowanych przez narzędzia używające pośredniej wartości Length (Acrobat, Ghostscript)
Zmieniono (Changed)
- Deduplikacja między standardami: lokalne kopie
PdfReadTrailerwFPdfPdfaiFPdfPdfx, lokalne kopieSourceTrailerInfoRefwFPdfPdfaiFPdfPdfuaoraz lokalna funkcjaPdfReadStreamByteswFPdfPdfazostały usunięte — współdzielone wersje zFPdfPdfCommonmają teraz zastosowanie wszędzie, co pozwala na usunięcie około ~330 linii zduplikowanego kodu i eliminuje konieczność utrzymywania spójności kopii - Uzupełnienie braków testowych w PDF/X: siedem typów wyliczeniowych klas zawartości (enums), które wcześniej nie miały pokrycia testowego, zyskało pozytywne testy (
pvxiLzwForbidden,pvxiJavaScriptForbidden,pvxiFormFieldsForbidden,pvxiAdditionalActions,pvxiEmbeddedFilesForbidden,pvxiMissingTrimBox,pvxiTrappedNotSet)
Version 2.3.0
Zmieniono (Changed)
- Kontynuacja uzupełniania braków testowych w PDF/A: trzy kolejne enums o zerowym pokryciu zyskały pozytywne testy;
pvaiForbiddenRenderingIntent(§6.2.9) oznacza niestandardową nazwę rendering-intent w strumieniu zawartości;pvaiJpeg2000Violation(§6.2.2) oznacza obraz JPXDecode z/NumComponentspoza zakresem {1,3,4} w Part 2;pvaiInlineImageLzwForbidden(§6.1.10) oznacza obraz osadzony w linii używający filtra LZW w Part 2
Version 2.2.0
Zmieniono
- Testy regresyjne strumienia odsyłaczy (cross-reference-stream): istniejący
Validate_XrefStreamTrailer_DetectsConformanceweryfikuje teraz również, czy referencja katalogu/Metadatajest rozwiązywana, a XMPpdfaid:partjest odczytywany na bazie xref-stream (nie tylko/Root+/ID); nowy testInjectPdfA_XrefStreamBase_RoundTripszabezpiecza ścieżkę xref-stream wstrzykiwacza dodaną w v2.0.0; dwa testy między-standardowe (PdfE_XrefStreamBase_NotRejectedAsUnparsable,PdfR_XrefStreamBase_NotRejectedAsUnparsable) weryfikują, że walidatory PDF/E i PDF/R nie odrzucają już plików PDF ze strumieniem xref jako nieprzetwarzalnych - Zamknięcie długu technologicznego w testach PDF/A:
Validate_MinimalPdf_FlagsRequiredMarkerspotwierdza, że minimalny PDF wyzwala błędypvaiMissingPdfAIdentifier,pvaiMissingOutputIntent,pvaiMissingIccProfile,pvaiMissingXmpMetadataorazpvaiMissingXmpDates— co zamyka lukę symetrii z walidatorami PDF/E i PDF/X, które miały już równoważne testy; dwa kolejne typy wyliczeniowe o zerowym pokryciu zyskały testy pozytywne:pvaiUnembeddedFontorazpvaiSubsetMissingCidSet
Version 2.1.0
Naprawiono
- Standard PDF/E został nieumyślnie pominięty w poprawce dotyczącej strumienia odsyłaczy w wersji v2.0.0: zarówno
InjectPdfEMarkers, jak iValidatePdfECompliancenadal wywoływałyPdfReadTrailerbez parametruAcceptXrefStream, przez co wstrzykiwacz PDF/E po cichu kończył się niepowodzeniem przy generowaniu PDF 1.5+ (domyślneSaveAsCopyw pdfium); oba miejsca wywołania przekazują teraz wartośćTrue - Współdzielona procedura awaryjna (fallback)
PdfReadTrailerdla strumienia odsyłaczy zawiera teraz zabezpieczenie/Type /XRef, które posiadały już lokalne kopie PDF/A i PDF/X, dzięki czemu uszkodzone przesunięciestartxrefwskazujące na niepowiązany słownik kończy się czystym błędem zamiast błędnego parsowania jako trailer - Mechanizm rozpoznawania referencji pośrednich dla
/LangwValidatePdfUaCompliance(v2.0.0) był nieosiągalny: funkcjaPdfFindObjDictznajduje tylko słowniki<<, podczas gdy obiekt ciągu znaków/Langto(...)lub<...>bez słownika; mechanizm ten zastąpiono bezpośrednim skanowaniem ciała obiektu w celu zlokalizowania tokenu ciągu znaków
Zmieniono
- Siedem zdublowanych funkcji pomocniczych (PdfStructureBytes, PdfHasName, PdfCountName, BuildStreamObj), które były identycznymi kopiami wersji ze współdzielonego modułu
FPdfPdfCommon, zostało usuniętych zFPdfPdfaorazFPdfPdfua— wersje współdzielone mają teraz zastosowanie wszędzie poprzez sekcjęuses
Version 2.0.0
Naprawiono
- Cicha awaria w wielu standardach: współdzielona funkcja pomocnicza
PdfReadTrailer(używana przez wstrzykiwacze i walidatory znaczników PDF/UA, PDF/X, PDF/VT oraz PDF/R) przyjmuje teraz parametrAcceptXrefStreami przełącza się na słownik obiektów strumienia odsyłaczy w przypadku braku słowa kluczowegotrailer(PDF 1.5+); poprzednio dane wyjścioweSaveAsCopyw pdfium (które używają strumienia odsyłaczy) powodowały, że każdy wstrzykiwacz znaczników po cichu kończył się niepowodzeniem — bajty źródłowe były kopiowane bez zmian, a wywołanie nadal zwracało sukces; walidator PDF/R-1.0 (którego baza PDF 2.0 jest zawsze strumieniem odsyłaczy) był w rzeczywistości operacją pustą (no-op); dojrzała implementacja walidatora PDF/A została przeniesiona do współdzielonej funkcji pomocniczej, dzięki czemu korzysta z niej każdy standard - Skanowanie słownika trailer w
InjectPdfUaMarkersorazInjectPdfAMarkersużywa teraz uwzględniającego głębokośćPdfDictEndzamiast prostego wyszukiwania>>, dzięki czemu trailer zawierający zagnieżdżony słownik (np./Encrypt << ... >>) nie jest już przedwcześnie przerywany przed końcowym wpisem/Info
Zmieniono
TPdf.ValidatePdfUawycisza teraz ogólne ostrzeżenie na poziomie bajtowympvuaiFontNotEmbedded, jeśli precyzyjne ostrzeżenie modelu obiektowego PdfiumpvuaiPdfiumFontNotEmbeddedzostało już wyzwolone, dzięki czemu raport wstępnej walidacji (preflight) nie zawiera już dwóch niemal identycznych wierszy informujących o konieczności osadzenia czcionek dla tego samego błędupvuaiLangInvalidFormat(§7.2) rozpoznaje teraz referencję pośrednią/Lang(N 0 R) do powiązanego obiektu ciągu znaków i weryfikuje jego zawartość, dzięki czemu referencyjny kod języka nie jest już martwym punktem
Version 1.99.0
Naprawiono
pvuaiLangInvalidFormat(§7.2) nie przepuszcza już zakodowanych szesnastkowo ciągów/Langbez weryfikacji: pary UTF-16BE (z BOMFE FF) oraz czyste ciągi szesnastkowe ASCII są teraz dekodowane i poddawane temu samemu sprawdzeniu gramatycznemu BCP 47 co ciągi dosłowne(...), dzięki czemu niepoprawny szesnastkowy/Langjest wykrywany, a zgodny (np. UTF-16BEen-US) nie jest już narażony na oflagowanie
Zmieniono
pvuaiFontMissingToUnicode(§7.21.7) wyłącza teraz/MacExpertEncodingobok/WinAnsiEncodingi/MacRomanEncoding, dopasowując się do czterech warunków wyłączenia wymienionych w klauzuli
Version 1.98.0
Dodano
pvuaiNeedAppearancesTrue(§7.18.4) oznacza AcroForm, którego flaga/NeedAppearancesma wartość true, przez co wygląd kontrolek (widgets) nie jest niezawodnie zablokowany, a technologie wspomagające nie mogą powiązać ich z drzewem struktury; przeniesione z walidatora PDF/A i ograniczone do obecności/AcroFormw celu zawężenia obszaru skanowania
Zmieniono
- Regresja korpusu veraPDF: podpięto parę pass+fail Reference-XObject z §7.20 oraz pary pass+fail podzbiorów CharSet/CIDSet z §7.21.4.2 do
Live_Corpus_ValidatePdfUaMatchesConformance; próbki pass dla zabronionych wartości ToUnicode z §7.21.7 oraz klipów multimedialnych z §7.18.6.2 zostały również podpięte jako zabezpieczenia przed fałszywymi alarmami (ich próbki fail używają układów słowników, których skanowanie na poziomie bajtowym nie wykrywa, więc podpięto tylko stronę pass) - Lista asercji ścieżek pass korpusu zyskała 15 nowych zabezpieczeń gwarantujących brak fałszywych alarmów, dzięki czemu każdy aktywny test struktury i poziomu bajtów
pvuai*jest teraz sprawdzany na zgodnych próbkach (poprzednio chronionych było tylko około 30 z 60 aktywnych problemów); zabezpieczeniepvuaiLangInvalidFormatzostało celowo pominięte, ponieważ parser na poziomie bajtów konserwatywnie oznacza zakodowane szesnastkowo ciągi/Lang, których nie potrafi zdekodować
Version 1.97.0
Naprawiono
- Utwardzenie
ValidatePdfUaStructureElements: przejście łańcucha nadrzędnegoEnclosingTablezawiera teraz licznik kroków (ograniczony przez liczbę elementów), dzięki czemu zniekształcony cyklParentIndexw syntetycznej tablicy elementów struktury nie może już zawiesić wątku wywołującego; alokacja tablicy identyfikatorów oznaczonej zawartości wValidatePdfUaPageContentTaggingzostała ograniczona do jednego miliona wpisów, co zapobiega wielogigabajtowej alokacji przy zniekształconym lub złośliwymMarkedContentID
Zmieniono
- Komentarz dokumentacyjny enum
pvuaiOrderedListMissingListNumberingdokładnie opisuje teraz działanie testu: oznacza on elementL, którego wartośćListNumberingleży poza zestawem z Tabeli 347 ISO 32000-1 (brak atrybutu nie jest oznaczany); wcześniejszy komentarz sugerował, że wykrywa on również listy uporządkowane bez tego atrybutu, czego implementacja nie robi - Dwie próbki fail niezgodności WMode
7.21.3.3-t02z korpusu są teraz podpięte doLive_Corpus_ValidatePdfUaMatchesConformance— od wersji v1.95.0 strumień CMap jest rozpakowywany za pomocą FlateDecode, więc porównanie słownika z zawartością odbywa się po czytelnej stronie; nieaktualny komentarz „not wired” został usunięty
Version 1.96.0
Dodano
- Spójność między standardami:
TPdf.ValidatePdfUazyskuje dwa testy przeniesione z walidatora PDF/A;pvuaiAnnotationFlagsViolation(§7.18.1) oznacza niewyłączoną adnotację posiadającą flagę Hidden / Invisible / NoView, co zakłóca przepływ czytania przez technologie wspomagające;pvuaiActionTargetMissing(§7.18.5) oznacza akcję GoToR / URI / SubmitForm pozbawioną wymaganego klucza docelowego (/F+/D, /URI, /F), co czyni łącze bezużytecznym dla technologii wspomagających
Naprawiono
- Scalanie drzewa struktury między stronami: pętla akumulacji
AllElemswTPdf.ValidatePdfUaprzelicza teraz bazęParentIndexkażdego elementu z tablicy lokalnej dla strony na tablicę scaloną; bez tego elementy potomne strony 2 zachowywały indeks lokalny dla strony wskazujący na wycinek strony 1, cicho uszkadzając każdy test zależny od ParentIndex (strukturę tabeli/listy, liczbę elementów potomnych H z §7.4.4, EnclosingTable) - Parsowanie RoleMap:
PdfReadRoleMapPairsnie przerywa już całego skanowania kluczy/wartości, gdy wartość jest referencją pośrednią (N 0 R) lub tablicą ([...]) — obie formy są poprawnymi postaciami RoleMap według ISO 32000-1 14.8.5.1; teraz pomija tylko ten wpis (Continue) zamiast przerywać pętlę (Break), co eliminuje fałszywe alarmypvuaiRoleMapUnresolveddla typów mapowanych po wpisie z referencją pośrednią lub tablicą
Zmieniono
FPdfPreflightReport: 18 aktywnych wartościTPdfUaValidationIssue, które wcześniej trafiały do ogólnej kategorii „brak znacznika” i rekomendacji, posiada teraz dokładne kategorie (Structure / Content / Metadata / Security) oraz rekomendacje specyficzne dla klauzuli; naprawiono również literówkępuaNone / pua1→pucNone / puc1w plikuPDFSpecComplianceMatrix.md
Version 1.95.0
Zmieniono
- Przegląd kompletności i poprawności
TPdf.ValidatePdfUa: sprawdzeniepvuaiCMapWModeMismatchz §7.21.3.3 orazpvuaiToUnicodeForbiddenValuez §7.21.7 dekompresują teraz strumienie CMap / ToUnicode skompresowane za pomocąFlateDecodeprzed skanowaniem (poprzednio oceniano tylko strumienie nieskompresowane, co stanowiło znany fałszywy negatyw); wspólne procedury pomocniczePdfInflate/PdfReadAndDecodeStreamzostały przeniesione zFPdfPdfa/FPdfPdfxdoFPdfPdfCommon, dzięki czemu wszystkie jednostki zgodności współdzielą tę samą kopię
Dodano
pvuaiSubsetCharSetEmpty(§7.21.4.2) oznacza podzbiór czcionki Type 1FontDescriptor, który posiada klucz/CharSetz pustą wartością tekstową — dotychczasowe sprawdzeniepvuaiSubsetMissingCharSetwykrywało tylko brak klucza; pusta wartość/CIDSetnie jest oznaczana, jako że czcionka bez CID może zgodnie z prawem posiadać pustą mapę bitową
Version 1.94.0
Dodano
- Audyt drugiego przebiegu
TPdf.ValidatePdfUazamknął sześć luk ISO 14289-1 wykazanych przez szczegółowy przegląd klauzul i ponowne przeskanowanie natywnych API Pdfium, które były już opakowane, ale nieużywane w ścieżce PDF/UA;pvuaiHeadingFormatInvalid(§7.4.3) oznacza zdefiniowane przez użytkownika znaczniki nagłówków zaczynające się od H, lecz zawierające separatory, spacje lub cyfry rzymskie zamiast czystych cyfr arabskich;pvuaiMissingDocumentOutline(§7.17, should) oznacza dokument wielostronicowy, który nie posiada spisu treści w postaci zakładek (dokumenty jednostronicowe są zwolnione);pvuaiStructElementLangInvalid(§7.2) oznacza wartość/Langelementu struktury, która nie jest poprawnym tagiem BCP 47;pvuaiWidgetMissingPrintField(§7.14 / §7.18.4) oznacza element struktury Widget pozbawiony właściciela atrybutu PrintField;pvuaiLinkNotInStructureTree(§7.18.5) oznacza dokument, w którym adnotacje/Subtype /Linknie są ujawnione jako elementy struktury Link;pvuaiPdfiumAnnotationMissingContentsorazpvuaiPdfiumLinkMissingContents(§7.18.1 / §7.18.5) dodają precyzyjny skan adnotacji w modelu obiektowym Pdfium, który wyłącza adnotacje ukryte, leżące poza crop-boxem, Popup i Widget — eliminując fałszywe alarmy heurystyki na poziomie bajtów, która nie potrafi odczytać flag/Fani/Rect
Version 1.93.0
Dodano
TPdf.ValidatePdfUanakłada teraz przebieg modelu obiektowego Pdfium na inspektora na poziomie bajtów, odzwierciedlając architekturę PDF/A z rundy 7: przechodzi przez obiekty tekstowe każdej strony poprzezFPDFTextObj_GetFont→FPDFFont_GetIsEmbedded(pvuaiPdfiumFontNotEmbedded, §7.21.4) i skanuje każdy znak poprzezFPDFText_HasUnicodeMapError(pvuaiPdfiumUnicodeMapError, §7.21.7) orazFPDFText_GetUnicode(pvuaiPdfiumNotDefGlyph, §7.21.8) — co jest dokładniejsze niż heurystyki na poziomie bajtów, które uruchamiają się tylko wtedy, gdy brak jest jakichkolwiek programów czcionek lub gdy/ToUnicodew ogóle się nie pojawia; przejście skraca pętlę na trzech poziomach: pętla stron kończy się, gdy wszystkie three problemy warstwy Pdfium zostały już ustawione, pętla dla obiektu kończy się na pierwszej nieosadzonej czcionce, a skanowanie znaków pomija sprawdzenie.notdef, gdyUnicodeMapErrorjuż wystąpił; PDF/UA był ostatnim walidatorem standardów PDF bez warstwy modelu obiektowego Pdfium
Version 1.92.0
Dodano
- Utworzono
Tests.PdfR— pierwszy plik testowy dla walidatora PDF/R-1 (FPdfPdfr), obejmujący walidację nagłówka, zakaz używania ObjStm, wykrywanie znaczników rastrowych oraz zabezpieczenie czystego pliku przed fałszywymi alarmami; wszystkie sześć zestawów testowych standardów PDF posiada teraz dedykowane pliki testowe: PdfA(80), PdfUa(101), PdfX(7), PdfE(5), PdfVT(15), PdfR(4) = łącznie 212 testów
Version 1.91.0
Dodano
ValidatePdfEiValidatePdfVTzyskały testy na poziomie zawartości, wcześniej dostępne tylko w walidatorach PDF/A, PDF/UA i PDF/X:pveiLzwForbidden,pveiJavaScriptForbidden,pveiFormFieldsForbidden(tylko PDF/E),pveiEmbeddedFilesForbidden(tylko PDF/E),pveiOpiForbidden,pvviLzwForbidden,pvviJavaScriptForbidden,pvviEmbeddedFilesForbidden,pvviOpiForbidden;TPdf.ValidatePdfEiTPdf.ValidatePdfVTzyskały również warstwę modelu obiektowego Pdfium (pveiPdfiumFontNotEmbedded/pvviPdfiumFontNotEmbedded), która przechodzi przez obiekty tekstowe stron za pomocąFPDFFont_GetIsEmbedded, kończąc pętlę na pierwszej napotkanej nieosadzonej czcionce
Version 1.90.0
Dodano
TPdf.ValidatePdfXnakłada teraz przebieg modelu obiektowego Pdfium na inspektora na poziomie bajtów: przechodzi przez obiekty tekstowe każdej strony poprzezFPDFTextObj_GetFont→FPDFFont_GetIsEmbeddedi zgłasza nieosadzoną czcionkę jakopvxiPdfiumFontNotEmbedded— co jest dokładniejsze niż heurystyka na poziomie bajtów, która uruchamia się tylko wtedy, gdy brak jest jakichkolwiek programów czcionek; przejście kończy się na pierwszej napotkanej nieosadzonej czcionce
Zmieniono
- Przejście drzewa struktury
TPdf.ValidatePdfUa: wywołanieValidatePdfUaPageContentTaggingdla poszczególnych stron (które buduje mapę przypisań identyfikatorów oznaczonej zawartości i weryfikuje krzyżowo każdy obiekt tekstowy/obrazu) jest teraz pomijane na kolejnych stronach po tym, jakpvuaiUntaggedContentzostało już znalezione — elementy struktury są wciąż zbierane na potrzeby testów między stronami (unikalny identyfikator Note, sekwencja nagłówków), lecz kosztowne skanowanie oznaczania zawartości dla stron kończy się wcześniej
Version 1.89.0
Zmieniono
- Wydajność warstwy modelu obiektowego Pdfium w
TPdf.ValidatePdfA: przejście stron/obiektów skraca teraz pętlę na trzech poziomach — pętla stron kończy się, gdy wszystkie odpowiednie problemy warstwy Pdfium zostały już znalezione, pętla dla obiektu kończy się, gdy oba problemy dla obiektu (osadzenie czcionki + przezroczystość) są ustawione, a skanowanie znaków strony tekstowej pomija sprawdzenie.notdef, gdyUnicodeMapErrorjuż wystąpił; sprawdzenia dostępności APIAssigned()oraz flagi zgodności są buforowane w lokalnych zmiennych logicznych jednorazowo przed pętlą zamiast być ponownie oceniane przy każdej stronie/obiekcie/znaku; przy dużym niezgodnym dokumencie przejście może zatrzymać się po pierwszej stronie zamiast skanować wszystkie strony, zaś w zgodnym dokumencie narzut na stronę jest mniejszy (brak powtarzanych wywołańAssigned)
Version 1.88.0
Dodano
ValidatePdfXzyskał osiem nowych wartościTPdfXValidationIssuena poziomie zawartości, pokrywających ograniczenia wymiany druku nakładane przez standard PDF/X wykraczające poza znaczniki formatu plików:pvxiLzwForbidden(/LZWDecode),pvxiJavaScriptForbidden(/JavaScript),pvxiFormFieldsForbidden(/AcroForm//XFA),pvxiAdditionalActions(/AA),pvxiEmbeddedFilesForbidden(/EmbeddedFiles//FileAttachment),pvxiOpiForbidden(/OPI//Alternates),pvxiMissingTrimBox(brak/TrimBoxna jakiejkolwiek stronie) orazpvxiTrappedNotSet(brak/Trappedlub wartość/Unknown); walidator PDF/X wcześniej sprawdzał wyłącznie znaczniki XMP/OutputIntent — to jest jego pierwszy przebieg na poziomie zawartości; wspólne procedury pomocniczePdfStructureBytes/PdfHasName/PdfCountNamezostały dodane doFPdfPdfCommon, dzięki czemu wszystkie jednostki zgodności mogą z nich korzystać
Version 1.87.0
Dodano
- Walidacja PDF/UA obejmuje teraz reguły czcionek złożonych z ISO 14289-1 §7.21.3:
pvuaiCidSystemInfoMismatchoznacza czcionki Type0, w których osadzony CMap i potomny CIDFont nie zgadzają się co doRegistry/Orderinglub którychSupplementCIDFont przekracza wartość CMap’a,pvuaiCMapNotEmbeddedoznacza CMap-y przywoływane przez nazwę (jakoEncodinglubUseCMap), które nie są wstępnie zdefiniowanymi CMap-ami z Tabeli 118 ISO 32000-1, zaśpvuaiCMapWModeMismatchoznacza osadzone CMap-y, którychWModew słowniku różni się od WMode w treści strumienia
Naprawiono
- Sprawdzenie
pvuaiCidFontMissingCidToGidMapz §7.21.3.2 pomijało słowniki CIDFontType2, w których para klucz/wartośćSubtypeoddzielona była znakiem nowego wiersza; teraz oznacza też wartość nazwyCIDToGIDMapinną niżIdentity
Version 1.86.0
Dodano
- Walidacja PDF/UA obejmuje teraz reguły kodowania TrueType z ISO 14289-1 §7.21.6:
pvuaiTrueTypeEncodingInvalidoznacza niesymboliczne czcionki TrueType, w których brakujeEncodinglub nie jest nimMacRomanEncodinganiWinAnsiEncoding(bezpośrednio lub przezBaseEncoding), zaśpvuaiSymbolicTrueTypeEncodingoznacza symboliczne czcionki TrueType zawierające niestandardową nazwęEncoding
Version 1.85.1
Zmieniono
- Sprawdzenie kolejności kart
pvuaiMissingTabsOrderz ISO 14289-1 §7.18.3 działa teraz na poziomie poszczególnych stron: każda strona zawierająca adnotacje musi deklarować/Tabs /Swe własnym słowniku strony, tak by zgodna strona sąsiednia nie maskowała strony pozbawionej tej deklaracji
Version 1.85.0
Dodano
- Walidacja PDF/UA rozróżnia teraz dynamiczne i statyczne formularze XFA zgodnie z ISO 14289-1 §7.15:
pvuaiXfaDynamicoznacza formularze, w których konfiguracja XFA ustawiadynamicRendernarequired
Zmieniono
- Dotychczasowa flaga kandydacka dla dowolnego XFA —
pvuaiXfaPresent— została wycofana i nie jest już zgłaszana (statyczny XFA jest zgodny z §7.15); wartość enum pozostaje dla zachowania zgodności API
Version 1.84.0
Dodano
- Walidacja PDF/UA wykrywa teraz nieoznakowaną rzeczywistą treść wymaganą przez ISO 14289-1 §7.1:
pvuaiUntaggedContentoznacza renderowane obiekty tekstowe i obrazowe, które nie są przypisane do drzewa struktury strony (poprzez identyfikatory oznaczonej zawartości) ani nie są oznaczone jako artefakt - Nowe pomocniki na poziomie strony
GetPageContentMarkInfosiValidatePdfUaPageContentTaggingz rekordemTPdfPageContentMarkInfodo bezpośredniego użycia
Version 1.83.0
Dodano
- Walidacja PDF/UA wymusza teraz model nagłówków z ISO 14289-1 §7.4.4:
pvuaiHeadingModelMixedoznacza dokumenty mieszające generyczny znacznikHz numerowanymi nagłówkamiH1..Hn, zaśpvuaiHeadingMultipleInNodeoznacza węzły struktury zawierające więcej niż jeden podrzędny nagłówekH
Version 1.82.0
Dodano
- Walidacja PDF/UA rozwiązuje teraz RoleMap wymagany przez ISO 14289-1 §7.1:
pvuaiRoleMapRemapsStandardoznacza wpisy RoleMap redefiniujące standardowy typ struktury, zaśpvuaiRoleMapUnresolvedoznacza używane niestandardowe typy struktury, których łańcuch RoleMap jest brakujący, urwany lub cykliczny — pośrednie łańcuchy prowadzące do standardowego typu są akceptowane, a nieużywane wpisy RoleMap nigdy nie są oceniane - Nowe pomocniki
PdfUaIsStandardStructType,PdfReadRoleMapPairs(z dekodowaniem ucieczek nazw PDF#hh) iValidatePdfUaRoleMapUsagedo bezpośredniego użycia
Version 1.81.0
Dodano
- Walidacja PDF/UA obejmuje teraz oznakowanie list ISO 32000-1 wymagane przez ISO 14289-1 §7.6:
pvuaiListStructureInvalidoznacza elementy LI poza kontenerem L oraz części Lbl/LBody poza elementem LI, akceptując jednocześnie listy zagnieżdżone i dopuszczalne użycie Lbl wewnątrz elementów Note i BibEntry
Version 1.80.0
Dodano
- Walidacja PDF/UA obejmuje teraz oznakowanie tabel ISO 32000-1 wymagane przez ISO 14289-1 §7.5:
pvuaiTableStructureInvalidoznacza komórki TH/TD poza wierszem TR oraz wiersze lub grupy wierszy poza kontenerem tabeli,pvuaiTableHeaderMissingScopeoznacza komórki nagłówkowe, których powiązania nie można ustalić ani przez atrybut Scope, ani przez skojarzenie Headers/ID, zaśpvuaiTableHeadersUndefinedIdoznacza odwołania Headers w dokumentach niedefiniujących żadnych identyfikatorów elementów struktury TPdfStructureElementudostępnia atrybuty tabeliScope,HasHeaders,HeadersIds,ColSpaniRowSpan, rozwiązywane podczas przechodzenia drzewa struktury
Zmieniono
- Przechodzenie drzewa struktury odczytuje teraz wszystkie atrybuty układu i tabeli w jednym przebiegu przez słowniki atrybutów każdego elementu, zamiast wykonywać jedno skanowanie na atrybut
Version 1.79.1
Nowości
- Przeniesiono przykład
AnnotationsLabdo środowisk Lazarus i C++Builder, dołączając do istniejącego przykładu konsoli Delphi
Poprawki
- Metoda
TPdf.CreateAnnotationmogła zgłaszać błąd “Cannot set attachment points” dla adnotacji korzystających z punktów quad (Highlight, Underline, StrikeOut, Squiggly), ponieważ nowa adnotacja nie miała jeszcze pola na zastąpienie; obecnie dołącza pierwszy punkt
Version 1.79.0
Nowości
- Nowy przykład konsoli Delphi
AnnotationsLab: tworzy adnotacje tekstowe, podświetlenia, kwadraty i okręgi, zapisuje je do PDF, po czym ładuje plik ponownie i wylicza listę adnotacji ze strony
Version 1.78.0
Nowości
- Dodano
TPdf.MeasureTextiTPdf.MeasureTextWidth: mierzenie renderowanej szerokości i wysokości podanego łańcucha o przypisanej czcionce (PDF user units, 1 = 1/72 cala) bez dodawania zawartości do strony, wspomagające logikę dla układów z ułamaniem wierszy zAddText; rozwiązanie wygenerowane po nowej klasie wFPdfMeasure - Dodano
TPdf.WrapText: rozwiązanie korzystające z operacji na użyciu uMeasureTextWidthrozdzielając tekst ze spacjami i pakując je pod układ nie większy dla limitu na opcję z formatowania; ze zwrotem w operacji pod łańcuch bez przełamań na jedno słowo dla bardzo długich
Version 1.77.0
Nowości
ValidatePdfAuzyskało trzy nowe wartościTPdfAValidationIssueobejmujące klauzule, które wcześniejszy audyt luk oceniał jako “NO” albo “reader behaviour” (dopisane na końcu wyliczenia, istniejące wartości bez zmian):pvaiPdfiumNotDefGlyph(PDF/A-2 6.2.11.8 — znak rozwiązujący do Unicode 0 bez błędu mapowania, objaw w czasie wykonania odwołania do glifu.notdef; wykrywane w warstwie modelu obiektowego Pdfium),pvaiWordBreakMissing(Level A 6.8.3.2 — łańcuch show w strumieniu treści dłuższy niż 20 znaków i bez spacji, prawdopodobne sklejenie wyrazów; zgrubna heurystyka unikająca fałszywych trafień na CJK) orazpvaiLinkActionMissingTarget(6.6.3 — akcja GoToR/URI/SubmitForm bez klucza celu wyświetlania, przez co czytnik nie potrafi jej przedstawić)
Version 1.76.0
Dodano (Added)
- Do
ValidatePdfAdodano trzy nowe wartościTPdfAValidationIssue(dodano numery porządkowe, istniejące wartości pozostały bez zmian):pvaiNameNotValidUtf8(PDF/A-2/3 6.1.8 — token/BaseFontlub/FontNamezawierający bajty ≥ 0x80, które nie tworzą prawidłowego UTF-8),pvaiInlineImageLzwForbidden(PDF/A-2/3 6.1.10 — obraz śródliniowy (inline image) w strumieniu zawartości strony używa filtru LZW lub Crypt) orazpvaiTrueTypeDifferencesForbidden(6.3.7 Cor.2 — niesymboliczna czcionka TrueType, której słownik Encoding zawiera/Differences)
Version 1.75.0
Dodano (Added)
- Funkcja
ValidatePdfAzyskała trzy nowe wartościTPdfAValidationIssue(dołączone na końcu, istniejące wartości pozostały bez zmian):pvaiIntegerImplementationLimit(PDF/A-2/3 6.1.13 — token numeryczny przekraczający limit 32-bitowej liczby całkowitej ze znakiem 2,147,483,647),pvaiBlendModeNotWhitelisted(PDF/A-2/3 6.2.10 — wartość/BMspoza standardowego zestawu trybów mieszania ISO 32000-1 §11.3.5; uzupełnia wartośćpvaiTransparentColorSpacez PDF/A-1, która zezwala tylko na Normal/Compatible) orazpvaiHexStringOddDigits(6.1.6 — ciąg szesnastkowy<...>z nieparzystą liczbą cyfr szesnastkowych)
Version 1.74.0
Dodano (Added)
- Funkcja
ValidatePdfAzyskała trzy nowe wartościTPdfAValidationIssue(dołączone na końcu, istniejące wartości pozostały bez zmian):pvaiPermissionsViolation(6.1.12 — słownik/Permszawierający/DigestLocation,/DigestMethodlub/DigestValueobok/DocMDP),pvaiTransActionForbidden(PDF/A-2 6.5.1 — akcja przejścia Trans, wykrywana poprzez wzorzec słownika akcji/S /Trans, aby uniknąć fałszywych dopasowań z/Transparency) orazpvaiPdfiumObjectTransparency(PDF/A-1 6.4 — obiekt strony zawiera rzeczywistą przezroczystość wedługFPDFPageObj_HasTransparency, co rozszerza warstwę modelu obiektowego Pdfium wprowadzoną w wersji v1.73.0, aby wychwytywać efekty trybów mieszania/miękkich masek, które skanowanie nazw na poziomie bajtów może przeoczyć)
Version 1.73.0
Dodano (Added)
TPdf.ValidatePdfAnakłada teraz przebieg modelu obiektowego Pdfium na inspektora poziomu bajtów: przechodzi przez obiekty tekstowe każdej strony za pomocąFPDFPage_GetObject→FPDFTextObj_GetFont→FPDFFont_GetIsEmbeddedi zgłasza nieosadzoną renderowaną czcionkę jakopvaiPdfiumFontNotEmbedded(ISO 19005 6.3.4), a także ładuje każdą stronę tekstową, aby skanowaćFPDFText_HasUnicodeMapErrori zgłasza uszkodzone mapowanie Unicode jakopvaiPdfiumUnicodeMapError(6.3.8). Są to kontrole, których inspektor poziomu bajtów nie może wykonać — widzi on tylko tokeny nazw, a nie rozwiązane uchwyty czcionek czy stan mapowania poszczególnych znaków — i są one łączone z wynikiem na poziomie bajtów. Samodzielna funkcja poziomu bajtówValidatePdfACompliancepozostaje bez zmian
Version 1.72.0
Dodano (Added)
- Funkcja
ValidatePdfAzyskała pięć nowych wartościTPdfAValidationIssue(dołączone na końcu, istniejące wartości pozostały bez zmian):pvaiNeedsRenderingPresent(PDF/A-2 6.4.2 — katalog nie może zawierać/NeedsRendering),pvaiDestOutputProfileRef(PDF/A-3 6.2.3 — obiekt OutputIntent nie może zawierać/DestOutputProfileRef),pvaiEmbeddedFileMissingUF(PDF/A-3 6.8 — specyfikacja pliku z/EFmusi również zawierać/UF),pvaiXmpPacketBytesAttr(6.7.5 — nagłówek pakietu XMP nie może zawierać przestarzałego atrybutubytes=lubencoding=) orazpvaiAnnotationToggleNoView(PDF/A-2 6.3.2 — bit/Fadnotacji ToggleNoView o wartości 512 jest zabroniony)
Version 1.71.0
Zmieniono
- Funkcja
ValidatePdfUazgłasza terazpvuaiOrderedListMissingListNumbering(ISO 14289-1 7.6): moduł przechodzący po drzewie struktury rozwiązuje atrybut układuListNumberingna każdym elemencieLpoprzez API atrybutów Pdfium i oflagowuje każdą wartość spoza zestawu określonego w ISO 32000-1 Tabela 347 (Decimal,UpperRoman,LowerRoman,UpperAlpha,LowerAlpha,None,Circle,Disc,Square). Brak atrybutu nie jest oflagowywany, ponieważ lista może być nieuporządkowana; zamyka to ostatnią pozostałą lukę względem ISO 14289-1 zarejestrowaną pod koniec 5. rundy
Version 1.70.0
Dodano
- Do
ValidatePdfUadodano cztery nowe wartościTPdfUaValidationIssue(dołączone na końcu, istniejące wartości pozostały bez zmian):pvuaiSubsetMissingCidSet(ISO 14289-1 7.21.4.2 — podzbiór CIDFontDescriptormusi deklarować/CIDSet),pvuaiToUnicodeForbiddenValue(7.21.7 — CMap ToUnicode nie może mapować żadnego kodu naU+FEFFlubU+FFFE; nieskompresowane strumienie są skanowane pod kątem form wyjściowych<FEFF>/<FFFE>),pvuaiLangInvalidFormat(7.2 —/Langmusi być prawidłowym tagiem RFC 1766 / BCP 47; pobłażliwa gramatyka akceptujeen,en-US,zh-Hans,es-419i oflagowuje wyraźnie niezgodne wartości) orazpvuaiOrderedListMissingListNumbering(7.6 — zachowane dla kompletności API; nie jest jeszcze zgłaszane przez walidator, ponieważ niezawodne odróżnienie list uporządkowanych od nieuporządkowanych wymaga wartości atrybutuListNumbering, której moduł przechodzący po drzewie struktury nie udostępnia)
Version 1.69.0
Dodano
- Do
ValidatePdfUadodano dwie nowe wartościTPdfUaValidationIssue(dołączone na końcu, istniejące wartości pozostały bez zmian):pvuaiWidgetOutsideForm(ISO 14289-1 7.18.4 — element struktury Widget musi być zagnieżdżony w elemencieForm; moduł przechodzący po drzewie struktury weryfikuje teraz bezpośredni typ nadrzędny każdego Widgetu) orazpvuaiSubsetMissingCharSet(7.21.4.2 — podzbiór Type 1FontDescriptormusi deklarować/CharSet, identyfikowany przez sześcioliterowy prefiks nazwy podzbioru+w/FontName)
Version 1.68.0
Dodano
- Do
ValidatePdfUadodano dwie nowe wartościTPdfUaValidationIssue(dołączone na końcu, istniejące wartości pozostały bez zmian):pvuaiUriActionIsMap(ISO 14289-1 7.18.5 — słownik akcji URI nie może zawierać/IsMapz wartościątrue, ponieważ wyłącza to dostępny cel łącza) orazpvuaiHeadingSequenceViolation(7.4.2 — numerowane nagłówki muszą zaczynać się odH1, a sekwencja malejąca nie może pomijać pośredniego poziomu, np.H1→H3jest naruszeniem). Sprawdzenie nagłówków jest pierwszą regułą PDF/UA na poziomie drzewa struktury w walidatorze:ValidatePdfUaStructureElementsprzechodzi teraz listę typowanych elementów i weryfikuje sekwencjęH1…H6(iH7+zgodnie z 7.4.3) w kolejności zgodnej z dokumentem
Version 1.67.0
Dodano
- Do
ValidatePdfUadodano pięć nowych wartościTPdfUaValidationIssue(dołączone na końcu, istniejące wartości pozostały bez zmian):pvuaiLinkMissingContents(ISO 14289-1 7.18.5 — adnotacja Link musi zawierać opis alternatywny poprzez/Contents),pvuaiAnnotationMissingContents(7.18.1 — każda niezwolniona adnotacja bez/Contentsmusi posiadać alternatywny opis; zwolnione są Popup i Widget),pvuaiEmbeddedFileMissingName(7.11 — słownik specyfikacji pliku musi zawierać/Fi/UF),pvuaiMediaClipMissingAlt(7.18.6.2 — słownik danych klipu multimedialnego musi zawierać/CTi/Alt) orazpvuaiCidFontMissingCidToGidMap(7.21.3.2 — osadzony Type 2 CIDFont musi zawierać/CIDToGIDMap)
Version 1.66.0
Dodano
- Do
ValidatePdfUadodano pięć nowych wartościTPdfUaValidationIssue(dołączone na końcu, istniejące wartości pozostały bez zmian):pvuaiRoleMapMissing(ISO 14289-1 7.1 — oznaczony dokument z niestandardowymi typami struktury musi posiadać/RoleMap),pvuaiOptionalContentAsKey(7.10 — słownik konfiguracji zawartości opcjonalnej nie może zawierać klucza stanu automatycznego/AS),pvuaiXfaPresent(7.15 — obecność/XFAw AcroForm jest oflagowywana, ponieważ dynamiczne XFA jest zabronione),pvuaiTrapNetAnnotation(7.18.2 — adnotacje/TrapNetsą zabronione) orazpvuaiReferenceXObject(7.20 — obiekty Reference XObjects, oparte na znaczniku/Ref, są zabronione)
Naprawiono
- Funkcja
ValidatePdfUanie zgłasza już fałszywych alarmów (false-positives) dlapvuaiEncryptionPresentw każdym zaszyfrowanym pliku: PDF/UA zezwala na szyfrowanie, o ile klucz/Pw słowniku szyfrowania ma ustawioną pozycję bitową 10 (wartość 1024), co przyznaje dostęp technologiom asystującym (7.16). Dokładne naruszenie jest teraz zgłaszane za pomocą nowegopvuaiEncryptionPBitMissing;pvuaiEncryptionPresentzostało zachowane w wyliczeniu (enum) ze względu na kompatybilność API, ale nie jest już zgłaszane przez walidator na poziomie bajtów
Version 1.65.0
Dodano
- Do
ValidatePdfAdodano pięć nowych wartościTPdfAValidationIssue(dołączone na końcu, istniejące wartości pozostały bez zmian):pvaiCidFontMissingCidToGidMap(ISO 19005-1 6.3.3.2 Cor.2 — osadzony Type 2 CIDFont musi posiadać/CIDToGIDMap),pvaiSubsetMissingCharSet(6.3.5 — podzbiór Type 1FontDescriptormusi posiadać/CharSet),pvaiSubsetMissingCidSet(6.3.5 — podzbiór CIDFontDescriptormusi posiadać/CIDSet),pvaiWidgetActionForbidden(6.6.1 — adnotacja Widget nie może zawierać/Alub/AA) orazpvaiOptionalContentAsKey(ISO 19005-2 6.9 — słownik konfiguracji zawartości opcjonalnej nie może zawierać klucza stanu automatycznego/AS, co ma teraz znaczenie, ponieważ PDF/A-2 zezwala na zawartość opcjonalną)
Version 1.64.0
Dodano
- Do
ValidatePdfAdodano osiem nowych wartościTPdfAValidationIssue(dołączone na końcu, istniejące wartości pozostały bez zmian):pvaiHeaderBinaryMarkerMissing(ISO 19005-1 6.1.2 — po nagłówku%PDF-x.ymusi następować komentarz%z co najmniej czterema bajtami większymi niż 127),pvaiExternalStreamRef(6.1.7 — słownik strumienia nie może zawierać/F,/FFilterlub/FDecodeParms),pvaiOutputIntentScheme(6.2.2 — OutputIntent/Smusi wynosić/GTS_PDFA1),pvaiInfoXmpDateMismatch(6.7.3 — InfoCreationDate/ModDatemusi również występować jakoxmp:CreateDate/xmp:ModifyDate),pvaiMarkInfoMissing(6.8.2.2 — Poziom A wymaga/MarkInfoz/Marked true),pvaiAnnotationApDictViolation(6.5.3 Cor.2 — słownik adnotacji/APmusi zawierać tylko/N),pvaiEmbeddedFileMissingAFRelationship(ISO 19005-3 Załącznik E.2 — każda powiązana specyfikacja pliku musi posiadać/AFRelationship) orazpvaiJpeg2000Violation(ISO 19005-2 6.2.8.3 — obraz JPEG2000 musi deklarować 1, 3 lub 4 komponenty)
Naprawiono
- Funkcja
ValidatePdfAnie zgłasza już fałszywych alarmówpvaiAnnotationFlagsViolationdla dokumentów używających jednoliterowej nazwy zasobu czcionki, takich jak/Font << /F 5 0 R >>; skanowanie flagi/Fjest teraz warunkowane kontekstem adnotacji (/Subtypetypu adnotacji), co jest zgodne z udokumentowanym zachowaniem (6.5.3) - Funkcja
ValidatePdfAzgłasza teraz wymaganie powiązanego pliku PDF/A-3 dla poszczególnych plików: dokument jest oflagowywany tylko wtedy, gdy osadzony/Type /Filespecodwołujący się do osadzonego strumienia przez/EFnie zawiera/AFRelationship, w przeciwieństwie do wcześniejszego sprawdzania całego dokumentu na zasadzie „wszystko albo nic” (ISO 19005-3 Załącznik E.2) - Dodano przestarzałą akcję
/SetStatedo zestawu zabronionych akcji obok/SetOCGState, dzięki czemu nazwa akcji z referencji PDF jest wyłapywana bezpośrednio (6.6.1)
Version 1.63.0
Dodano (Added)
- Dodano
TPdf.MeasureTextiTPdf.MeasureTextWidth: mierzą renderowaną szerokość i wysokość tekstu dla podanego kroju i rozmiaru czcionki bez dodawania treści do strony (jednostki użytkownika PDF, 1 jednostka = 1/72 cala), umożliwiając obliczenia układu i automatyczne zawijanie wierszy na bazieAddText; dostępne jako class helper w samodzielnej jednostceFPdfMeasure
Zmieniono (Changed)
- Dema
Demo\Delphi\MergePDF,Demo\CBuilder\MergePDFiDemo\Lazarus\MergePDFrozbudowane dla wszystkich trzech środowisk IDE: zakres stron dla każdego pliku, opcjonalna ścieżka wyjściowa, deduplikacja, dziennik operacji, przycisk anulowania, podsumowanie scalania; zakładki i metadane z pierwszego źródła - Dema
CreatePDFzawierają teraz opcję European Text dla tekstu z akcentowanymi znakami w językach: czeski, francuski, niemiecki, hiszpański, portugalski, polski i turecki — weryfikując wybór czcionki i obsługę Unicode (dawna wersja demoEuropeanTextzostała włączona) - Usunięto przykłady
ExtractTextPagesiEuropeanText: możliwość wyprowadzania tekstu strona po stronie zExtractTextPagesjest teraz objęta opcjami zakresu stron i separatora stron wExtractText, a wielojęzyczne renderowanie tekstu zEuropeanTextzostało włączone doCreatePDF
Version 1.62.2
Naprawiono (Naprawiono)
- Wygenerowano ponownie nagłówki C++Builder (
.hpp) dla każdej wersji i platformy RAD Studio (Win32/Win64/Win64x); rozjechały się one z źródłami Pascal, pozostawiając nieaktualne sygnatury funkcji i brakujące units, które trafiały do użytkowników C++Buildera przez dystrybucję źródeł
Version 1.62.1
Naprawiono (Naprawiono)
- Przywrócono kompilację źródeł w RAD Studio 12 Athens i starszych: przypisanie
TArray<Byte>w ścieżce walidacji PDF/UA używało niejawnej konwersji tablic dostępnej tylko w Delphi 13, która nie kompilowała się w starszych IDE
Version 1.62.0
Dodano (Dodano)
TPdf.RenderPageThumbnailrenderuje dowolną stronę według indeksu do bitmapy dopasowanej do proporcji, bez zmiany bieżącej strony dokumentu, załadowanej strony ani wywoływaniaOnPageChange
Naprawiono (Naprawiono)
TPdfThumbnailViewnie steruje jużPageNumberdokumentu hosta podczas rysowania; wcześniej każde odświeżenie ponownie ładowało strony, wywoływałoOnPageChangei odrzucało stronę tekstową, co mogło zakłócać powiązanyTPdfViewi wywoływać pętle odświeżania. Miniatury są teraz renderowane przezRenderPageThumbnailbez takich efektów ubocznych- Walidacja zgodności PDF/X teraz analizuje dokumenty z cross-reference streams (PDF 1.6, typowe dla PDF/X-4) i obiekty przechowywane w compressed object streams, zamiast uznawać takie pliki zbiorczo za niezgodne; znacznik
GTS_PDFXVersionjest odczytywany zarówno z postaci elementowej, jak i z postaci atrybutowej RDF XMP - Walidacja PDF/R zgłasza teraz
pvriInfoXmpMismatch, gdy słownik Info i XMP nie zgadzają się co do Producer lub Creator; wcześniej problem był tylko zadeklarowany, ale nigdy nie był zgłaszany - Timery form-fill są śledzone osobno dla każdego żądania, więc dokument uruchamiający kilka timerów jednocześnie, na przykład interwał JavaScript obok migania kursora pola, zachowuje je wszystkie zamiast gubić każdy poza najnowszym
- Rysowanie w
TPdfVieworaz jego publiczne metodyRenderPage/RenderTiletrzymają teraz blokadę renderowania dokumentu, serializując się względem renderowania tego samegoTPdfw wątku roboczym, ponieważ PDFium nie jest wielowątkowe - Tekst spoza ASCII zapisany w metadanych PDF/X, PDF/R i PDF/VT (OutputIntent condition names, Creator, Producer) jest teraz kodowany jako ciąg UTF-16BE zgodnie z ISO 32000-1 §7.9.2.2 zamiast surowego UTF-8, które zgodni czytelnicy błędnie interpretowaliby
- Pomocniki zgodności poprawnie odczytują osadzone strumienie metadanych, których
/Lengthjest pośrednim odwołaniem, wczytują bajty źródłowe za pomocąReadBuffertak, aby krótki odczyt kończył się czysto, i odrzucają ujemny offsetstartxrefzamiast ryzykować odczyt poza zakresem
Version 1.61.0
Zmieniono (Zmieniono)
- Poprawki deklaracji FFI/ABI, które mogą wymagać ponownej kompilacji kodu implementującego dotknięte callbacki: callback form-fill
FFI_OpenFilema terazcdecl(Win32 stack convention), a parametrvaluewFPDFAnnot_SetStringValueiFPDFAttachment_SetStringValuema teraz typFPDF_WIDESTRING(UTF-16LE), aby pasował do nagłówków PDFium - Callbacki progressive-load
FX_FILEAVAIL.IsDataAvailiFX_DOWNLOADHINTS.AddSegmentprzyjmują teraz offsetysize_t, asize_tma szerokość wskaźnika w Free Pascal / Lazarus Win64, gdzie wcześniej był ucinany do 32 bitów, co naprawia wywołania API data-availability ioutsize_tw FPC Win64
Naprawiono (Naprawiono)
- Bezpieczeństwo pamięci: use-after-free timera form-fill podczas niszczenia
TPdfz aktywnym kursorem AcroForm; podwójneFPDF_CloseDocumentna ścieżce błęduImportNPagesToOne; wyjątki Pascal uciekające przez callbackiFPDF_FILEWRITE/FPDF_FILEACCESSpoza granicę C podczas zapisu i wstawiania JPEG; oraz przepełnienie całkowite w ekstrakcji tekstu podczas odczytu od indeksu początkowego do końca strony TPdfFuture<T>teraz niezawodnie dostarcza swój callback wyniku; odpowiedź była wcześniej prawie zawsze gubiona, a czasem mogła dotknąć zwolnionego wątku, ponieważ worker zwalniał sam siebie przed uruchomieniem kolejki odpowiedzi- Wyjście PDF/A, PDF/X, PDF/E, PDF/R, PDF/VT i PDF/UA zapisuje teraz wpisy cross-reference dokładnie 20-bajtowe, zgodnie z ISO 32000-1 §7.5.4
- Wstrzykiwanie znaczników standardów nie niszczy już słownika, gdy usunięty klucz, na przykład
/Trapped, był ostatnim wpisem, co wcześniej połykało zamykające>>i tworzyło uszkodzony obiekt - Strumienie profilu ICC w OutputIntent deklarują teraz wymagany licznik składników
/Ndla PDF/X i PDF/VT, już obecny dla PDF/A; zaszyfrowane dokumenty źródłowe są odszyfrowywane przed wstrzyknięciem znaczników PDF/X, PDF/E, PDF/R, PDF/VT i PDF/UA, więc wynik jest poprawny zamiast cicho uszkodzonego - BOM xpacket UTF-8 w generowanym XMP jest emitowany jako dokładne bajty, co naprawia uszkodzenia na instalacjach Delphi, których ANSI code page nie jest Latin-1; trwale przyrostowe tła aktualizacji zachowują teraz odwołanie
/Infodokumentu SaveAsz kompresją nie ucina już strumieni, których/Lengthjest pośrednim odwołaniem, a przebudowane tabele cross-reference używają teraz 20-bajtowych wpisów, rzeczywistych numerów generacji i usuwają stare wskazanie/Prev- Walidacja zgodności odczytuje znaczniki wersji XMP w postaci atrybutów dla PDF/E i PDF/X, więc rozpoznaje pliki PDF/X-4 serializowane jako atrybuty, wymaga dokładnego identyfikatora
PDF/E-1, poprawnie odczytuje strumienie metadanych z pośrednim/Lengthi nie myli już klucza/IDani/StructTreeRootelementu struktury podczas sprawdzania tła PDF/UA; uszkodzony offsetstartxrefnie powoduje już błędu zakresu TPdfThumbnailView: ostatnia strona jest teraz osiągalna paskiem przewijania, bieżąca strona dokumentu hosta jest przywracana po narysowaniu miniaturek, a standardowa obsługa mouse-leave jest ponownie wysyłana- Bitmapy stron i obrazów w skali szarości nie są już renderowane z błędną paletą;
TPdfViewnie pozostaje już z wiszącym odwołaniem, gdy jegoTPdfzostanie zwolniony jako pierwszy - Raporty preflight: HTML jest zapisywany jako UTF-8, aby odpowiadał zadeklarowanemu charset, a ucieczka znaków JSON tworzy poprawne sekwencje
\udla znaków spoza ASCII w Free Pascal - Buildy trial: okno przypomnienia trial teraz się pojawia zamiast być tłumione zanim zdąży się wyświetlić
TPdfStreamAdapterodrzuca teraz strumienie większe niż 4 GiB z czytelnym błędem zamiast cicho ucinać długość przekazywaną do PDFium
Version 1.60.1
Zmieniono (Zmieniono)
- Dema AccessibilityReader dla Delphi, Lazarus i C++Builder uruchamiają teraz odczyt na głos na
TPdfReadingSession: każda strona jest składana w jeden wypowiadany fragment przezBuildSpokenTextFromWords, pozycje słów SAPI zasilająFeedSpokenPosition, a sesja przechodzi przez strony i steruje kursorem słów widoku, zastępując ręczną orkiestrację, którą każde demo miało wcześniej - Śledzenie karaoke na poziomie słów w demach działa teraz także, gdy NVDA jest silnikiem mowy:
EstimatePacingreguluje kursor czytania na podstawie upływu czasu mówienia, podczas gdy NVDA wcześniej czytało na głos bez żadnego śledzenia słów - Pause i Resume w demach działają teraz także z NVDA:
ResumeRestartsChunkodczytuje bieżącą stronę od początku podczas Resume, podczas gdy SAPI zachowuje natywne wstrzymanie i wznowienie w miejscu
Version 1.60.0
Dodano (Dodano)
- Renderowanie na żywo dla słabowidzących w
TPdfView: nowe opcje renderowaniareInvertireNightDuotonezmieniają kolory każdego renderowanego kafla strony, czyli pełna inwersja kolorów albo paleta night duotone, zanim zostaną narysowane nakładki wyszukiwania, zaznaczenia, czytania i kursora słów, przenosząc istniejące transformacje kolorów bitmapy do interaktywnego widoku zarówno dla układu jednej strony, jak i stron naprzeciwległych; przełączenie opcji powoduje natychmiastowe odświeżenie NightDuotoneInkiNightDuotonePaperkonfigurują nocną paletę, domyślnie ustawiając bursztynowy tekst na czarnej stronie; gdy ustawione są obie opcje, wygrywareInvert
Version 1.59.0
Dodano (Dodano)
TPdfReadingSession: komponent orkiestracji czytania na głos niezależny od silnika mowy. Zachowuje kursor fragmentu, kursor słów i stan odtwarzania (Play/PlayFrom/Pause/Resume/Stop), przechodzi przez załadowane fragmentyTPdfSpokenText, gdy host zgłasza bezczynność silnika przezTick, tłumaczy przesunięcia spoken-text z powrotem na znaki strony i automatycznie steruje dołączonym kursorem słówTPdfView; host łączy dowolny silnik mowy przezOnSpeakoraz zdarzenia żądań cancel / pause / resume, więc biblioteka nie wiąże się bezpośrednio z żadnym API mowyFeedSpokenPositionpobiera pozycje słów silnika, na przykład SAPIStatus.InputWordPosition;EstimatePacingzEstimatedWordsPerMinutenadaje tempo silnikom bez sygnału pozycji;ResumeRestartsChunkponownie odczytuje bieżący fragment dla silników bez natywnego pauzowaniaOnChunkChange,OnWordChangeiOnFinishedwywoływane są tylko przy rzeczywistych zmianach, a zwolniony dołączony widok odłącza się automatycznie, więc kod hosta pozostaje bez migotania i odporny na awarie
Version 1.58.0
Dodano (Dodano)
EstimateSpokenWordIndexszacuje, które słowo silnik mowy wypowiada na podstawie upływu czasu i tempa w słowach na minutę, przyznając dłuższym słowom proporcjonalnie więcej czasu, dzięki czemu silniki, które nie raportują pozycji słowa, takie jak klient kontrolera NVDA, nadal mogą sterować kursorem czytania na poziomie słów; wywołujący podaje upływ czasu, więc procedura pozostaje niezależna od zegara i łatwa do testowania
Version 1.57.0
Dodano (Dodano)
- Składanie mówionego tekstu z mapowaniem dwóch domen do śledzenia czytania na głos:
BuildSpokenTextFromWordsiSpokenTextAppendbudują ciąg przekazywany do silnika text-to-speech z ramek słów strony, jednocześnie zapisując tabelę zakresów, aSpokenToPageChartłumaczy zgłaszane przez silnik przesunięcie mówionego tekstu, takie jakStatus.InputWordPositionSAPI, z powrotem na indeks znaku strony, dzięki czemu śledzenie podświetlenia na poziomie słów pozostaje poprawne, gdy mówiony tekst nie jest całym tekstem strony, na przykład przy pominiętych regionach, czytaniu per-unit i nadpisaniach wymowy TPdfSpokenTextiTPdfSpokenSpanprzechowują string mówiony oraz zakresy stron źródłowych, z których został zbudowany; przesunięcia wstawionych separatorów rozstrzygają się do następnego zmapowanego słowa, a przesunięcia poza zmapowanymi przebiegami zgłaszają brak dopasowania
Version 1.56.9
Dodano (Dodano)
Demo\Delphi\PreflightReportdodaje podgląd Action Plan, który kompresuje normy niezaliczone, priorytety, następne akcje, kody problemów i zalecenia do listy działań naprawczychDemo\Delphi\PreflightReportCliprzyjmujeplan/actionplanjako format wyjścia dla pojedynczych plików i wsadów, zapisując tę samą listę działań naprawczych do pliku tekstowego
Zmieniono (Zmieniono)
- Oba demka Delphi PreflightReport wyświetlają teraz liczniki statusu pass / action / review wraz z całkowitą liczbą standardów i problemów
Version 1.56.8
Zmieniono (Zmieniono)
ViewerInteractionLabobejmuje teraz kontrolki przewijania stron, kontrolki ręcznego zoomu, logowanie współrzędnych po kliknięciu przezDeviceToPage/PageToDeviceoraz czytelniejszy log interakcji dla kontroli wyboru, wyszukiwania, obracania i nawigacji- Pliki readme
ViewerInteractionLabopisują teraz dodany przepływ interakcji we wszystkich zlokalizowanych readme zestawów demonstracyjnych
Version 1.56.7
Dodano (Dodano)
AccessibilityWorkbenchClimapuje każde wykryte znalezisko na kryteria sukcesu WCAG 2.1 i obszar klauzuli ISO 14289-1 oraz pokazuje sekcję pokrycia standardów w raportachAccessibilityWorkbenchClioblicza udokumentowaną ocenę accessibility od 0 do 100 z opublikowaną macierzą kar i zakresem excellent / good / needs work / poor, prezentowaną dla każdego pliku i średnio dla wsaduAccessibilityWorkbenchCliprzyjmujefailscore=Ndo oznaczania uruchomienia jako nieudanego (kod wyjścia 2), gdy którykolwiek plik ma wynik poniżej NAccessibilityWorkbenchClizapisuje log SARIF 2.1.0, gdy nazwa podsumowania wsadu kończy się na.sarif, z jedną regułą na rodzaj znaleziska i tagami WCAG 2.1 i PDF/UA do zużycia przez CI i skanowanie koduAccessibilityWorkbenchClidodaje komendęversionwypisującą powiązaną wersję PDFium Delphi Component
Version 1.56.6
Dodano (Dodano)
IntakeWorkbenchClioblicza hash SHA-256 dowodowy dla każdego pliku wejściowego (z degradacją dounavailablew kompilatorach bezSystem.Hash) i raportuje go we wszystkich formatachIntakeWorkbenchCliprzyjmujepasswords=file.txtdo próbnego odblokowania dokumentów z hasłem z listy kandydatów, zapisując indeks dopasowanego kandydata bez jakiegokolwiek logowania tekstu hasłaIntakeWorkbenchCliprzyjmujecopyto=dir, by kierować każdy audytowany plik do podfolderu poziomu ryzyka, dzięki czemu auditor staje się sortownikiem przyjęćIntakeWorkbenchClizapisuje log SARIF 2.1.0, gdy nazwa podsumowania wsadu kończy się na.sarif, z jedną regułą na flagę ryzyka i jednym wynikiem na oznaczony plik do użycia w CI i code scanningIntakeWorkbenchClidodaje komendęversionwypisującą powiązaną wersję PDFium Delphi Component
Version 1.56.5
Dodano (Dodano)
IntakeWorkbenchCliwyznacza teraz zalecane działania po intake, takie jak accept, request-password, manual-review, quarantine i deduplicate, oraz pokazuje liczniki działań w podsumowaniach wsaduAccessibilityWorkbenchCliwyznacza teraz zalecane działania naprawcze, takie jak pass-through, remediate-tags, run-ocr, remediate-semantics i manual-review, wraz z odpowiadającymi im licznikami działań w podsumowaniach wsadu
Zmieniono (Zmieniono)
- Oba narzędziowe demka CLI prezentują zalecaną akcję w konsoli, tekście, HTML, JSON i CSV, aby operatorzy wsadu mogli kierować pliki bez dodatkowego przetwarzania pól ryzyka po wykonaniu
Version 1.56.4
Naprawiono (Naprawiono)
- Odczytywanie adnotacji, zakładek lub adnotacji linku w pętli nie wycieka już ciągów tekstowych poprzedniego elementu: rekordy wyników
TPdfAnnotation,TBookmarkiTLinkAnnotationsą teraz czyszczone inicjalizacją uwzględniającą typy zarządzane zamiast zerowania surowej pamięci, więc dokumenty z bardzo dużą liczbą tekstowych adnotacji nie rozszerzają już pamięci procesu na czas działania aplikacji - Usunięcie
TPdf, który zarejestrował handlerOnUnsupportedFeature, odłącza go teraz od globalnego callbacku PDFium na poziomie procesu, więc późniejsze wczytanie dokumentu z innegoTPdfbez własnego handlera nie może już trafić do zwolnionego komponentu (use-after-free)
Version 1.56.3
Naprawiono (Naprawiono)
AccessibilityWorkbenchClinie liczy już pustych stron jako stron heurystycznego porządku czytania, więc dokumenty z pustymi stronami separatorów zachowują poprawny stan accessibility, a strony bez czytelnej zawartości są raportowane osobno- Detekcja nagłówków tabeli w
AccessibilityWorkbenchClinie przypisuje już komórkiTHzagnieżdżonej tabeli do tabeli zewnętrznej, a nazwy pól formularza i czcionek są teraz porównywane uwzględniające wielkość liter, aby rozróżniać różne pola - Inwentaryzacja hostów URL w
IntakeWorkbenchCliusuwa teraz userinfo, query i fragment, więc link taki jak[email protected]jest przypisywany do prawdziwego hosta, a celemailto:dopisują również domenę zamiast być niewidocznymi IntakeWorkbenchCliucieka znaki grave w ścieżkach, hostach i nazwach załączników kontrolowanych przez atakującego w raportach Markdown, aby formatowanie nie mogło zostać zniszczone z wnętrza dokumentu
Zmieniono (Zmieniono)
AccessibilityWorkbenchCliraportuje błędy skanowania czcionek i pól formularza jako oddzielne liczniki, oznacza czcionki nieosadzone, które mają też instancje osadzone, i ogranicza długie listy czcionek wyraźnym znakiem obcięcia- Podsumowania wsadów
IntakeWorkbenchClidodają kolumnę liczby adnotacji załączników, a jednorazowe spisanie adnotacji na stronie jest ograniczone do 20000 adnotacji na stronę z limitem widocznym we wszystkich formatach
Version 1.56.2
Dodano (Dodano)
AccessibilityWorkbenchClisprawdza teraz osadzanie fontów, tooltip pól formularza, źródło kolejności czytania, konspekty dokumentu, strukturę tabel i list, podejrzany tekst alternatywny oraz bogatsze szczegóły przeglądu stron, aby raporty accessibility dla wsadów wskazywały więcej celów naprawyIntakeWorkbenchCliraportuje teraz limity skanowania stron, akcje launch i remote-go-to, inwentarze hostów URI, liczby adnotacji, nieobsługiwane funkcje PDFium, zduplikowane identyfikatory dokumentów oraz rozszerzone flagi ryzyka dla automatycznego przeglądu intake
Zmieniono (Zmieniono)
IntakeWorkbenchCliakceptujemaxpages=Nw trybie pojedynczego pliku i wsadu, aby ograniczyć skanowanie stron każdego dokumentu przy jednoczesnym ukończeniu raportów metadata, attachment, script, XFA, signature i risk
Version 1.56.1
Naprawiono (Naprawiono)
- Wczytanie starszego
pdfium.dllbez nowszego eksportu kończy się teraz czysto niepowodzeniem: ścieżka błędu resetuje każdy powiązany punkt wejścia API, więc kontroleAssigned()(na przykład dlaFPDF_GetLastErrorlubFPDF_GetSecurityHandlerRevision) zgłaszają, że biblioteka nie jest załadowana, zamiast wywoływać już zwolniony moduł i kończyć się awarią z naruszeniem dostępu UnloadLibraryczyści teraz wszystkie powiązania API PDFium, a nie tylko opcjonalne funkcje pomocnicze V8, więc po zwolnieniu DLL nie pozostają przestarzałe wskaźniki funkcji
Version 1.56.0
Dodano (Dodano)
- Karaoke kursor czytania słowo po słowie w
TPdfView:TrackReadingWordAtmapuje przesunięcie znaku bieżącego słowa z silnika text-to-speech, takiego jak SAPIStatus.InputWordPosition, na pola słów strony, wyróżnia słowo, które je zawiera, jako osobną nakładkę nad blokiem czytania, przewija je do widoku i zwraca indeks słowa, dzięki czemu wypowiadane słowo zapala się wraz z postępem głosu SetReadingWordiClearReadingWordustawiają lub czyszczą wyróżnione słowo bezpośrednio zTPdfWordBox; ponowne ustawienie tego samego słowa jest operacją pustą, więc śledzenie słowo po słowie nigdy nie powoduje migotania widokuReadingWordColoriReadingWordFollowsterują kolorem kursora słowa oraz tym, czy widok automatycznie przewija wypowiadane słowo do widoku
Version 1.55.2
Naprawiono (Naprawiono)
- ViewerInteractionLab daje teraz wierszom paska narzędzi więcej miejsca w pionie, dzięki czemu Open PDF, Create Sample, nawigacja, wyszukiwanie i kontrolki wyboru nie nakładają się już przy skalowanych czcionkach
Version 1.55.1
Naprawiono (Naprawiono)
- ViewerInteractionLab umieszcza teraz Prev, Next i Rotate w drugim wierszu paska narzędzi, unikając początkowego nakładania się z Open PDF i Create Sample
Version 1.55.0
Dodano (Dodano)
- Most słowo-zaznaczenie do czytania typu "read it, select it":
TPdfView.SelectWordBoxiSelectWordSpanzaznaczają pojedyncze pole słowa albo obejmujący tę samą stronę zakres pól słów (zPageWordBoxes) według ich zakresów znaków, dzięki czemu aktualnie czytane słowo lub wiersz można także zaznaczyć i skopiować WordBoxIndexAtCharIndexodwzorowuje indeks znaku z powrotem na pole słowa, które go zawiera, napędzając podświetlanie słowo po słowie wraz z przesuwaniem kursora odczytu TTS
Version 1.54.0
Dodano (Dodano)
- Akcesory wypełniania formularzy głosem, które odczytują aktywne pole bezpośrednio z logicznego kursora:
FocusedFormFieldValue,FocusedFormFieldNameiFocusedFormFieldDetailswTPdforazTPdfViewzwracają wartość bieżącego pola, czytelną dla człowieka nazwę (/TUtooltip, z fallbackiem do/T) oraz pełneTPdfFormFieldInfo(typ, flagi, opcje), czyli wszystko, co interfejs głosowy musi zapowiedzieć podczas przechodzenia przez formularz
Naprawiono (Naprawiono)
FocusedFormFieldValueodczytuje pole przezFocusedFormFieldIndex, a nie przez interaktywny fokus PDFium, więc głosowe wypełnianie formularza dostaje poprawną wartość nawet bez widocznego kursora ekranowego, podczas gdy istniejąceFocusedFormFieldTextnadal odzwierciedla fokus PDFium i pozostaje bez zmian
Version 1.53.0
Dodano (Dodano)
- Obsługa podświetlania na poziomie słów:
TPdf.PageWordBoxesiTPdfView.PageWordBoxesdzielą stronę na rekordyTPdfWordBox, z których każdy zawiera tekst słowa, jego zakres znaków i prostokąt ograniczający w przestrzeni strony, dzięki czemu czytnik accessibility może podświetlać każde wypowiadane słowo po kolei, przekazując prostokąt doSetReadingHighlight BuildWordBoxesDzieli tekst strony na rekordy TPdfWordBox z tekstem słowa i zakresami znaków FTextPage
Version 1.52.0
Dodano (Dodano)
- Pomocniki renderowania dla słabowidzących
InvertPdfBitmap,GrayscalePdfBitmapiDuotonePdfBitmapstosują transformacje kolorów in-place do wyrenderowanej 32-bitowej bitmapy, dzięki czemu czytnik accessibility może pokazywać strony w trybie odwróconym / dark-mode, skali szarości albo w niestandardowym schemacie dwukolorowym, na przykład z ciemnym tłem i jasnym tekstem - Helper wymusza pf32bit i aktualizuje piksele ScanLine bezpośrednio, więc działa po RenderPage lub ToBitmap bez dodatkowego bufora pośredniego
Version 1.51.0
Dodano (Dodano)
- Jednostki czytania na poziomie zdań do wspomaganego słuchania z tekstem:
TPdf.ReadingUnits,TPdf.DocumentReadingUnitsiTPdfView.ReadingUnitslinearyzują strumień czytelnej treści do uporządkowanych rekordówTPdfReadingUnitwielkości zdania, z których każdy zawiera tekst do wypowiedzenia oraz jego rodzaj semantyczny, stronę, prostokąty podświetlenia i znacznik języka, dzięki czemu aplikacja screen readera może przechodzić przez stronę lub cały dokument po jednej wypowiadanej jednostce naraz NextReadingUnitOfKindZnajduje następny lub poprzedni TPdfReadingUnit, którego Kind pasuje do żądanego TPdfContentFragmentKindBuildReadingUnitskonwertuje dowolneTPdfContentFragmentsbezpośrednio na jednostki czytania: nagłówki oraz opisy figur / alt pozostają w całości, akapity dzielą się na granicach zdań, kropki dziesiętne są zachowywane, a kursor czytania pozostaje zwykłym indeksem utrzymywanym przez wywołującego
Version 1.50.0
Dodano (Dodano)
ValidatePdfApotrafi teraz analizować dokumenty PDF 1.5+, które przechowują katalog, OutputIntent lub inne słowniki wewnątrz skompresowanych object stream (/Type /ObjStm). Object stream są rozpakowywane, a niesione przez nie obiekty rozwiązywane, dzięki czemu takie dokumenty są weryfikowane na podstawie ich rzeczywistej zawartości, zamiast być zgłaszane jako pozbawione swoich znaczników PDF/A
Version 1.49.5
Naprawiono (Naprawiono)
ValidatePdfAnie zgłasza już jako problemu brakującego opisupdfaExtension:schemas. Schemat identyfikatora PDF/A (pdfaid) jest powszechnie znany, więc ani veraPDF, ani PDF/A-2/-3 nie wymagają dla niego opisu extension-schema, a oznaczanie jego braku błędnie raportowało każdy zgodny PDF/A pochodzący od innych dostawców. Dokumenty wytwarzane przez samą bibliotekę nadal zawierają ten opis
Version 1.49.4
Naprawiono (Naprawiono)
ValidatePdfAwykrywa teraz poziom zgodności, gdy identyfikator PDF/A jest zapisany jako atrybuty XML (pdfaid:part="2"), a nie jako elementy potomne, więc dokumenty w formie atrybutowej nie są już zgłaszane z nieznanym poziomem. Poprawia to również kaskadę, w której niewykryty poziom powodował, że sprawdzenia specyficzne dla danej części cofały się do rygorystycznych reguł PDF/A-1 i błędnie oznaczały pliki osadzone oraz przezroczystość, które PDF/A-2 i PDF/A-3 dopuszczają
Version 1.49.3
Naprawiono (Naprawiono)
ValidatePdfAanalizuje teraz dokumenty PDF 1.5+, których dane cross-reference mają postać cross-reference stream (pliki bez słowa kluczowegotrailer). Poziom zgodności,/IDze zwiastuna oraz pozostałe znaczniki są odczytywane ze słownika cross-reference stream, dzięki czemu takie dokumenty są weryfikowane na podstawie ich rzeczywistej zawartości, zamiast być zgłaszane jako całkowicie niezgodne
Version 1.49.2
Naprawiono (Naprawiono)
ValidatePdfAnie zgłasza już fałszywego problemu z nieosadzoną czcionką w dokumentach, które osadzają wszystkie swoje czcionki. Poprzednia heurystyka porównywała liczbę tokenów/FontDescriptorz osadzonymi programami czcionek, lecz każda osadzona czcionka wnosi dwa tokeny/FontDescriptor(odwołanie do słownika czcionki oraz obiekt deskryptora), więc każdy plik z osadzonymi czcionkami był błędnie oznaczany. Sprawdzenie zgłasza teraz wyłącznie dokument, który odwołuje się do czcionek, lecz w ogóle nie osadza żadnego programu czcionki, spójnie z odpowiadającą poprawkąValidatePdfUa
Version 1.49.1
Naprawiono (Naprawiono)
- Wyjście PDF/A jest teraz weryfikowane jako zgodne z PDF/A-1b i PDF/A-1a w veraPDF: osadzony strumień profilu ICC OutputIntent sRGB (do którego odwołuje się
/DestOutputProfile) deklaruje teraz wymaganą liczbę składowych/N(3 dla wbudowanego profilu RGB), zgodnie z wymogiem ISO 19005-1 6.2.3.2. Dokumenty wytwarzane przezSaveAsPdfAwcześniej nie przechodziły rygorystycznej weryfikacji PDF/A-1, ponieważ strumień profilu docelowego pomijał/N; wartość ta jest wyprowadzana z nagłówka profilu ICC, więc dostarczony przez wywołującego profil CMYK lub Gray również otrzymuje poprawną liczbę
Version 1.49.0
Naprawiono (Naprawiono)
ValidatePdfUanie zgłasza już fałszywie brakującej identyfikacji XMP w zgodnych, tagowanych plikach PDF — identyfikator PDF/UA (pdfuaid:part),dc:title, daty XMP oraz/IDze zwiastuna są teraz odczytywane z bajtów oryginalnego dokumentu zamiast z ponownie zapisanej kopii, która pomija strumień XMP/Metadata, a w przypadku plików z cross-reference-stream także/IDze zwiastuna- Poprawiono sprawdzanie osadzania czcionek w
ValidatePdfUa, tak aby dokument osadzający wszystkie swoje czcionki nie był już zgłaszany jako mający czcionki nieosadzone; teraz oznaczany jest wyłącznie dokument, który odwołuje się do czcionek, lecz w ogóle nie osadza żadnego programu czcionki ValidatePdfUaakceptuje teraz element strukturyFormula, którego tekst alternatywny jest dostarczany przezActualTextzamiast wpisuAlt(ISO 14289-1 §7.7), spójnie z istniejącą regułą dlaFigure
Version 1.48.0
Dodano (Dodano)
- Programowe zaznaczanie tekstu w
TPdfView:SelectTextRange(według strony i zakresu znaków) orazSetSelection(według jawnych zakresów dla poszczególnych stron) zaznaczają tekst z poziomu kodu — na przykład w celu odczytania i podświetlenia fragmentu; obie metody odświeżają widok i zgłaszająOnSelectionChangeprzy zmianie zaznaczenia.SelectionRangesodczytuje bieżące zaznaczenie jako zakresy znaków dla poszczególnych stron, aSelectionRectangleszwraca jego prostokąty we współrzędnych strony na potrzeby niestandardowego podświetlania lub przewijania do zaznaczenia
Version 1.47.0
Dodano (Dodano)
- Nawigacja po polach formularza na potrzeby głosowego wypełniania formularzy, dostępna zarówno w
TPdf, jak i wTPdfView:FormFieldTabOrder,FocusedFormFieldIndex,FocusFormField,FocusNextFormField,FocusPreviousFormField,ClearFormFieldFocusorazFocusedFormFieldText. Przesuwają one logiczny kursor pola po polach widżetów na stronie w kolejności tabulacji (z zawijaniem na końcach), dzięki czemu czytnik wspomagający może przejść przez formularz, zapowiedzieć każde pole za pośrednictwemFormFieldInfo[Index].AlternateName(podpowiedź /TU) i wypełnić je przezFormField[Index] - Zdarzenie
TPdfView.OnFormFieldFocusChange, zgłaszane przy przesunięciu kursora pola (przekazujące indeks nowego pola lub -1 po wyczyszczeniu)
Version 1.46.0
Dodano (Dodano)
- Strumień treści do asystującego czytania na głos:
TPdf.ReadableContent,TPdf.ReadablePageContent,TPdf.DocumentReadableContentorazTPdfView.ReadableContentzwracają uporządkowaną listę semantycznych elementówTPdfContentFragment, z których każdy niesie tekst do odczytania (rzeczywiste glify alboActualText/Alt dla figur), rodzaj fragmentu (nagłówek wraz z poziomem, akapit, figura, element listy, komórka tabeli, łącze, zwykły tekst), język, numer strony liczony od 1 oraz prostokąty podświetlenia bloku i poszczególnych wierszy. Tagowane pliki PDF są linearyzowane w logicznej kolejności czytania na podstawie drzewa struktury; strony bez tagów wracają do kolejności renderowania, dzięki czemu dowolny dokument można odczytać na głos - Zsynchronizowane podświetlenie czytania w
TPdfView:SetReadingHighlight,ClearReadingHighlightoraz opublikowana właściwośćReadingHighlightColorpodświetlają aktualnie czytany blok, nakładając się na warstwy wyszukiwania i zaznaczenia - Nowe typy publiczne
TPdfContentFragment,TPdfContentFragments,TPdfReadableContent,TPdfContentFragmentKindorazTPdfReadingOrderSource, a także nowa funkcja pomocniczaClassifyStructType
Version 1.45.0
Dodano (Dodano)
ValidatePdfUaprzechodzi teraz również przez aktywne drzewo struktury tagowanej i zgłasza trzy pewne naruszenia treści, których skanowanie na poziomie bajtów nie jest w stanie wykryć: elementFigurebez wpisu Alt ani ActualText (ISO 14289-1, 7.3), elementFormulabez atrybutu Alt (7.7) oraz elementNotepozbawiony unikalnego identyfikatora (7.9). Trzy nowe wartościTPdfUaValidationIssueumożliwiają raportowanie tych przypadków:pvuaiFigureMissingAlt,pvuaiFormulaMissingAltorazpvuaiNoteMissingId. Przejście przez drzewo jest pomijane w dokumentach bez tagów- Nowa publiczna funkcja pomocnicza
ValidatePdfUaStructureElementsstosuje te reguły drzewa struktury do płaskiej listy elementów (takiej jak zwracana przezTPdf.StructureElements), dzięki czemu sprawdzenia można uruchamiać lub testować jednostkowo bez ładowania pełnego dokumentu
Version 1.44.5
Naprawiono (Naprawiono)
- Sprawdzanie osadzania czcionek w
ValidatePdfA(pvaiFontNotEmbedded, ISO 19005-1, 6.3.4) wykrywa teraz również nieosadzone czcionki proste, które nie posiadają wpisu/FontDescriptor— przede wszystkim 14 standardowych czcionek Type 1 (Helvetica, Times, Courier i inne), dla których PDF/A wymaga osadzenia bez żadnych wyjątków. Poprzednio taka czcionka pozostawała niezauważona; sprawdzanie uwzględnia teraz również słowniki czcionek prostych (/Type1,/TrueType,/MMType1) w weryfikacji osadzonych programów czcionek, odzwierciedlając poprawkę PDF/UA wprowadzoną w 1.44.3
Version 1.44.4
Naprawiono (Naprawiono)
ValidatePdfVTodrzuca teraz błędnie uformowane drzewa DPart zgodne z ISO 16612-2 §6.5, w których/DPartsjest płaską tablicą odwołań zamiast wymaganego array of arrays, albo w których leaf DPart powtarza stronę/Startjako/End, mimo że zakres obejmuje tylko jedną stronęValidatePdfVTsprawdza teraz nazwy/NodeNameListjako wartości XML NMTOKEN po rozwinięciu escape#xxw PDF name, więc nieprawidłowe nazwy poziomów hierarchii są zgłaszane przezpvviMissingDPartRoot, zamiast być akceptowane jako użyteczna struktura DPart
Version 1.44.3
Naprawiono (Naprawiono)
- Sprawdzanie osadzania czcionek w
ValidatePdfUa(pvuaiFontNotEmbedded, ISO 14289-1, 7.21.4) wykrywa teraz również nieosadzone czcionki proste, które nie posiadają wpisu/FontDescriptor— przede wszystkim 14 standardowych czcionek Type 1 (Helvetica, Times, Courier i inne), dla których PDF/UA nie przewiduje żadnego zwolnienia z obowiązku osadzania. Poprzednio taka czcionka pozostawała niezauważona i dokument z jej użyciem mógł być zgłaszany jako zgodny; sprawdzanie uwzględnia teraz również słowniki czcionek prostych (/Type1,/TrueType,/MMType1) w weryfikacji osadzonych programów czcionek
Version 1.44.2
Naprawiono (Naprawiono)
ValidatePdfVTpozostawia teraz obecny, ale nierozpoznany markerpdfvtid:GTS_PDFVTVersionjakopvcUnknown, zamiast obniżać go dopvcNone. Dzięki temu nieprawidłowe ciągi na poziomie pliku, takie jakPDF/VT-2s, pozostają odróżnialne od dokumentów bez żadnego markera PDF/VT; PDF/VT-2s jest identyfikowany przez MIME stream header w ISO 16612-2 Annex A, a nie przez marker XMP pliku PDF- Sprawdzanie
/DPartRootdokładniej waliduje teraz tree semantics z ISO 16612-2 §6.5:/DPartRootNodei/NodeNameListmuszą opisywać rzeczywistą głębokość DPart, DPart parent links muszą tworzyć drzewo,/Starti/DPartswzajemnie się wykluczają, a/DPartkażdej strony musi wskazywać pokrywający ją leaf DPart w tej samej kolejności depth-first co page tree
Version 1.44.1
Naprawiono (Naprawiono)
SaveAsPdfVTzapisuje teraz minimalną Document Part Hierarchy według ISO 16612-2 §6.5, gdy źródłowy PDF nie ma użytecznego/DPartRoot. Wygenerowane drzewo łączy każdą stronę przez/DPart, zachowuje istniejącą poprawną hierarchię i pozostawia bogatsze metadane odbiorcy/DPM wywołującemu przepływowi pracyValidatePdfVTsprawdza teraz użyteczną strukturę DPart, odczytuje wartości XMP PDF/VT zarówno z atrybutów RDF, jak i z tekstu elementów, oraz wymusza dokładne parowanie PDF/VT z bazą PDF/X: PDF/VT-1 wymaga PDF/X-4, a PDF/VT-2 wymaga PDF/X-4p, PDF/X-5g lub PDF/X-5pgTPdfVTSaveOptions.Conformance = pvc2nie zapisuje już niepoprawnych markerów jednoplikowego PDF/VT-2. Jednoplikowy writer normalizuje wyjście do PDF/VT-1, ponieważ PDF/VT-2 wymaga semantyki zestawu plików
Version 1.44.0
Dodano (Dodano)
ValidatePdfUazgłasza teraz również naruszenia PDF/UA na poziomie treści, które można zweryfikować bajtowo, oprócz znaczników formatu pliku: program czcionki, który nie jest osadzony (ISO 14289-1, 7.21.4), czcionka pozbawiona mapy/ToUnicodeCMap, gdy nie ma zwolnienia dla prostego kodowania czcionki (7.21.7), oraz dokument zawierający adnotacje, ale niedeklarujący kolejności tabulacji strony/Tabs /S(7.18.3)- Trzy nowe wartości
TPdfUaValidationIssue—pvuaiFontNotEmbedded,pvuaiFontMissingToUnicodeipvuaiMissingTabsOrder— są zwracane przezValidatePdfUaoraz w raporcie kontrolnym. Są to przybliżone heurystyki przeznaczone jako wskazówki kontrolne, a nie pełna weryfikacja zgodności z ISO 14289-1
Version 1.43.1
Naprawiono (Naprawiono)
SaveAsPdfUawymusza teraz obowiązkowe wpisy katalogu ISO 14289-1, 7.1:/ViewerPreferences/DisplayDocTitle trueoraz/MarkInfo/Marked true/Suspects false— nawet gdy dokument źródłowy zawiera już te słowniki z brakującymi lub sprzecznymi wartościami. Poprzednio znaczniki były wstrzykiwane wyłącznie wtedy, gdy słowniki były całkowicie nieobecne; w rezultacie dokument źródłowy zawierający na przykład/ViewerPreferencesbezDisplayDocTitlelub/MarkInfoz/Marked falsebył zapisywany do pliku niezgodnego z normą- Istniejące klucze w uprzednio zdefiniowanym słowniku
/ViewerPreferenceslub/MarkInfosą zachowywane, a słownik dostarczony jako odwołanie pośrednie jest rozwiązywany przed zastosowaniem obowiązkowych kluczy
Version 1.43.0
Dodano (Dodano)
ValidatePdfAstosuje teraz reguły PDF/A-2 / PDF/A-3 dla plików osadzonych i powiązanych oraz dla tekstu na poziomie U. Pliki osadzone są nadal odrzucane dla PDF/A-1; w przypadku PDF/A-3 plik osadzony, któremu brakuje wymaganego klucza/AFRelationship(ISO 19005-3 Annex E), jest oznaczany, natomiast załączniki PDF/A-2 są dozwolone (ich własna zgodność nie jest weryfikowana rekurencyjnie). Nowy problempvaiUnicodeMappingMissingzgłasza dokument PDF/A-2u lub PDF/A-3u, którego czcionki nie zawierają odwzorowania/ToUnicode(ISO 19005-2 6.2.11.7). Przezroczystość i treść opcjonalna są nadal oznaczane wyłącznie dla PDF/A-1
Version 1.42.0
Dodano (Dodano)
- PDF/A-2 (ISO 19005-2) i PDF/A-3 (ISO 19005-3) są teraz obsługiwane na wszystkich trzech poziomach zgodności — a, b oraz u — przez
SaveAsPdfA,ValidatePdfAi właściwośćPdfAConformance. WyliczenieTPdfAConformancezyskujepac2a,pac2u,pac3aorazpac3u(PDF/A-1 nie ma poziomu u). Podczas zapisu zapisywane są odpowiedniepdfaid:part(2 lub 3) ipdfaid:conformance(A, B lub U), z zachowaniem podtypu OutputIntentGTS_PDFA1, który ISO 19005-2 utrzymuje ze względów zgodności. Żądanie poziomu A jest nadal obniżane do odpowiedniego poziomu B (dla dowolnej części), gdy dokumentowi brakuje struktury tagowanej wymaganej przez ten poziom
Version 1.41.0
Dodano (Dodano)
ValidatePdfAwykrywa teraz, oprócz zgłaszanych już znaczników strukturalnych, także naruszenia PDF/A na poziomie treści, których nie da się naprawić przez wstrzyknięcie znaczników: JavaScript i inne zabronione akcje, additional actions (/AA), pliki osadzone,LZWDecode, przezroczystość (soft masks i transparency groups), treść opcjonalną (/OCProperties), zabronione podtypy adnotacji (FileAttachment, Sound, Movie, 3D, Screen), AcroForm/NeedAppearances trueoraz/XFA, czcionki, których deskryptory nie zawierają osadzonego programu czcionki, a także deklarację Level A bez struktury tagowanej wymaganej przez ISO 19005-1 6.8. Sprawdzanie przezroczystości, treści opcjonalnej i plików osadzonych dotyczy wyłącznie PDF/A-1 (funkcje te są dozwolone w PDF/A-2 i PDF/A-3). Nowe wartościTPdfAValidationIssueuwidaczniają każdy przypadek; istniejące wartości pozostają bez zmian
Version 1.40.3
Naprawiono (Naprawiono)
- Funkcja
SaveAsPdfAusuwa teraz wszelkie szyfrowanie dokumentu źródłowego przed wygenerowaniem wyjścia PDF/A. ISO 19005-1 6.1.3 zabrania stosowania klucza/Encryptw zwiastunie (trailer), jednak ścieżka zapisu zachowywała wcześniej moduł obsługi zabezpieczeń dokumentu źródłowego, przez co zapis zaszyfrowanego dokumentu jako PDF/A dawał plik zaszyfrowany i niezgodny ze specyfikacją. Podczas zapisu PDF/A dokument jest teraz najpierw odszyfrowywany. Nie ma to wpływu na dokumenty niezaszyfrowane
Version 1.40.2
Naprawiono (Naprawiono)
- Uniemożliwiono funkcji
SaveAsPdfAwystawianie fałszywej deklaracji zgodności z PDF/A Level A. Gdy żądany jest Level A (pac1a), ale w dokumencie źródłowym brakuje znaczników struktury tagowanej wymaganych przez ISO 19005-1 6.8 — elementu/StructTreeRootw katalogu oraz słownika/MarkInfoz/Marked true— zapisany plik jest teraz oznaczany jako odpowiadający mu Level B (pdfaid:conformance=B), zamiast deklarować Level A. Nie ma to wpływu na czysto wizualne wyjście PDF/A-1b
Version 1.40.1
Naprawiono (Naprawiono)
- Zaostrzono walidację zgodności z wersją PDF, tak aby akcja
SetOCGState(set-optional-content-group-state) była rozpoznawana jako funkcja PDF 1.5. Zapis do dokumentu docelowego w wersji PDF 1.2, 1.3 lub 1.4 zawierającego akcjęSetOCGStatejest teraz odrzucany zgodnie z ISO 32000-1 (Table 198); wcześniej taka akcja mogła przedostać się do wyniku w niższej wersji. Odrębna, przestarzała akcja PDF 1.2SetStatejest nadal akceptowana od wersji PDF 1.2 wzwyż
Version 1.40.0
Dodano (Dodano)
- Powiązano API
FPDFPageObj_AddExistingMark(), które dołącza istniejący znacznik treści do obiektu strony. Gdy kolejne obiekty strony współdzielą ten sam znacznik, zapisany plik PDF łączy je w jeden znacznik obejmujący je wszystkie; obiekty niesąsiadujące otrzymują osobne kopie - Powiązano API
FPDFTextObj_SetFontSize()do zmiany rozmiaru (w punktach) istniejącego obiektu tekstowego, uzupełniając istniejące powiązanieFPDFTextObj_GetFontSize()
Zmieniono (Zmieniono)
- Zaktualizowano dołączone biblioteki DLL środowiska uruchomieniowego PDFium (Win32 i Win64, kompilacje standardowe i V8) do migawki PDFium z 2026-06-02
Version 1.39.53
Zmieniono (Zmieniono)
- Przykłady Delphi
PDFViewer,SplitViewiMultiPageViewerotwierają teraz dokumenty domyślnie w trybieZoom to Page - Początkowe renderowanie dopasowuje teraz całą stronę do obszaru przeglądarki, zanim użytkownik wybierze ręczny poziom powiększenia
- Zaktualizowano
TPdf.AboutInfo, metadane pakietu Lazarus i metadane wersji instalatora, aby zgłaszały 1.39.53
Version 1.39.52
Zmieniono (Zmieniono)
- Rozszerzono
Demo\Lazarus\CreatePDF, dzięki czemu przykładowy projekt wprowadzający generuje teraz dwustronicowy PDF z vector paths, table content, embedded image, text annotation, rotated text oraz czytelniejszym document-building walkthrough - Dodano dopracowane strony
README.htmldla każdego folderu demo Delphi, C++Builder i Lazarus, zastępując pozostały tekstowy README demo przewodnikiem czytelnym w przeglądarce - Zaktualizowano
TPdf.AboutInfo, metadane pakietu Lazarus i metadane wersji instalatora, aby zgłaszały 1.39.52
Version 1.39.51
- Rozbudowano podsumowania batch w
Demo\Delphi\PreflightReportClio sumy statusów Pass, Action required i Review dla wszystkich wybranych standardów - Wiersze per plik zawierają teraz liczniki action required i review w podsumowaniach TXT / HTML / JSON / CSV, dzięki czemu artefakty CI łatwiej przejrzeć bez otwierania każdego wygenerowanego raportu
- Zaktualizowano
TPdf.AboutInfo, metadane pakietu Lazarus i metadane wersji instalatora, aby zgłaszały 1.39.51
Version 1.39.50
- Rozbudowano tryb batch na katalogi w
Demo\Delphi\PreflightReportClitak, abybatchdir=folderzbierał znalezione ścieżki PDF, sortował je, a raporty generował w powtarzalnej kolejności - Rekurencyjne skanowanie katalogów daje teraz powtarzalną kolejność raportów i wierszy podsumowania, a przetwarzanie z jawnym
batch=list.txtnadal zachowuje kolejność z pliku listy - Zaktualizowano
TPdf.AboutInfo, metadane pakietu Lazarus i metadane wersji instalatora, aby zgłaszały 1.39.50
Version 1.39.49
- Rozbudowano podsumowania batch w
Demo\Delphi\PreflightReportClio zapis ustawień uruchomienia: rodzaj i ścieżkę źródła, stan rekurencji, katalog wyjściowy, format raportu, wybrane standardy oraz trybfailon= - Podsumowania JSON zawierają teraz obiekt
run, wersje TXT i HTML mają sekcję z ustawieniami uruchomienia, a wiersze CSV powtarzają te same kolumny audytu — gotowe do arkusza kalkulacyjnego i pipeline'ów CI - Zaktualizowano
TPdf.AboutInfo, metadane pakietu Lazarus i metadane wersji instalatora, aby zgłaszały 1.39.49
Version 1.39.48
- Poprawiono nazewnictwo plików wyjściowych batch w
Demo\Delphi\PreflightReportClitak, aby duplikaty nazw plików wejściowych ze wspólnymoutdir=nie nadpisywały już nawzajem wygenerowanych raportów - Przebiegi batch dopisują teraz sufiksy
-2,-3i kolejne, gdy wygenerowana ścieżka raportu została już przypisana w tym samym przebiegu, a podsumowania odnotowują ostateczną ścieżkę bezpieczną pod względem kolizji - Zaktualizowano
TPdf.AboutInfo, metadane pakietu Lazarus i metadane wersji instalatora, aby zgłaszały 1.39.48
Version 1.39.47
- Rozbudowano podsumowania batch w
Demo\Delphi\PreflightReportCli: wyjścia TXT i JSON zawierają teraz sumy zagregowane — wszystkie pliki, przetworzone, nieudane, problemy oraz trafieniafailon= - Podsumowania CSV pozostają czystą tabelą wierszy dla dotychczasowych konsumentów, a podsumowania HTML nadal pokazują te same metryki zagregowane w nagłówku pulpitu
- Zaktualizowano
TPdf.AboutInfo, metadane pakietu Lazarus i metadane wersji instalatora, aby zgłaszały 1.39.47
Version 1.39.46
- Rozbudowano
Demo\Delphi\PreflightReportCliosummary=batch.html/.htm, dzięki czemu przebiegi batch mogą zapisywać dashboard czytelny dla przeglądarki obok manifestów TXT / CSV / JSON - Podsumowania HTML pokazują metryki: łącznie, przetworzone, nieudane, problemy i trafienia
failon=, a następnie listują każde wejście wraz z linkami do raportów, statusem, licznikami i treścią błędu - Zaktualizowano
TPdf.AboutInfo, metadane pakietu Lazarus i metadane wersji instalatora, aby zgłaszały 1.39.46
Version 1.39.45
- Rozbudowano
Demo\Delphi\PreflightReportCliobatchdir=folderirecursive, więc skrypty mogą skanować foldery z plikami PDF bezpośrednio, bez wcześniejszego tworzenia pliku listy - Tryb wsadowy katalogu używa ponownie zachowania
outdir=,summary=,standards=ifailon=z trybu wsadowego opartego na liście, podczas gdy skanowanie bez rekurencji obejmuje tylko wybrany folder, arecursivedołącza podfoldery - Zaktualizowano
TPdf.AboutInfo, metadane pakietu Lazarus i metadane wersji instalatora, aby zgłaszały 1.39.45
Version 1.39.44
- Rozbudowano
Demo\Delphi\PreflightReportCliosummary=batch.csv|json|txt, dzięki czemu przebiegi batch mogą zapisywać manifest czytelny maszynowo obok raportów pojedynczych plików - Podsumowania batch obejmują każdą ścieżkę wejściową, ścieżkę raportu, status, liczbę standardów, liczbę zaliczeń, liczbę problemów, stan trafienia
failon=oraz treść błędu — do wykorzystania w zadaniach CI i zewnętrznych skryptach - Zaktualizowano
TPdf.AboutInfo, metadane pakietu Lazarus i metadane wersji instalatora, aby zgłaszały 1.39.44
Version 1.39.43
- Rozbudowano
Demo\Delphi\PreflightReportCliobatch=list.txtioutdir=reports, więc skrypty mogą wygenerować raporty preflight dla listy plików PDF w jednym przebiegu - Tryb batch pomija puste wiersze i komentarze zaczynające się od
#, buduje nazwę raportu.preflight.<ext>na podstawie wejściowego PDF, kontynuuje pracę po błędach pojedynczych plików, a przed zakończeniem podsumowuje pliki przetworzone i te, które się nie powiodły - Zaktualizowano
TPdf.AboutInfo, metadane pakietu Lazarus i metadane wersji instalatora, aby zgłaszały 1.39.43
Version 1.39.42
- Rozbudowano
Demo\Delphi\PreflightReportCliofailon=none|issues|action|review, dzięki czemu zadania CI mogą zamieniać wygenerowane wyniki preflight w deterministyczne kody wyjścia - CLI zwraca teraz kod wyjścia 2, gdy po wygenerowaniu pliku raportu i opcjonalnego PDF z dołączonym raportem zadziała wybrana reguła
failon=, a błędy wykonania nadal kończą się kodem wyjścia 1 - Zaktualizowano
TPdf.AboutInfo, metadane pakietu Lazarus i metadane wersji instalatora, aby zgłaszały 1.39.42
Version 1.39.41
- Rozbudowano
Demo\Delphi\PreflightReportClioattach=output.pdf, dzięki czemu wygenerowany raport preflight można osadzić jako załącznik na poziomie dokumentu w nowej kopii PDF - CLI pozostawia wygenerowany plik raportu TXT / HTML / Markdown / JSON / CSV na dysku i odmawia załączania go z powrotem do pierwotnej ścieżki wejściowego PDF, co zmniejsza ryzyko przypadkowego nadpisania
- Zaktualizowano
TPdf.AboutInfo, metadane pakietu Lazarus i metadane wersji instalatora, aby zgłaszały 1.39.41
Version 1.39.40
- Dodano
Demo\Delphi\PreflightReportCli— konsolowe narzędzie dla Delphi do skryptowego generowaniaFPdfPreflightReportbez otwierania przeglądarki - CLI obsługuje tworzenie przykładowego pliku bez argumentów oraz argumenty wejścia / wyjścia, opcjonalne hasło, formaty wyjścia
text/html/md/json/csvoraz filtrowaniestandards=dla PDF/A, PDF/UA, PDF/E, PDF/X, PDF/R i PDF/VT - Zaktualizowano
TPdf.AboutInfo, metadane pakietu Lazarus i metadane wersji instalatora, aby zgłaszały 1.39.40
Version 1.39.39
- Rozbudowano
FPdfPreflightReportoTPdfPreflightReport.ToMarkdowniSaveMarkdownToFile, dzięki czemu raporty preflight można eksportować do formatu Markdown przyjaznego issue trackerom - Zaktualizowano przykłady
PreflightReportdla Delphi, C++Builder i Lazarus o przełączanie podglądu Markdown oraz akcje Save MD, obok dotychczasowego przepływu TXT / HTML / JSON / CSV - Zaktualizowano
TPdf.AboutInfo, metadane pakietu Lazarus i metadane wersji instalatora, aby zgłaszały 1.39.39
Version 1.39.38
- Rozbudowano przykłady
SecurityAuditdla Delphi, C++Builder i Lazarus o eksport raportu audytu do JSON, obok dotychczasowego przepływu zapisu i kopiowania TXT - Raport JSON zawiera pola
format,generatedAt,summary,findingCountoraz strukturyzowane rekordyfindingsz polami severity, area i detail - Zaktualizowano
TPdf.AboutInfo, metadane pakietu Lazarus i metadane wersji instalatora, aby zgłaszały 1.39.38
Version 1.39.37
- Rozbudowano
FPdfPreflightReportoTPdfPreflightReport.ToCsviSaveCsvToFile, dzięki czemu raporty preflight można eksportować do CSV wygodnego przy pracy w arkuszu kalkulacyjnym - Zaktualizowano przykłady
PreflightReportdla Delphi, C++Builder i Lazarus o przełączanie podglądu CSV oraz akcje Save CSV, obok dotychczasowego przepływu TXT / HTML / JSON - Zaktualizowano
TPdf.AboutInfo, metadane pakietu Lazarus i metadane wersji instalatora, aby zgłaszały 1.39.37
Version 1.39.36
- Rozszerzono
FPdfPreflightReportoTPdfPreflightReport.IssueCategoryCountsoraz wielokrotnego użytku typyTPdfPreflightIssueCategoryCountiTPdfPreflightIssueCategoryCountsdo agregowania problemów na poziomie markerów według kategorii - Zaktualizowano
TPdfPreflightReport.ToText,ToHtmliToJsontak, aby wynik PreflightReport zawierał — obok wierszy per standard i szczegółowych zaleceń — podsumowania liczby problemów w podziale na kategorie - Zaktualizowano
TPdf.AboutInfo, metadane pakietu Lazarus i metadane wersji instalatora, aby zgłaszały 1.39.36
Version 1.39.35
- Rozbudowany przykład
PrintDialogprzemianowano naPrintPreferencesw Delphi, C++Builder i Lazarus, tak aby nazwa demo odpowiadała jego przepływowi pracy: preferencje wydruku autora PDF, wydruk N-up, filtrowanie nieparzystych / parzystych, skala szarości, obramowanie komórek i mapowanie dupleksu - Zaktualizowano
TPdf.AboutInfo, metadane pakietu Lazarus i metadane wersji instalatora, aby zgłaszały 1.39.35
Version 1.39.34
- Rozbudowano
Demo\Delphi\PrintPDFo ładowanie PDF metodą drag-and-drop oraz udokumentowano dotychczasowy przepływDemo\CBuilder\PrintPDFobok przykładów PrintPDF dla Delphi i Lazarus - Zaktualizowano
TPdf.AboutInfo, metadane pakietu Lazarus i metadane wersji instalatora, aby zgłaszały 1.39.34
Version 1.39.33
- Dodano
Demo\CBuilder\SplitView, co dopełnia macierz przykładów SplitView dla Delphi, C++Builder i Lazarus - Zaktualizowano
TPdf.AboutInfo, metadane pakietu Lazarus i metadane wersji instalatora, aby zgłaszały 1.39.33
Version 1.39.32
- Dodano
Demo\Lazarus\SplitView, wprowadzając do Lazarus równoległe porównywanie plików PDF z układami dwu- lub trzypanelowymi, nawigacją po aktywnym widoku, zsynchronizowanymi poleceniami, presetami zoomu i rotacją - Zaktualizowano
TPdf.AboutInfo, metadane pakietu Lazarus i metadane wersji instalatora, aby zgłaszały 1.39.32
Version 1.39.31
- Dodano
Demo\Lazarus\PrintPDF, przenosząc do Lazarus standardowy przepływ drukowania PDF z nawigacją po podglądzie, zakresami stron, liczbą kopii, trybem collate, paskiem postępu i możliwością anulowania - Zaktualizowano
TPdf.AboutInfo, metadane pakietu Lazarus i metadane wersji instalatora, aby zgłaszały 1.39.31
Version 1.39.30
- Dodano
Demo\Lazarus\FontProperties, co dopełnia macierz przykładów FontProperties dla Delphi, C++Builder i Lazarus - Zaktualizowano
TPdf.AboutInfo, metadane pakietu Lazarus i metadane wersji instalatora, aby zgłaszały 1.39.30
Version 1.39.29
- Dodano
Demo\CBuilder\FontProperties, wprowadzając do C++Builder inspekcję metadanych znaków z indeksami oraz czcionek, obok przykładu dla Delphi - Zaktualizowano
TPdf.AboutInfo, metadane pakietu Lazarus i metadane wersji instalatora, aby zgłaszały 1.39.29
Version 1.39.28
- Dodano
Demo\Delphi\ExtractTextPages, co dopełnia macierz przykładów wyodrębniania tekstu dla poszczególnych stron w Delphi, C++Builder i Lazarus - Zaktualizowano
TPdf.AboutInfo, metadane pakietu Lazarus i metadane wersji instalatora, aby zgłaszały 1.39.28
Version 1.39.27
- Dodano
Demo\Lazarus\PrintDialog, co dopełnia macierz przykładów PrintDialog dla Delphi, C++Builder i Lazarus - Zaktualizowano
TPdf.AboutInfo, metadane pakietu Lazarus i metadane wersji instalatora, aby zgłaszały 1.39.27
Version 1.39.26
- Dodano
Demo\CBuilder\PrintDialog, wprowadzając do C++Builder przepływ wydruku N-up i preferencji wydruku autora PDF, obok przykładu dla Delphi - Zaktualizowano
TPdf.AboutInfo, metadane pakietu Lazarus i metadane wersji instalatora, aby zgłaszały 1.39.26
Version 1.39.25
- Dodano
Demo\CBuilder\ViewerInteractionLab, co dopełnia macierz przykładów ViewerInteractionLab dla Delphi, C++Builder i Lazarus - Zaktualizowano przepływ budowania biblioteki oraz wyjścia pakietu C++Builder dla Win64, aby metody interakcji z przeglądarką w
TPdfViewpoprawnie się linkowały w demo Win64 - Zaktualizowano
TPdf.AboutInfo, metadane pakietu Lazarus i metadane wersji instalatora, aby zgłaszały 1.39.25
Version 1.39.24
- Dodano
Demo\Lazarus\ViewerInteractionLab, wprowadzając do Lazarus przepływ interakcji z przeglądarką, obok przykładu dla Delphi - Zaktualizowano
TPdf.AboutInfo, metadane pakietu Lazarus i metadane wersji instalatora, aby zgłaszały 1.39.24
Version 1.39.23
- Dodano
Demo\Lazarus\SearchAndSelect, co dopełnia macierz przykładów SearchAndSelect dla Delphi, C++Builder i Lazarus - Zaktualizowano
TPdf.AboutInfo, metadane pakietu Lazarus i metadane wersji instalatora, aby zgłaszały 1.39.23
Version 1.39.22
- Dodano
Demo\CBuilder\ContentExtractionLabiDemo\Lazarus\ContentExtractionLab, dzięki czemu wielokategoriowy przepływ ekstrakcji treści działa we wszystkich wspieranych IDE demo - Zaktualizowano
TPdf.AboutInfo, metadane pakietu Lazarus i metadane wersji instalatora, aby zgłaszały 1.39.22
Version 1.39.21
- Rozbudowano
Demo\Delphi\PreflightReport,Demo\Lazarus\PreflightReportiDemo\CBuilder\PreflightReporto selektor formatu podglądu, aby użytkownicy mogli przejrzeć wynik tekstowy lub JSON przed zapisem raportów - Zaktualizowano
TPdf.AboutInfo, metadane pakietu Lazarus i metadane wersji instalatora, aby zgłaszały 1.39.21
Version 1.39.20
- Dodano eksport JSON w
FPdfPreflightReportpoprzezTPdfPreflightReport.ToJsoniSaveJsonToFile: daje to podsumowania czytelne maszynowo, status / priorytet per standard, kolejne akcje i szczegóły problemów - Zaktualizowano
Demo\Delphi\PreflightReport,Demo\Lazarus\PreflightReportiDemo\CBuilder\PreflightReporto akcje Save JSON, obok eksportu TXT / HTML - Zaktualizowano
TPdf.AboutInfo, metadane pakietu Lazarus i metadane wersji instalatora, aby zgłaszały 1.39.20
Version 1.39.19
- Rozbudowano
FPdfPreflightReportoTPdfPreflightStatus, kategorie problemów, priorytety per standard oraz wskazówki kolejnych akcji w raportach TXT / HTML - Zaktualizowano
Demo\Delphi\PreflightReport,Demo\Lazarus\PreflightReportiDemo\CBuilder\PreflightReport, aby siatka podsumowania pokazywała status, priorytet, liczbę problemów i kolejną akcję - Zaktualizowano
TPdf.AboutInfo, metadane pakietu Lazarus i metadane wersji instalatora, aby zgłaszały 1.39.19
Version 1.39.18
- Dodano
Demo\Lazarus\SecurityAudit, dopełniając macierz demo Delphi, C++Builder i Lazarus dla audytu powierzchni ryzyka PDF w trybie tylko do odczytu - Przykład Lazarus wylicza uprawnienia, załączniki, akcje JavaScript, adnotacje linków URI / Launch, linki webowe, podpisy, stan XFA, dostępność helperów V8 / XFA oraz callbacki nieobsługiwanych funkcji, po czym zapisuje lub kopiuje listę ustaleń jako raport TXT
- Zaktualizowano
TPdf.AboutInfo, metadane pakietu Lazarus i metadane wersji instalatora, aby zgłaszały 1.39.18
Version 1.39.17
- Dodano
Demo\CBuilder\SecurityAudit, wprowadzając do C++Builder audyt powierzchni ryzyka PDF w trybie tylko do odczytu, obok istniejącego przykładu dla Delphi - Przykład C++Builder wylicza uprawnienia, załączniki, akcje JavaScript, adnotacje linków URI / Launch, linki webowe, podpisy, stan XFA, dostępność helperów V8 / XFA oraz callbacki nieobsługiwanych funkcji, po czym zapisuje lub kopiuje listę ustaleń jako raport TXT
- Zaktualizowano
TPdf.AboutInfo, metadane pakietu Lazarus i metadane wersji instalatora, aby zgłaszały 1.39.17
Version 1.39.16
- Dodano
Demo\CBuilder\SearchAndSelect, wprowadzając do C++Builder samodzielny przepływ przeglądarki SearchAndSelect, obok istniejącego przykładu dla Delphi - Przykład C++Builder tworzy lub otwiera pliki PDF, listuje trafienia ze wszystkich stron wraz z podglądem strony / indeksu znaku, obsługuje nawigację Previous / Next oraz dwuklik, a trafienia na bieżącej stronie wyróżnia przez
HighlightSearchText - Udostępnia też opcje
AllowUserTextSelection,SelectedText,SelectAll,CopySelectionToClipboard,ClearSelection,OnSelectionChangeoraz spreadDisplayMode; metadane wersji zgłaszają teraz 1.39.16
Version 1.39.15
- Dodano
Demo\CBuilder\WatermarkStamp, dopełniając macierz demo Delphi, Lazarus i C++Builder dla wielokrotnego użytku przepływów znaków wodnych i pieczątek opartych na Form XObject - Przykład C++Builder tworzy PDF docelowy i PDF z pieczątką, ponownie wykorzystuje stronę pieczątki przez
CreateXObjectFromPage, nakłada transformacjeTPdfMatrixi zapisuje wyśrodkowane znaki wodne, pieczątki narożne oraz etykiety numerów stron - Zaktualizowano
TPdf.AboutInfo, metadane pakietu Lazarus i metadane wersji instalatora, aby zgłaszały 1.39.15
Version 1.39.14
- Dodano
Demo\Lazarus\WatermarkStamp, wprowadzając do Lazarus wielokrotnego użytku przepływ znaków wodnych i pieczątek oparty na Form XObject - Przykład Lazarus tworzy PDF docelowy i PDF z pieczątką, ponownie wykorzystuje stronę pieczątki przez
CreateXObjectFromPage, nakłada transformacjeTPdfMatrixi zapisuje wyśrodkowane znaki wodne, pieczątki narożne oraz etykiety numerów stron - Zaktualizowano
TPdf.AboutInfo, metadane pakietu Lazarus i metadane wersji instalatora, aby zgłaszały 1.39.14
Version 1.39.13
- Dodano
Demo\CBuilder\PreflightReport, dopełniając macierz demo Delphi, Lazarus i C++Builder dla wielokrotnego użytku przepływuFPdfPreflightReport - Przykład C++Builder używa
FPdfPreflightReport.hppdo generowania podsumowań standardów, podglądów raportu TXT, plików raportów TXT / HTML oraz zachowania Open Last Report - Zaktualizowano
TPdf.AboutInfo, metadane pakietu Lazarus i metadane wersji instalatora, aby zgłaszały 1.39.13
Version 1.39.12
- Dodano
Demo\Lazarus\PreflightReport, wprowadzając do Lazarus przepływ raportów preflight dla PDF/A, PDF/UA, PDF/E, PDF/X, PDF/R i PDF/VT - Przykład Lazarus potrafi otworzyć lub utworzyć PDF, wybrać standardy docelowe, podejrzeć wiersze podsumowania i wynik raportu TXT, zapisać raporty TXT / HTML oraz otworzyć ostatnio zapisany raport
- Zaktualizowano
TPdf.AboutInfo, metadane pakietu Lazarus i metadane wersji instalatora, aby zgłaszały 1.39.12
Version 1.39.11
- Rozbudowano
Demo\Delphi\SearchAndSelecto listę wyników wyszukiwania ze wszystkich stron, rejestrującą numer strony, indeks znaku i tekst podglądu - Dodano nawigację Previous / Next po trafieniach oraz skok do wyniku po dwukliku, zachowując dotychczasowe zachowanie
HighlightSearchTextna bieżącej stronie - Zaktualizowano
TPdf.AboutInfo, metadane pakietu Lazarus i metadane wersji instalatora, aby zgłaszały 1.39.11
Version 1.39.10
- Rozbudowano
Demo\Delphi\SecurityAudito akcje Save Report i Copy Report, które eksportują bieżące podsumowanie i wiersze ustaleń jako raport audytu TXT - Demo czyści teraz stan eksportu raportu przy resecie panelu audytu, dzięki czemu skopiowane i zapisane raporty pozostają zgodne z widocznymi ustaleniami
- Zaktualizowano
TPdf.AboutInfo, metadane pakietu Lazarus i metadane wersji instalatora, aby zgłaszały 1.39.10
Version 1.39.9
- Rozbudowano
Demo\Delphi\ContentExtractionLabo zapis źródłowego PDF, kopiowanie raportu do schowka oraz akcje wyboru kategorii: wszystkie / żadna - Demo unieważnia teraz bieżący raport po zmianie zaznaczonych kategorii, więc eksporty TXT / JSON odzwierciedlają widoczny zakres ekstrakcji
- Zaktualizowano
TPdf.AboutInfo, metadane pakietu Lazarus i metadane wersji instalatora, aby zgłaszały 1.39.9
Version 1.39.8
- Dodano
Demo\Delphi\ContentExtractionLab— zunifikowany przykład przepływu ekstrakcji treści obejmujący metadane dokumentu, tekst stron, obiekty stron, obrazy, załączniki, linki, adnotacje, zakładki oraz metryki czcionek / znaków - Przykład potrafi otworzyć istniejący PDF albo utworzyć syntetyczny PDF z treścią tekstową, obrazem, załącznikiem i adnotacjami, a następnie wygenerować wiersze podsumowania i szczegółowe raporty TXT / JSON
- Zaktualizowano
TPdf.AboutInfo, metadane pakietu Lazarus i metadane wersji instalatora, aby zgłaszały 1.39.8
Version 1.39.7
- Dodano
Lib\FPdfPreflightReport.pas, pomocniczy moduł raportowy wielokrotnego użytku, który opakowujeValidatePdfA,ValidatePdfUa,ValidatePdfE,ValidatePdfX,ValidatePdfRiValidatePdfVTw jeden obiektTPdfPreflightReport - Dodano
Demo\Delphi\PreflightReport— przykład przepływu pracy, który otwiera lub tworzy PDF, wybiera docelowe standardy, pokazuje podgląd wierszy podsumowania i zaleceń dotyczących problemów, a następnie zapisuje raporty TXT lub HTML - Wygenerowane raporty wprost opisują wbudowaną granicę walidacji na poziomie znaczników, dzięki czemu aplikacje mogą w razie potrzeby łączyć je z dedykowanymi narzędziami preflight działającymi na poziomie treści
- Zaktualizowano
TPdf.AboutInfo, metadane pakietu Lazarus, listy projektów pakietów i metadane wersji instalatora, aby zgłaszały 1.39.7
Version 1.39.6
- Dodano
Demo\Delphi\SearchAndSelect— skoncentrowany przykład przepływu przeglądarki obejmujący wyróżnianie wyników wyszukiwania, zaznaczanie tekstu, podgląd zaznaczonego fragmentu, kopiowanie, czyszczenie oraz tryby widoku dwustronicowego (spread) - Przykład demonstruje
HighlightSearchText, opcje wyszukiwania z rozróżnianiem wielkości liter i całych słów,AllowUserTextSelection,SelectedText,SelectAll,CopySelectionToClipboardorazClearSelectionbez dodawania nowego API biblioteki - Zaktualizowano
TPdf.AboutInfo, metadane pakietu Lazarus i metadane wersji instalatora, aby zgłaszały 1.39.6
Version 1.39.5
- Rozbudowano
Demo\Delphi\ViewerInteractionLabdo przykładu UX przeglądarki w stylu SearchAndSelect, zHighlightSearchText, opcjami rozróżniania wielkości liter i całych słów, podglądem zaznaczonego tekstu oraz istniejącymi kontrolkami zaznaczenia / schowka - Rozszerzono
Demo\Delphi\PrintDialog, aby analizował preferencje drukowania autora PDF:PrintCopies,PrintPageRanges,PrintScaling,PrintPaperHandlingoraz widoczne mapowanie dupleksu przezSetPdfPrintPaperHandlingDevMode - Dodano
Demo\Delphi\SecurityAudit— przykładowy audyt powierzchni ryzyka w trybie tylko do odczytu, listujący uprawnienia, załączniki, JavaScript dokumentu, linki URI / Launch, linki webowe, podpisy, stan XFA oraz dostępność helperów V8 / XFA - Zaktualizowano
TPdf.AboutInfo, metadane pakietu Lazarus i metadane wersji instalatora, aby zgłaszały 1.39.5
Version 1.39.4
- Dodano
Demo\CBuilder\ImageToPDFiDemo\Lazarus\ImageToPDF, co dopełnia macierz przykładów ImageToPDF dla Delphi, C++Builder i Lazarus - Nowe przykłady demonstrują wybór wielu obrazów, podgląd zaznaczonego obrazu, po jednej stronie PDF na obraz, rozmiary stron A4 w orientacji pionowej / poziomej, skalowanie obrazu do środka, postęp per obraz oraz otwieranie wygenerowanego PDF po zapisaniu
- Zaktualizowano
TPdf.AboutInfo, metadane pakietu Lazarus i metadane wersji instalatora, aby zgłaszały 1.39.4
Version 1.39.3
- Dodano
Demo\CBuilder\BatchExport, wprowadzając do C++Builder przepływ wsadowego eksportu wielu plików PDF do JPG, obok istniejących przykładów dla Delphi i Lazarus - Przykład pokazuje
LoadCustomDocument,IPdfCancellationTokenSource, strumieniowe wejścieTFileStream, postęp per plik i per strona, obsługę anulowania, pola DPI / jakości / hasła oraz otwieranie folderu wyjściowego po zakończeniu - Zaktualizowano
TPdf.AboutInfo, metadane pakietu Lazarus i metadane wersji instalatora, aby zgłaszały 1.39.3
Version 1.39.2
- Dodano
Demo\Delphi\WatermarkStamp— uruchamialny przykład przepływu Form XObject, który tworzy PDF docelowy i wielokrotnego użytku PDF z pieczątką, a następnie nakłada na każdej stronie wyśrodkowane znaki wodne, pieczątki w prawym górnym rogu i etykiety numerów stron - Przykład demonstruje
CreateXObjectFromPage,InsertFormObjectFromXObject,TPdfMatrixorazFPDFPageObj_SetMatrixbez dodawania nowego API biblioteki - Zaktualizowano
Docs\en-us\Examples.htmltak, aby przy przekazywaniu macierzy doFPDFPageObj_SetMatrixużywał aktualnego wzorcaTPdfMatrix.Handle - Zaktualizowano
TPdf.AboutInfo, metadane pakietu Lazarus i metadane wersji instalatora, aby zgłaszały 1.39.2
Version 1.39.1
- Dodano
Demo\Delphi\ViewerInteractionLab— skoncentrowany naTPdfViewprzykład obejmujący tryby wyświetlania, tryby dopasowania, kolory stron, rotację, zaznaczanie tekstu przez użytkownika, akcje schowka oraz sprzężenie zwrotne współrzędnychDeviceToPage - Dodano
Demo\CBuilder\StandardsLab/Demo\Lazarus\StandardsLab, dzięki czemu użytkownicy Lazarus mogą uruchamiać przepływ walidacji i generowania markerów dla PDF/A, PDF/UA, PDF/E, PDF/X, PDF/R i PDF/VT - Wymieniono units standardów w
Lib\37.0\PDFiumPas.dprojiLib\FPC\PDFiumLaz.lpkoraz naprawiono kompilację delphicznego demaSplitViewprzez usunięcie zduplikowanego importuWinapi.ShellAPI - Naprawiono blokery kompilacji wsadowej dem Delphi w
BatchExport,PDFViewer,MultiPageVieweriSplitViewbez zmiany ich zachowania w czasie działania - Naprawiono zgodność kompilacji wsadowej demo C++Builder w
PDFVieweriMultiPageViewer, zastępującnullptrprzezNULLdla bieżącego trybu projektu - Zaktualizowano
TPdf.AboutInfo, metadane pakietu Lazarus i metadane wersji instalatora, aby zgłaszały 1.39.1
Version 1.39.0
- Dodano
Demo\Delphi\StandardsLab, uruchamialny przykład przepływu pracy ze standardami, który wczytuje lub tworzy PDF, uruchamiaValidatePdfA,ValidatePdfUa,ValidatePdfE,ValidatePdfX,ValidatePdfRiValidatePdfVToraz pokazuje wykrytą zgodność, status pass/fail i liczbę problemów w jednej siatce - Przyciski zapisu w StandardsLab wywołują
SaveAsPdfA,SaveAsPdfUa,SaveAsPdfE,SaveAsPdfX,SaveAsPdfRiSaveAsPdfVT, dzięki czemu wynik znaczników standardów PDF jest widoczny bez pisania własnego harnessu - Zaktualizowano
TPdf.AboutInfo, metadane pakietu Lazarus i metadane wersji instalatora, aby zgłaszały 1.39.0
Version 1.38.0
- Nakładki wyszukiwania i zaznaczania tekstu w
TPdfViewużywają teraz prawdziwego blendingu alfa zamiast rysowania przez logiczną maskę, dzięki czemu treść strony pozostaje widoczna pod wyróżnieniami - Dodano
SetPdfPrintPaperHandlingDevModedo mapowaniaTPrintPaperHandlingna wartości WindowsDEVMODE.dmDuplex:DMDUP_SIMPLEX,DMDUP_HORIZONTALiDMDUP_VERTICAL TPdfView.SmoothScrollanimuje teraz polecenia paska przewijania dla linii/strony w segmentach sterowanych timerem; przeciąganie uchwytu (thumb) pozostaje natychmiastowe- Zaktualizowano
TPdf.AboutInfoi metadane wersji instalatora, aby zgłaszały 1.38.0
Version 1.37.0
TPdfma teraz blokadę renderowania per instancję, która serializuje ścieżkiRenderPage,RenderTile,RenderPageProgressive, ponownego ładowania strony i zwalniania dokumentu. Renderowanie sterowane workerem przez współdzielony komponent staje się teraz praktyczne, choć aplikacje nadal koordynują modyfikację dokumentu i jego czas życia- Naprawiono wrapper map bitowych bez kopiowania (zero-copy), aby odrzucał odwrócone (bottom-up) układy DIB
TBitmapi przed skopiowaniem danych przechodził na bufor należący do PDFium — eliminuje to błędy uszkodzenia stride i naruszeń dostępu w testach renderowania VCL - Uściślono zachowanie zaznaczania w
TPdfView:AllowUserTextSelectionsteruje wyłącznie wejściem od użytkownika, API zaznaczania na poziomie kodu nadal rysują, aSelectAlluwzględnia rzeczywisty widoczny widok dwustronicowy, więc strona okładki nie zaznacza już strony 2. Testy dla Delphi, Lazarus i C++Builder odpowiednio rozszerzono - Zaktualizowano
TPdf.AboutInfoi metadane wersji instalatora, aby zgłaszały 1.37.0
Version 1.36.0
- Aktywowano zaznaczanie tekstu przez użytkownika w
TPdfView— właściwośćAllowUserTextSelectionzarezerwowana w v1.17.0 napędza teraz kompletny potok zaznaczania przeciąganiem. Lewy klik na znaku tekstu wchodzi w tryb zaznaczania (automatyczny hit-test); lewy klik na pustym obszarze nadal przesuwa widok jak wcześniej. Widget wypełniania formularzy zachowuje priorytet, więc kliknięcie pola formularza nadal ustawia fokus na polu, a nie rozpoczyna zaznaczania - Dwuklik zaznacza słowo, potrójny klik — linię,
Ctrl+Azaznacza bieżącą stronę (obie strony w trybach widoku dwustronicowego), aCtrl+Ckopiuje zaznaczenie do schowka Windows jakoCF_UNICODETEXT Shift+Left/Shift+Rightrozszerza zaznaczenie po jednym znaku naraz, także na sąsiednią stronę w trybie spread;Shift+Home/Shift+Endrozszerza je do wizualnej krawędzi wiersza, używając wysokości pola znaku początkowego jako tolerancji grupowania wiersza, dzięki czemu wiersze z mieszanymi rozmiarami fontów pozostają poprawnie zgrupowane- Najechanie na tekst zmienia kursor na
crIBeam; zjechanie z tekstu przywraca kursor domyślny. Podczas przeciągania zaznaczenia wprowadzenie kursora w 20-pikselową martwą strefę przy dowolnej krawędzi przeglądarki automatycznie przewija stronę (tik co 50 ms, 16 px / tik, z ograniczeniem do tych samych granic, których używa ścieżka przesuwania), dzięki czemu zaznaczenie może wyjść poza bieżący viewport bez wcześniejszego puszczenia myszy - Zaznaczanie między stronami działa w trybach widoku dwustronicowego (
dmTwoPageContinuous,dmTwoPageContinuousWithCover): przeciągnięcie rozpoczęte na lewej stronie i zakończone na prawej zaznacza ciągły zakres obejmujący obie.SelectedTextłączy fragmenty z poszczególnych stron przez CR/LF, więc tekst skopiowany i wklejony z powrotem czyta się jak zwykła treść wielowierszowa - Nowa opublikowana właściwość
SelectionColor(domyślnieclHighlight, systemowy kolor zaznaczenia Windows) — niezależna odHighlightColor, który koloruje wyniki wyszukiwania na żółto. Wyróżnienia wyszukiwania i aktywne zaznaczanie przeciąganiem mogą pojawiać się na ekranie jednocześnie bez konfliktu kolorów - Nowe opublikowane zdarzenie
OnSelectionChangeodpala się za każdym razem, gdy zmaterializowane zakresy zaznaczenia faktycznie się zmienią — nigdy przy identycznym ponownym zastosowaniu, dzięki czemu aplikacje gospodarza mogą podpiąć je bezpośrednio do tekstu paska stanu lub stanu enabled przycisku bez debouncingu - Nowe publiczne API w
TPdfView:HasSelection,SelectionCharCount,SelectedText,ClearSelection,SelectAll,CopySelectionToClipboard. Są to punkty wejścia na poziomie kodu i zawsze działają niezależnie odAllowUserTextSelection— flaga ogranicza tylko wejście użytkownika (mysz, Ctrl+C, Ctrl+A, Shift+arrows), więc hosty kioskowe mogą wyłączyć zaznaczanie sterowane przez użytkownika, a mimo to budować przyciski paska narzędzi "Select All / Copy", które korzystają z tego samego API - Domyślne menu kontekstowe po kliknięciu prawym przyciskiem
Copy/复制jest dołączane automatycznie, gdy host nie przypisał własnegoPopupMenu— standardowe "zaznacz tekst, kliknij prawym, kopiuj" działa od razu. Podpis jest wybierany między angielskim i chińskim przezSysLocale.PriLangID; hosty wymagające pełnej lokalizacji lub bogatszego menu po prostu przypisują własnePopupMenu, a domyślne jest wtedy wyłączane - Zaznaczenie jest automatycznie czyszczone przy przejściach
SetPdf,SetPageNumber,SetActive(False)iDisplayMode, aOnSelectionChangewywołuje się dokładnie raz, gdy poprzednie zaznaczenie nie było puste. Podsystem form-fill zachowuje priorytet — podczas edycji pola formularza wszystkie skróty zaznaczania są odraczane, aby pole mogło obsłużyć własneCtrl+C/Ctrl+A/Shift+arrows - Rozszerzono zestawy regresji Delphi i Lazarus do 202 przypadków każdy, a zestaw C++Builder do 159 przypadków; obejmują wartości domyślne, round-trip, zachowanie publicznego API, czyszczenie przy zmianie stanu, przeciąganie myszą (hit-text / hit-blank), kliknięcie kontra przeciągnięcie, przełączanie kursora IBeam, dwuklik na słowie, potrójny klik na wierszu, skróty klawiaturowe, domyślne podepnienie / odroczenie / podpis menu popup oraz zaznaczanie między stronami w trybie spread — łącznie z kontrolą round-trip CR/LF przez schowek
Version 1.35.0
- Dodano obsługę wstrzykiwania znaczników PDF/VT (ISO 16612-2:2010): TPdf.SaveAsPdfVT podnosi bieżący dokument do pliku zgodnego z PDF/VT-1 lub PDF/VT-2, czyli podzbioru PDF dla druku zmiennego i transakcyjnego. PDF/VT opiera się na PDF/X-4 — ISO 16612-2 §6.2.1 wymaga, aby każdy plik PDF/VT-1 był także zgodny z PDF/X-4 — dlatego injector zapisuje pełny zestaw znaczników PDF/X-4 (XMP
pdfxid:GTS_PDFXVersion = "PDF/X-4", Info/GTS_PDFXVersion (PDF/X-4)i/Trapped, katalogowe/OutputIntentswskazujące słownik OutputIntent z osadzonym profilem ICC) obok właściwości specyficznych dla PDF/VT - Wstrzykiwanie właściwości specyficznych dla PDF/VT obejmuje XMP
pdfvtid:GTS_PDFVTVersion(= "PDF/VT-1" lub "PDF/VT-2" zgodnie z §6.3 Table 2) orazpdfvtid:GTS_PDFVTModDate(utrzymywane w zgodzie zxmp:ModifyDatezgodnie z §6.3 NOTE 1), a także opis pdfaExtension:schemas deklarujący obie przestrzenie nazw pdfxid i pdfvtid (NPES URIhttp://www.npes.org/pdfx/ns/id/ihttp://www.npes.org/pdfvt/ns/id/). Trailer zawiera tablicę/ID - Dodano TPdf.SaveAsPdfVTToStream dla wyjścia PDF/VT w pamięci oraz skrót z opcjami domyślnymi
TPdf.SaveAsPdfVT(FileName), który produkuje PDF/VT-1 z dołączonym OutputIntent sRGB IEC61966-2.1 (3144 bytes, ten sam profil co SaveAsPdfA / SaveAsPdfX) oraz/Trapped /False - Dodano TPdf.ValidatePdfVT: sprawdza otwarty PDF pod kątem znaczników zgodności PDF/VT (obecność XMP
pdfvtid:GTS_PDFVTVersioniGTS_PDFVTModDate, równość międzypdfvtid:GTS_PDFVTModDateaxmp:ModifyDate, obecność bazowego identyfikatorapdfxid:GTS_PDFXVersion, obecność katalogowego/DPartRootzgodnie z §6.5,/OutputIntentsz/DestOutputProfile, trailer /ID, status szyfrowania i obecnośćxmp:CreateDate/ModifyDate) i zwraca TPdfVTValidationResult z wykrytym poziomem zgodności oraz zestawem znalezionych problemów - Dodano właściwość TPdf.PdfVTConformance: zwraca poziom zgodności aktualnie otwartego dokumentu (pvc1, pvc2, pvcNone lub pvcUnknown) bez konieczności jawnego wywoływania ValidatePdfVT
- Nowe typy eksportowane w nowym unicie FPdfPdfvt: TPdfVTConformance (pvcUnknown/None/1/2), TPdfVTTrappedState (ptvUnspecified/True/False/Unknown), TPdfVTValidationResult, TPdfVTValidationIssue, TPdfVTSaveOptions
- Document Part Hierarchy (
DPartRoot/DParttree zgodnie z §6.5) jest strukturą na poziomie aplikacji zależną od mapowania odbiorców i zakresów stron w przepływie druku zmiennego. SaveAsPdfVT nie syntetyzuje drzewa DPart — ValidatePdfVT pokazuje brakujące/DPartRootjakopvviMissingDPartRoot, aby wywołujący mógł skierować pliki PDF/VT do osobnego etapu budowania DPart - Zaktualizowano string TPdf.AboutInfo tak, aby raportował bieżącą wersję produktu
Version 1.34.0
- Dodano obsługę wstrzykiwania markerów PDF/R-1 (ISO 23504-1:2020): TPdf.SaveAsPdfR podnosi bieżący dokument do pliku zgodnego z PDF/R-1 (to podzbiór PDF przeznaczony do transportu obrazów rastrowych, używany przy dokumentach skanowanych). Wstrzykiwanie obejmuje wymagania na poziomie formatu pliku, które można dołączyć postprocessingiem — unikalny komentarz identyfikujący wersję
%PDF-raster-1.0zapisany między słownikiem trailer a słowem kluczowym startxref (§5), słownik katalogu okrojony do białej listy z §6.3 (przetrwać mają tylko Version / ViewerPreferences / PageLayout / PageMode / AcroForm / Metadata), Document Information Dictionary okrojony do białej listy z §6.4.3 (tylko Creator / Producer / CreationDate / ModDate), strumień XMP /Metadata w katalogu z czterema wpisami z §6.4.4 Table 1 (xmp:CreatorTool / pdf:Producer / xmp:CreateDate / xmp:ModifyDate) oraz tablicę /ID w trailer - Dodano TPdf.SaveAsPdfRToStream dla wyjścia PDF/R w pamięci oraz skrót z opcjami domyślnymi
TPdf.SaveAsPdfR(FileName)dla typowego przypadku - Dodano TPdf.ValidatePdfR: sprawdza otwarty PDF pod kątem markerów zgodności PDF/R-1 (komentarz stopki
%PDF-raster-x.y, wersja w nagłówku, brak /Type /ObjStm, zgodność katalogu z białą listą, zgodność słownika Info z białą listą, obecność strumienia metadanych XMP, trailer /ID) i zwraca TPdfRValidationResult z wykrytym poziomem zgodności oraz zestawem znalezionych problemów - Dodano właściwość TPdf.PdfRConformance: zwraca poziom zgodności aktualnie otwartego dokumentu (prc1, prcNone lub prcUnknown) bez konieczności jawnego wywoływania ValidatePdfR
- Nowe typy wyeksportowane w nowym unitie FPdfPdfr: TPdfRConformance, TPdfRValidationResult, TPdfRValidationIssue, TPdfRSaveOptions.
TPdfRSaveOptions.Defaultustawia StripInfoOptionalEntries i StripCatalogOptionalEntries na True, więc injector domyślnie produkuje słownik katalogu i Info zgodne z §6.3 / §6.4.3; wywołujący mogą ustawić je na False, aby zachować wpisy źródłowe (wyjście wtedy nie spełni tych klauzul PDF/R, ale pozostałe markery pozostaną dołączone) - Wymagania na poziomie treści pozostają po stronie źródłowego PDF: struktura Contents per strona (§6.5.1), forma MediaBox
[0 0 w h](§6.5.3), ograniczenia filtrów (§6.2.2 — tylko FlateDecode, bitonalne CCITTFaxDecode, DCTDecode 8-bit gray/RGB), brak strumieni obiektów (§6.2.4) oraz układ strip zgodnie z §6.6. Tego nie da się wymusić postprocessingiem — PDF/R strukturalnie jest znacznie ostrzejszym podzbiorem niż pozostałe standardy PDF/x i wymaga poprawnego wygenerowania bajtów źródłowych. ValidatePdfR ujawnia problemy formatu pliku, które ten unit potrafi wykryć; pełne sprawdzenie na poziomie treści wykonaj, parując go z walidatorem PDF/R od TWAIN Working Group - Zaktualizowano string TPdf.AboutInfo tak, aby raportował bieżącą wersję produktu
Version 1.33.0
- Dodano obsługę wstrzykiwania znaczników PDF/X (rodzina ISO 15930): TPdf.SaveAsPdfX podnosi bieżący dokument do pliku zgodnego z PDF/X-1a:2001, PDF/X-3:2002 lub PDF/X-4 przez post-processing bazowego PDF z przyrostową aktualizacją. Wstrzykiwanie obejmuje wymagania na poziomie formatu pliku, które można dołączyć po przetworzeniu — strumień metadanych XMP zawierający
pdfxid:GTS_PDFXVersion(orazpdfxid:GTS_PDFXConformancedla PDF/X-1a / PDF/X-3) wraz z odpowiadającym opisem pdfaExtension:schemas, przepisany Document Information Dictionary z wpisami/GTS_PDFXVersion,/GTS_PDFXConformancei/Trapped, zaktualizowany katalog z/OutputIntents [N 0 R]wskazującym słownik OutputIntent z/S /GTS_PDFXi osadzonym profilem ICC oraz trailer z tablicą/ID - Dodano TPdf.SaveAsPdfXToStream dla wyjścia PDF/X w pamięci oraz skrót z opcjami domyślnymi
TPdf.SaveAsPdfX(FileName), który produkuje PDF/X-4 z wbudowanym OutputIntent sRGB IEC61966-2.1 (3144 bytes, identyczny z profilem używanym przez SaveAsPdfA) - Dodano TPdf.ValidatePdfX: sprawdza otwarty PDF pod kątem znaczników zgodności PDF/X (identyfikator XMP pdfxid i jego równość z wartością ze słownika Info, opis schematu rozszerzenia pdfxid, tablica /OutputIntents z /DestOutputProfile, obecność Title, trailer /ID, status szyfrowania oraz obecność xmp:CreateDate / xmp:ModifyDate) i zwraca TPdfXValidationResult z wykrytym poziomem oraz zestawem znalezionych problemów
- Dodano właściwość TPdf.PdfXConformance: zwraca poziom zgodności aktualnie otwartego dokumentu (pxc1a, pxc3, pxc4, pxcNone lub pxcUnknown) bez konieczności jawnego wywoływania ValidatePdfX. String wersji z XMP jest parsowany, aby rozróżnić trzy poziomy zgodności
- Nowe typy eksportowane w nowym unicie FPdfPdfx: TPdfXConformance (pxcUnknown/None/1a/3/4), TPdfXTrappedState (ptUnspecified/True/False/Unknown), TPdfXValidationResult, TPdfXValidationIssue i TPdfXSaveOptions.
TPdfXSaveOptions.Defaultceluje w PDF/X-4 z sRGB OutputIntent i/Trapped /False; wywołujący mogą nadpisaćConformance, dostarczyć blobIccProfileDataCMYK dla komercyjnych workflow druku albo zmienićOutputCondition/OutputConditionIdentifier/RegistryName, aby wskazać konkretny wpis rejestru charakteryzacji ICC - Wymagania na poziomie treści (osadzenie wszystkich fontów, brak JavaScriptu, brak widocznych adnotacji, zakaz OPI, reguły przezroczystości dla PDF/X-1a / PDF/X-3 itd.) pozostają po stronie autora dokumentu i potoku renderowania PDFium. Do pełnej weryfikacji zgodności łącz ValidatePdfX z narzędziem preflight takim jak callas pdfaPilot czy Ghent PDF Workgroup Output Suite
- Zaktualizowano string TPdf.AboutInfo tak, aby raportował bieżącą wersję produktu
Version 1.32.0
- Dodano obsługę wstrzykiwania markerów PDF/E-1 (ISO 24517-1:2008): TPdf.SaveAsPdfE czyni bieżący dokument plikiem zgodnym z PDF/E-1, przerabiając bazowy PDF aktualizacją przyrostową (incremental update). Wstrzykiwanie obejmuje wymagania na poziomie formatu pliku, które można dołączyć postprocessingiem — strumień metadanych XMP z
pdfe:ISO_PDFEVersion = "PDF/E-1"oraz pasującym opisem pdfaExtension:schemas, przepisany Document Information Dictionary z obowiązkowym wpisem/ISO_PDFEVersion (PDF/E-1)wymaganym przez §5, bloki pomostowe Info-XMP odziedziczone z ISO 19005-1 §6.7 poprzez §13.1 (dc:title / dc:creator / dc:description / pdf:Producer / pdf:Keywords / xmp:CreateDate / xmp:ModifyDate / xmp:MetadataDate / xmp:CreatorTool) oraz wymaganą przez §6.2 tablicę/IDw trailer - Dodano TPdf.SaveAsPdfEToStream dla wyjścia PDF/E w pamięci oraz skrót z opcjami domyślnymi
TPdf.SaveAsPdfE(FileName)dla typowego przypadku - Dodano TPdf.ValidatePdfE: sprawdza otwarty PDF pod kątem znaczników zgodności PDF/E-1 (obecność XMP pdfe:ISO_PDFEVersion i jego równość z wartością ze słownika Info, opis schematu rozszerzenia pdfe, wpis /ISO_PDFEVersion w słowniku Info, trailer /ID oraz obecność xmp:CreateDate / xmp:ModifyDate) i zwraca wynik strukturyzowany z wykrytym poziomem zgodności oraz zestawem znalezionych problemów
- Dodano właściwość TPdf.PdfEConformance: zwraca poziom zgodności aktualnie otwartego dokumentu (pec1, pecNone lub pecUnknown) bez konieczności jawnego wywoływania ValidatePdfE
- Nowe typy eksportowane w nowym unicie FPdfPdfe: TPdfEConformance, TPdfEValidationResult, TPdfEValidationIssue, TPdfESaveOptions
- Przepisywanie słownika Info to pierwszy taki przypadek w ścieżce post-processingu PDF/x w PDFium Delphi Component — istniejący obiekt Info jest przepisywany pod tym samym numerem (odwołania w podsekcji xref i w trailerze /Info pozostają ważne), a gdy trailer źródła nie ma wpisu /Info, tworzony jest świeży słownik Info. Sam PDFium emituje słownik Info w każdym wyjściu SaveAs, więc typowym przypadkiem jest właśnie ścieżka przepisywania
- Wymagania na poziomie treści (osadzanie fontów, CMapy ToUnicode, zakazane XObject / klucze ExtGState / formularze XFA itd.) pozostają po stronie autora dokumentu — SaveAsPdfE dokleja znaczniki na poziomie formatu pliku, ale nie modyfikuje treści stron ani nie usuwa zakazanych funkcji
- Zaktualizowano string TPdf.AboutInfo tak, aby raportował bieżącą wersję produktu
Version 1.31.0
- Dodano obsługę wstrzykiwania znaczników PDF/UA-1 (ISO 14289-1:2014): TPdf.SaveAsPdfUa podnosi bieżący dokument do pliku zgodnego z PDF/UA-1 przez post-processing bazowego PDF z przyrostową aktualizacją. Wstrzykiwanie obejmuje wymagania na poziomie formatu pliku, które można wymusić po przetworzeniu — strumień metadanych XMP zawierający
pdfuaid:part = 1wraz z odpowiadającym opisem pdfaExtension:schemas, obowiązkowedc:title, katalogowe/MarkInfo << /Marked true /Suspects false >>oraz/ViewerPreferences << /DisplayDocTitle true >>(tylko gdy źródło ich nie ma), katalogowe/Lang(gdy wywołujący poda tag BCP 47) oraz trailer z tablicą/ID - Dodano TPdf.SaveAsPdfUaToStream dla wyjścia PDF/UA w pamięci oraz skrót z opcjami domyślnymi
TPdf.SaveAsPdfUa(FileName)dla typowego przypadku - Dodano TPdf.ValidatePdfUa: sprawdza otwarty PDF pod kątem znaczników zgodności PDF/UA-1 (istnienie StructTreeRoot, /Lang, /MarkInfo /Marked true z /Suspects = false, /ViewerPreferences /DisplayDocTitle true, identyfikator XMP pdfuaid:part, obecność dc:title, trailer /ID, status szyfrowania) i zwraca wynik strukturyzowany z wykrytym poziomem zgodności oraz zestawem znalezionych problemów
- Dodano właściwość TPdf.PdfUaConformance: zwraca poziom zgodności aktualnie otwartego dokumentu (puc1, pucNone lub pucUnknown) bez konieczności jawnego wywoływania ValidatePdfUa
- Nowe typy eksportowane w nowym unicie FPdfPdfua: TPdfUaConformance, TPdfUaValidationResult, TPdfUaValidationIssue, TPdfUaSaveOptions
- Pola Title / Author / Subject / Keywords / Creator / Producer / CreationDate / ModDate / DocumentId / InstanceId / Language pozostawione puste w TPdfUaSaveOptions są automatycznie wypełniane z FPDF_GetMetaText / FPDF_GetFileIdentifier / FPDFCatalog_GetLanguage, więc dotychczasowy kod wywołujący może zapisywać jedną linijką
- Wymagania na poziomie treści (kompletność tagowania StructTreeRoot, tekst Alt figur, ToUnicode CMaps, osadzanie czcionek itd.) pozostają odpowiedzialnością autora dokumentu — SaveAsPdfUa dołącza markery formatu pliku, ale nie zmienia treści stron ani nie wymyśla tagów. ValidatePdfUa sygnalizuje brak StructTreeRoot jako
pvuaiMissingStructTreeRoot, więc wywołujący mogą skierować nieotagowane dokumenty do osobnego potoku tagowania - Zaktualizowano string TPdf.AboutInfo tak, aby raportował bieżącą wersję produktu
Version 1.30.0
- Wyjście PDF/A-1b spełnia teraz wymagania ISO 19005-1 (z Cor.1:2007) dotyczące równoważności Document Information Dictionary / XMP: każdy wpis słownika Info, który PDFium zapisuje w bazowym PDF, jest odwzorowywany w pakiecie XMP, w tym Title (dc:title), Author (dc:creator), Subject (dc:description wg Cor.1), Keywords (pdf:Keywords), Creator (xmp:CreatorTool), Producer (pdf:Producer), CreationDate (xmp:CreateDate) i ModDate (xmp:ModifyDate). Emitowany jest też xmp:MetadataDate
- Trailer dokumentu PDF/A zawiera teraz zawsze tablicę /ID (twarde wymaganie ISO 19005-1 6.1.3). Gdy TPdf.SaveAsPdfA przetwarza dokument, którego źródło ma już identyfikator pliku, istniejące 16-bajtowe identyfikatory permanent i changing są ponownie używane; w przeciwnym razie deterministyczny 16-bajtowy identyfikator zastępczy jest wyprowadzany z bajtów źródła
- Wstrzykiwany XMP osadza teraz opis schematu rozszerzenia pdfaid wymagany przez ISO 19005-1 6.7.8 (zastąpiony przez Cor.1) — pdfaid jest traktowany jako extension schema względem XMP Specification 2004, więc wszystkie zgodne pliki muszą zadeklarować jego nazwy właściwości, typy wartości i kategorie w kontenerze pdfaExtension:schemas
- TPdfASaveOptions zyskało pięć nowych opcjonalnych pól: Producer, CreationDate, ModDate (stringi daty PDF w postaci “D:YYYYMMDDHHmmSSOHH'mm'”), DocumentId i InstanceId (16-bajtowe ciągi bajtów dla tablicy /ID w trailerze). TPdf.SaveAsPdfA / SaveAsPdfAToStream automatycznie wypełniają brakujące pola z FPDF_GetMetaText i FPDF_GetFileIdentifier, więc dotychczasowy kod wywołujący działa bez zmian
- TPdf.ValidatePdfA / TPdf.PdfAConformance zgłaszają teraz trzy dodatkowe problemy: pvaiMissingTrailerId (brak /ID w trailerze), pvaiMissingXmpDates (brak xmp:CreateDate lub xmp:ModifyDate) oraz pvaiMissingExtensionSchema (brak opisu schematu rozszerzenia pdfaid)
- Znaki spoza ASCII w polach Title, Author, Subject, Keywords, Creator i Producer są teraz kodowane jako UTF-8 w pakiecie XMP (XMP Specification wymaga UTF-8), co zachowuje round-trip wielojęzycznych metadanych przez SaveAsPdfA
- Zaktualizowano string TPdf.AboutInfo tak, aby raportował bieżącą wersję produktu
Version 1.29.0
- Odświeżono dołączone biblioteki DLL PDFium (Win32 i Win64, zarówno kompilacje standardowe, jak i V8) do migawki PDFium z 2026-05-22, obejmującej poprawki ścieżek awarii FPDFText_SetText / FPDFText_SetCharcodes oraz rozmaite wewnętrzne utwardzenia z projektu PDFium
- Udostępniono nową flagę zapisu FPDF_SUBSET_NEW_FONTS pochodzącą z PDFium w FPdfPageOps.pas, pozwalającą wywołującym FPDF_SaveAsCopy żądać automatycznego subsettingu osadzonych plików fontów dla nowo dodanych obiektów tekstowych. Istniejące stałe FPDF_INCREMENTAL, FPDF_NO_INCREMENTAL i FPDF_REMOVE_SECURITY są teraz definiowane z użyciem postaci przesunięć bitowych PDFium (dawna wartość liczbowa 3 pozostaje zachowana jako FPDF_REMOVE_SECURITY_DEPRECATED dla zgodności binarnej)
- Dodano enum FPDF_FONT_BACKEND_TYPE (FREETYPE / FONTATIONS) oraz pasujące pole m_FontLibraryType w FPDF_LIBRARY_CONFIG w FPdfView.pas, więc aplikacje inicjalizujące PDFium z rendererem Skia mogą teraz wybrać backend fontów przy starcie
- Zaktualizowano sygnaturę TFPDFPage_InsertObject tak, aby odpowiadała eksportowi C w PDFium: funkcja zwraca teraz FPDF_BOOL (TRUE przy sukcesie, FALSE gdy page_object jest NULL lub przekazanie własności zawiedzie) zamiast void. Istniejące wywołania w PDFium Delphi Component kompilują się bez zmian, bo Delphi / FPC pozwalają zignorować wartość zwracaną funkcji
- Poprawiono string TPdf.AboutInfo tak, aby raportował bieżącą wersję produktu (po czysto dokumentacyjnym wydaniu 1.28.0 zalegał jeszcze na wartości z v1.27.0)
Version 1.28.0
- Znacznie rozbudowano dokumentację na stronach w całej dokumentacji API: każdy wpis właściwości, metody, zdarzenia i funkcji globalnej ma teraz 3-akapitowy opis Description, listę Remarks, wielowierszowy przykład Delphi Example i bogatszy blok See Also — obejmuje to ponad 200 wcześniej ubogich stron, w tym wszystkie liczniki TPdf, pobierania metadanych, akcesory czcionek i znaków, właściwości poziomu strony, rekordy indeksowane, metody poziomu dokumentu oraz pełną powierzchnię stanu / wyświetlania / zdarzeń TPdfView
- Dostrójono układ pomocy do wzorca wizualnego losLab: wyrównano rozmiary h1/h2, scalono style siatki nawigacji API we wspólnym StyleSheet i usunięto nadpisania inline CSS per strona w Navigation.html
- Dokumentacja zawiera teraz skrypt pomocniczy (Docs\Build-Expand-Entries.ps1), który odtwarza wzbogacenia stron wpisów z jednej tabeli danych, co ułatwia powtarzalną konserwację
Version 1.27.0
- Dodano obsługę tworzenia PDF/A-1b: TPdf.SaveAsPdfA zapisuje każdy otwarty dokument jako plik zgodny z PDF/A-1b, przetwarzając bazowy PDF aktualizacją przyrostową, która wstrzykuje strumień metadanych XMP, OutputIntent sRGB ICC i zaktualizowany katalog dokumentu — wszystko bez konieczności dodatkowych API biblioteki DLL. Działa na każdej platformie obsługiwanej przez PDFium Delphi Component
- Dodano TPdf.SaveAsPdfAToStream do wyjścia PDF/A w pamięci
- Dodano TPdf.ValidatePdfA: sprawdza otwarty PDF pod kątem zgodności z PDF/A (znaczniki XMP pdfaid, OutputIntent z osadzonym profilem ICC, szyfrowanie) i zwraca wynik strukturyzowany z wykrytym poziomem zgodności oraz zestawem konkretnych wykrytych problemów
- Dodano właściwość TPdf.PdfAConformance: zwraca poziom zgodności aktualnie otwartego dokumentu (pac1b, pac1a, pac2b, pac3b, pacNone lub pacUnknown) bez konieczności jawnego wywoływania ValidatePdfA
- Nowe eksportowane typy: TPdfAConformance, TPdfAValidationResult, TPdfAValidationIssue, TPdfASaveOptions (w nowym unicie FPdfPdfa.pas)
- SaveAsPdfA obsługuje własny profil ICC przez TPdfASaveOptions.IccProfileData; gdy pole pozostaje puste, automatycznie używany jest wbudowany profil sRGB IEC61966-2.1 (HP/Microsoft, 3144 bytes)
- Monolityczna referencja HTML została zastąpiona przebudowanym systemem pomocy webowej: 302 osobne strony wpisów API (po jednej dla każdej właściwości, metody, zdarzenia i funkcji globalnej) obejmujące TPdf i TPdfView, każda z pełnym opisem, tabelą parametrów, przykładem kodu Delphi i linkami See Also
- Dodano Navigation.html: obszerny jednostronicowy indeks nawigacji API podzielony na sześć sekcji (właściwości/metody/zdarzenia TPdf, właściwości/metody/zdarzenia TPdfView, funkcje globalne) z pięciokolumnową siatką flex ułatwiającą szybkie przeszukiwanie
- Przebudowano TPdf.html i TPdfView.html jako zwięzłe strony przeglądowe komponentów, zachowując sekcje referencji typów (Types, Constants, Global Variables) i linkujące do osobnych stron wpisów dla wszystkich składowych
- Dodano wyszukiwanie pełnotekstowe oparte na Search.js z przyrostowym dopasowywaniem po stronie klienta we wszystkich 312 indeksowanych stronach
- Zaktualizowano wszystkie paski nawigacyjne w całym serwisie tak, aby wskazywały na Navigation.html
Version 1.26.0
- Dodano Demo/Lazarus/BatchExport, port LCL dema Delphi BatchExport z v1.14.0. Ten sam zestaw funkcji: eksport wielu plików PDF -> JPG z ogólnym postępem per plik, bieżącym postępem per strona, polami DPI / jakości / hasła oraz wsadem anulowalnym w sposób kooperatywny, opartym o IPdfCancellationToken. Po udanym zakończeniu eksportu folder wyjściowy jest otwierany w systemowym menedżerze plików
Version 1.25.0
- Dodano do TPdf ponowne wykorzystywanie stron jako Form XObject, umożliwiające workflow znaku wodnego, nakładania szablonu i “odbijania jednej strony na wielu”: CreateXObjectFromPage wytwarza uchwyt wielokrotnego użytku z dowolnej strony innego dokumentu; InsertFormObjectFromXObject wstawia JEDNĄ kopię opakowanej strony do bieżącej strony. Zwraca wstawiony FPDF_PAGEOBJECT, dzięki czemu wywołujący może go pozycjonować / skalować / obracać przez FPDFPageObj_SetMatrix i helpery TPdfMatrix z v1.9.0
- Nowa klasa Pascal TPdfXObject opakowuje uchwyt FPDF_XOBJECT z PDFium i zamyka go automatycznie w destruktorze, eliminując ręczną ceremonię FPDF_CloseXObject
- Rozszerzono zestawy regresji Delphi i Lazarus do 147 przypadków każdy, a zestaw C++Builder do 123 przypadków; obejmują kontrakty tworzenia uchwytów i wstawiania obiektów stron
Version 1.24.0
- Dodano TPdf.RenderPageProgressive — anulowalny wariant RenderPage, który napędza pętlę renderowania progresywnego PDFium i odpytuje IPdfCancellationToken z v1.7.0 między iteracjami, dzięki czemu długie renderowania w wysokim DPI mogą zostać przerwane w połowie strony zamiast blokować wywołującego do samego końca
- Zwraca wartość TPdfProgressiveStatus: prsDone, prsCancelled lub prsFailed. Przekaż AToken = nil, aby renderować do końca bez żadnych pauz (prsCancelled nie może wystąpić)
- Korzysta z tej samej szybkiej ścieżki zero-copy wprowadzonej w v1.21.0 — PDFium renderuje bezpośrednio do DIB docelowego TBitmap. Ten sam starszy fallback obowiązuje, gdy DIB nie da się opakować
- Rozszerzono zestawy regresji Delphi i Lazarus do 145 przypadków każdy, a zestaw C++Builder do 121 przypadków; obejmują token nil (dokańcza), token anulowany z góry (prsCancelled) oraz równoważność pikselową z synchronicznym RenderPage na żywym tokenie
Version 1.23.0
- Dodano sześć nowych metod TPdfView, które udostępniają aplikacjom zaznaczanie tekstu w widżetach formularzy PDFium oraz Undo/Redo: GetSelectedFormText zwraca aktualnie zaznaczony tekst w aktywnym widżecie formularza; SelectAllFormText zaznacza wszystkie znaki; FormUndo / FormRedo / FormCanUndo / FormCanRedo sterują historią edycji aktywnego widżetu. Leżące u podstaw API PDFium były już zbindowane, ale nie miały wejścia wysokiego poziomu. Wszystkie sześć metod bezpiecznie się wyłączają, gdy widok jest nieaktywny albo dokument nie ma fokusa na widżecie AcroForm
- Rozszerzono zestawy regresji Delphi i Lazarus do 142 przypadków każdy, a zestaw C++Builder do 119 przypadków; obejmują kontrakt brak-formularza-brak-fokusa dla każdej nowej metody
Version 1.22.0
- Dodano do TPdf wrappery składania stron: ImportPagesByIndex przyjmuje tablicę indeksów od zera, aby skopiować wybrane strony z dokumentu źródłowego; ImportNPagesToOne zwraca zupełnie nowy TPdf, którego strony są kompozycjami N-up tego dokumentu; MovePages zmienia kolejność stron w miejscu. Leżące u podstaw API PDFium były już zbindowane, ale nie miały przyjaznego dla Pascala wejścia
- ImportPagesByIndex przyjmuje pustą tablicę, aby zaimportować wszystkie strony źródła (odpowiednik przekazania nil na poziomie ABI C)
- Rozszerzono zestawy regresji Delphi i Lazarus do 136 przypadków każdy, a zestaw C++Builder do 115 przypadków; obejmują import podzbioru, import całego dokumentu, zmianę kolejności stron i kompozycję N-up
Version 1.21.0
- Poprawiono wydajność renderowania, przechodząc w TPdf.RenderPage / TPdf.RenderTile (oraz odpowiadających im helperach TPdfView) na ścieżkę wyjściową zero-copy. PDFium pisze teraz bezpośrednio do bufora DIB docelowego TBitmap zamiast do bufora wewnętrznego, który był potem kopiowany wiersz po wierszu, co oszczędza jedną kopię pamięci width x height x 4 bytes na render. Poprawa jest najbardziej widoczna przy wysokim DPI (panele miniatur, eksport w jakości druku, eksport wsadowy)
- Starsza ścieżka per scanline pozostaje jako bezpieczny fallback na rzadki przypadek, gdy docelowego DIB nie da się opakować (ekstremalne wymiary, nietypowy stride, OOM). Zachowanie obu ścieżek jest identyczne bajt po bajcie, fallback jest po prostu wolniejszy
- Rozszerzono zestawy regresji Delphi i Lazarus do 132 przypadków każdy, a zestaw C++Builder do 112 przypadków; obejmują upgrade bitmapy wywołującego do pf32bit, round-trip wymiarów oraz test kontrolny stride dużej bitmapy
Version 1.20.0
- Dodano do TPdfView podświetlanie wyników wyszukiwania: HighlightSearchText(Text, MatchCase, MatchWholeWord) skanuje bieżącą stronę widoku i zwraca liczbę znalezionych trafień, malując maskę w kolorze HighlightColor nad każdym trafieniem przy każdym przemalowaniu. ClearHighlight usuwa podświetlenia; przełączenie widoku na inną stronę czyści je automatycznie, bo trafienia są przypisane do strony
- HighlightColor ma domyślnie clYellow i jest publikowany, aby aplikacje mogły dopasować kolor podświetlenia do swojej palety UI
- Rozszerzono zestawy regresji Delphi i Lazarus do 129 przypadków każdy, a zestaw C++Builder do 109 przypadków; obejmują kolor domyślny, round-trip koloru, “trafienia rzeczywistych słów z fixture” w stringu sample.pdf oraz kontrakt “brak słowa zwraca zero trafień”
Version 1.19.0
- Dodano do TPdfView właściwość FitMode z czterema wartościami: pfmNone (ręczne powiększenie), pfmActualSize (100%), pfmFitPage (cała strona mieści się w obszarze widoku) i pfmFitWidth (szerokość strony dopasowuje się do szerokości obszaru widoku). Aktywny tryb dopasowania jest automatycznie ponownie stosowany przy Resize i zmianie bieżącej strony, więc długie dokumenty o różnej wielkości stron pozostają idealnie wykadrowane
- Bezpośrednie ustawienie Zoom anuluje aktywny tryb dopasowania (FitMode wraca do pfmNone), zgodnie ze standardową konwencją przeglądarek PDF, w której wpisanie wartości powiększenia wychodzi z Fit Page / Fit Width
- Domyślnie pfmNone, dzięki czemu dotychczasowe aplikacje zachowują swoje zachowanie z jawnym powiększeniem
- Rozszerzono zestawy regresji Delphi i Lazarus do 124 przypadków każdy, a zestaw C++Builder do 106 przypadków; obejmują wartość domyślną, round-trip trybu, fit-page dający realne powiększenie na wczytanym dokumencie oraz manual-zoom-cancels-fit-mode
Version 1.18.0
- Dodano do TPdfView właściwość PageColor, oddzielającą tło renderowanej strony PDF od Color otaczającej kontrolki. Domyślnie clWhite, więc strony PDF renderują się teraz na biało jak papier, niezależnie od motywu aplikacji gospodarza. Przeglądarki w trybie ciemnym mogą teraz utrzymać ciemny obszar przewijania, pozostawiając samą stronę PDF białą (albo w dowolnym kolorze wybranym przez aplikację)
- Zmiana zachowania: aplikacje, które ustawiały TPdfView.Color, aby przemalować stronę PDF, powinny zamiast tego ustawiać PageColor. Domyślne doświadczenie poprawia się dla typowego przypadku (białe strony na motywowanych tłach kontrolek) bez żadnej zmiany kodu
- Rozszerzono zestawy regresji Delphi i Lazarus do 120 przypadków każdy, a zestaw C++Builder do 103 przypadków; obejmują wartość domyślną i round-trip koloru
Version 1.17.0
- Dodano do TPdfView przełączniki blokady wejścia użytkownika, dzięki którym aplikacje osadzające przeglądarkę w kioskach, panelach podglądu lub kontekstach tylko do odczytu mogą wyłączyć gesty nawigacji bez subclassingu: AllowUserPageChange steruje nowymi skrótami klawiaturowymi PgUp / PgDn / Ctrl+Home / Ctrl+End; ChangePageOnMouseScrolling steruje nowymi skokami stron kółkiem w górę / w dół; AllowUserTextSelection jest zarezerwowane na przyszłą ścieżkę zaznaczania tekstu myszą. Wszystkie trzy domyślnie mają True, więc dotychczasowe aplikacje aktualizują się bez zmiany zachowania
- Nawigacja stron kółkiem myszy pomija Ctrl+kółko, dzięki czemu aplikacje mogą rezerwować Ctrl+kółko dla powiększenia
- Rozszerzono zestawy regresji Delphi i Lazarus do 118 przypadków każdy, a zestaw C++Builder do 101 przypadków; obejmują wartości domyślne i round-trip przełączników
Version 1.16.2
- Rozszerzono pokrycie regresyjne TPdfView o klikanie linków adnotacji, gdy strona przeglądarki różni się od strony powiązanego TPdf, z użyciem rzeczywistej bezgłowej ścieżki klikania myszą w Delphi, Lazarus i C++Builder
- Zestawy Delphi i Lazarus uruchamiają teraz po 114 przypadków, a C++Builder 99 przypadków
Version 1.16.1
- Naprawiono obsługę klikania linków w TPdfView tak, aby automatyczne akcje adnotacji i linków webowych używały strony aktualnie wyświetlanej przez przeglądarkę, nawet gdy powiązany komponent TPdf stoi na innej stronie
- Utwardzono TPdfThumbnailView przeciwko wiszącym referencjom Pdf przy niszczeniu powiązanego komponentu TPdf
- Dodano pokrycie regresyjne czasu życia referencji miniatur; zestawy Delphi i Lazarus uruchamiają teraz po 113 przypadków, a C++Builder 98 przypadków
- Zsynchronizowano README, dokumentację testów, zawartość wyszukiwania / indeksu HTML Help oraz generowane wyjścia pakietów C++ z aktualizacjami integracji od v1.7.0 do v1.16.0
Version 1.16.0
- Dodano nowe demo Delphi PrintDialog (Demo/Delphi/PrintDialog) skupione na druku N-up (1 / 2 / 4 / 9 stron na arkusz) z filtrowaniem stron nieparzystych / parzystych, renderowaniem w skali szarości i opcjonalnymi ramkami komórek o szerokości 1 piksela. To celowo niewielki towarzysz istniejącego demo PrintPDF, które obejmuje już podgląd, ostatnie pliki, powiększenie i skalowanie
Version 1.15.0
- Dodano nowy komponent TPdfThumbnailView (unit FPdfThumbnail), który renderuje po jednej miniaturze strony w wierszu w przewijalnym panelu bocznym, z podświetleniem pod kursorem i zaznaczenia oraz nawigacją po kliknięciu. Zaprojektowany do pracy obok TPdfView, dzięki czemu użytkownicy mogą przeglądać długi dokument strona po stronie
- Komponent jest rejestrowany na zakładce palety losLab obok TPdf i TPdfView; kluczowe właściwości: Pdf, CurrentPageIndex, ThumbnailWidth, ThumbnailHeight, TextColor, HoverColor, SelectionColor, BorderColor oraz zdarzenie OnPageClick
- Rozszerzono zestawy regresji Delphi i Lazarus do 112 przypadków każdy, a zestaw C++Builder do 97 przypadków; obejmują wartości domyślne, round-trip rozmiaru miniatur, przycinanie wartości ekstremalnych, round-trip kolorów i przypisywanie obsługi zdarzeń
Version 1.14.0
- Dodano nowe demo Delphi BatchExport (Demo/Delphi/BatchExport) pokazujące, jak przekonwertować wiele plików PDF na JPG w jednym przebiegu, używając TPdf.LoadCustomDocument do ładowania strumieniowego, IPdfCancellationToken do kooperatywnego anulowania oraz pasków postępu ogólnego per plik i bieżącego per strona. Demo używa jednej instancji TPdf na plik (sam PDFium nie jest thread safe) i otwiera folder wyjściowy w Explorerze po udanym zakończeniu eksportu
Version 1.13.0
- Dodano do TPdfView nakładkę UI renderowania asynchronicznego poprzez trzy nowe właściwości: AsyncRendering, LoadingText i LoadingColor. Gdy AsyncRendering ma True, ścieżka malowania pojedynczej strony rysuje mały wskaźnik “Loading...” nad renderowaną stroną, dzięki czemu aplikacje używające własnego workera do długich renderowań mają spójny sygnał wizualny
- Wartości domyślne zachowują dotychczasowe zachowanie: AsyncRendering ma False, więc aplikacje, które się nie zdecydują, nie zobaczą żadnej zmiany wizualnej
- Dokumentacja doprecyzowuje, że sam PDFium nie jest thread safe — rzeczywiste zrzucenie renderowania na workera wymaga od wywołującego utrzymywania jednego TPdf na workera; nadchodzące demo eksportu wsadowego pokazuje ten wzorzec
- Rozszerzono zestawy regresji Delphi i Lazarus do 106 przypadków każdy, a zestaw C++Builder do 93 przypadków; obejmują wartości domyślne i round-trip trzech właściwości
Version 1.12.0
- Dodano do TPdfView obsługę linków sterowaną kliknięciem. Nowa właściwość LinkOptions kontroluje automatyczne zachowanie dla czterech typów akcji linków PDF: goto (skok do strony), URI (ShellExecute), launch (ShellExecute) i osadzony GotoR (zarezerwowany). Domyślnie włączone są loAutoGoto i loAutoOpenURI; loAutoLaunch i loAutoEmbeddedGoto pozostają wyłączone, więc przypadkowy klik nie uruchomi dowolnego programu
- Dodano zdarzenia OnAnnotationLinkClick i OnWebLinkClick, które odpalają się przed jakąkolwiek akcją automatyczną i pozwalają aplikacji zbadać link, oznaczyć go jako Handled albo przekierować (na przykład do pytania o potwierdzenie bezpieczeństwa)
- Wykrywanie kliknięć linków działa tylko wtedy, gdy gest to kliknięcie, a nie przeciągnięcie; używa świeżej kotwicy MouseDown, więc gesty przesuwania nadal przepływają przez istniejącą ścieżkę przewijania bez zmian
- Rozszerzono zestawy regresji Delphi i Lazarus do 102 przypadków każdy, a zestaw C++Builder do 91 przypadków; obejmują domyślne LinkOptions, round-trip zbioru i przypisywanie obsługi zdarzeń
Version 1.11.0
- Dodano do TPdfView szlify wizualne: właściwości PageShadowSize, PageShadowColor i PageBorderColor malują opcjonalny cień pod prostokątem strony oraz jednopikselową ramkę wokół niego. Wartości domyślne zachowują poprzedni płaski wygląd (PageShadowSize = 0; ramka jest rysowana domyślnym clBlack, ale zlewa się z domyślnym białym tłem, dopóki wywołujący nie zmienią kolorów)
- Dodano właściwość SmoothScroll jako flagę opt-in na przyszłą animację przewijania przyrostowego; właściwość już teraz poprawnie przechodzi round-trip i jest podpięta tak, by aplikacje mogły zapisać tę preferencję, a strona renderowania nadal używa istniejącego natychmiastowego przewijania
- Rozszerzono zestawy regresji Delphi i Lazarus do 98 przypadków każdy, a zestaw C++Builder do 89 przypadków; obejmują wartości domyślne, round-trip właściwości i przycinanie ujemnego rozmiaru cienia
Version 1.10.0
- Dodano bezpośrednie wstawianie obrazów przez nowe przeciążenia TPdf.AddImage i TPdfView.AddImage przyjmujące ścieżkę pliku albo TBitmap, obok istniejącego AddPicture opartego o TPicture. AddImage(FileName) rozpoznaje każdy format zarejestrowany w unitach graficznych VCL lub LCL (BMP, PNG przez unit PngImage, JPG itd.) i przechodzi przez ten sam potok co AddPicture, więc zachowanie jest identyczne
- AddImage(TBitmap) pomija pośrednika TPicture, co upraszcza kod wywołujący, który już trzyma TBitmap z renderowania lub generowania wsadowego
- Rozszerzono zestawy regresji Delphi i Lazarus do 92 przypadków każdy, a zestaw C++Builder do 84 przypadków; obejmują wstawianie bitmap, granice obiektów stron, odrzucanie bitmapy nil i ładowanie plików BMP
Version 1.9.0
- Dodano obsługę macierzy transformacji wysokiego poziomu przez nową klasę TPdfMatrix w unicie FPdfMatrix. TPdfMatrix opakowuje FS_MATRIX z PDFium w obiektowe API dla Translate, Scale, Rotate, HorizontalFlip, VerticalFlip, CentralFlip, Skew i Multiply, przydatne do składania transformacji przed przekazaniem ich do FPDFPageObj_SetMatrix i podobnych API PDFium
- TPdfMatrix.Multiply poprawnie robi snapshot sześciu elementów macierzy przed wyliczeniem nowych wartości wierszy, naprawiając ukryty problem, w którym alternatywne implementacje w Pascalu nadpisywały wcześniejsze elementy w ramach tego samego wywołania i dawały błędne wyniki dla każdej kompozycji wykraczającej poza czyste przesunięcie
- Rozszerzono zestawy regresji Delphi i Lazarus do 88 przypadków każdy, a zestaw C++Builder do 81 przypadków; obejmują macierz jednostkową, reset, translate / scale / flip, kolejność kompozycji post-multiply oraz przypadek regresyjny Multiply
Version 1.8.0
- Dodano ładowanie strumienia na żądanie przez nową metodę TPdf.LoadCustomDocument(AStream, AOwnsStream) i klasę pomocniczą TPdfStreamAdapter, oparte o FPDF_LoadCustomDocument z PDFium. PDFium czyta teraz bloki z podanego TStream dopiero wtedy, gdy są potrzebne, więc bardzo duże lub zdalne PDF nie wymagają już z góry kopii w pamięci
- Dodano opcjonalną własność strumienia: przekazanie AOwnsStream = True oddaje czas życia TStream pod kontrolę TPdf, który zwalnia go przy UnloadDocument
- Rozszerzono zestawy regresji Delphi i Lazarus do 79 przypadków każdy, a zestaw C++Builder do 75 przypadków; obejmują ładowanie strumieniowe przez TFileStream, sprzątanie strumienia będącego własnością TPdf oraz kontrakt, że strumień o własności zewnętrznej przeżywa unload
Version 1.7.0
- Dodano prymitywy kooperatywnego anulowania asynchronicznego w nowym unicie FPdfAsync, udostępniające IPdfCancellationToken / IPdfCancellationTokenSource oraz wielokrotnego użytku singleton PdfNoCancellationToken, dzięki czemu długotrwałe workflow renderowania i eksportu mogą obsłużyć czyste anulowanie z UI
- Dodano lekki helper TPdfFuture<T>, który uruchamia workera na wątku w tle i odsyła kopertę TPdfFutureResult<T> do wątku głównego, rozróżniając przypadki sukcesu, anulowania i błędu
- Rozszerzono zestawy regresji Delphi i Lazarus do 76 przypadków każdy, a zestaw C++Builder do 73 przypadków, ze wspólnym pokryciem stanu anulowania, idempotentnego cancel, roznoszenia callbacków i rejestracji po anulowaniu
Version 1.6.10
- Dodano dostęp wysokiego poziomu TPdf.PrintPageRanges do preferencji przeglądarki PDF z zakresem stron druku, zwracający zakresy stron numerowane od jedynki dla kodu aplikacji
- Dodano TPdf.SetFormFieldFlags / SetFormFieldFlagsAt oraz pasujące helpery TPdfView, dzięki którym aplikacje mogą aktualizować flagi pól AcroForm przez publiczne API, w tym pokrycie flag hasła i wielokrotnego wyboru
- Utwardzono pokrycie ABI bindowania PDFium dla Windows-rozmiarowego FPDF_DWORD, callbacków FPDF_FILEACCESS i pól slotów embeddera V8
Version 1.6.9
- Dodano niskopoziomowe bindingi renderowania Skia dla nowo wyeksportowanych API FPDF_RenderPageSkia i FPDF_FFLDrawSkia w dołączonych DLL PDFium, standardowych i V8
- Rozszerzono publiczne testy pokrycia bindingów, tak aby ładowanie DLL standardowej i V8 weryfikowało teraz punkty wejścia renderowania Skia obok dotychczasowych sond możliwości V8/XFA
Version 1.6.8
- Dodano TPdf.SetTextPositions i TPdfSingleArray do ustawiania pozycji per znak na istniejących obiektach tekstowych przez nowo wyeksportowane API FPDFText_SetPositions
- Awansowano FPDFText_SetPositions do wymaganego bindingu dla obecnie dołączonych DLL PDFium, potwierdzając jednocześnie, że punkty wejścia renderowania Skia pozostają niedostępne, bo DLL nadal ich nie eksportują
- Rozszerzono zestawy regresji Delphi, C++Builder i Lazarus do 65 przypadków każdy z pokryciem pozycji tekstu
Version 1.6.7
- Dodano dostęp wysokiego poziomu TPdf do akcji name-tree JavaScript dokumentu, zwracający nazwy akcji i skrypty przez JavaScriptAction i JavaScriptActions
- Dodano TPdf.FileIdentifier do odczytu identyfikatorów permanent i changing z traileru jako binarnych TBytes bez bajta terminatora PDFium
- Dodano TPdf.PageBox, GetPageBox i SetPageBox dla MediaBox, CropBox, BleedBox, TrimBox i ArtBox na bieżącej stronie
- Potwierdzono, że obecnie dołączone DLL PDFium pozostawiają w czasie działania niedostępne wyłącznie punkty wejścia renderowania Skia, ponieważ tych eksportów po prostu brakuje
- Rozszerzono zestawy regresji Delphi, C++Builder i Lazarus do 64 przypadków każdy z pokryciem JavaScriptu dokumentu, ID traileru i page boxów
Version 1.6.6
- Dodano obsługę w czasie działania dla dołączonej DLL PDFium z V8. Ustawienie EnableV8Engine przed ładowaniem wybiera teraz pdfium.v8.dll z drzewa DLLs\Win32 lub DLLs\Win64 i odsłania bindingi dostępne wyłącznie przy V8/XFA, gdy wczytana DLL je udostępnia
- Dodano V8FeaturesAvailable, XfaBStrHelpersAvailable, GetRecommendedV8Flags oraz niskopoziomowe opcjonalne bindingi dla FPDF_BStr_*, FPDF_GetRecommendedV8Flags i FPDF_GetArrayBufferAllocatorSharedInstance
- FPDFText_SetPositions stał się opcjonalny, dzięki czemu PDFium Delphi Component nadal się ładuje z DLL PDFium, które nie eksportują tego eksperymentalnego settera pozycji tekstu
- Rozszerzono zestawy regresji Delphi, C++Builder i Lazarus do 61 przypadków każdy z pokryciem możliwości DLL standardowej i DLL V8