Zakres automatycznej walidacji

Aktualizacja raportu preflight 3.56.37 dodaje udokumentowaną ścieżkę automatyzacji nad istniejącymi kontrolami plików PDF/A i PDF/UA-1. Demonstracja Delphi PreflightReport obejmuje teraz raporty pojedynczych plików, partie katalogów, wyjście tekstowe/JSON/HTML/CSV, pliki CSV podsumowania UTF-8 oraz porównanie bazowego zwykłego tekstu przez ComparePreflightReports. Tests.Preflight sprawdza sekcje raportu, maszynowo czytelny JSON, samodzielny HTML, wiersze CSV, zapis UTF-8, wiersze różnic i normalizację znaczników czasu.

Seria audytów PDF/UA od 3.56.0 do 3.56.25 rozszerza diagnostykę czytnika i modułu zapisującego dotyczącą metadanych PDF/UA-1, MarkInfo, RoleMap, uprawnień dostępności szyfrowania, XFA, Reference XObjects, kolejności kart i opisów adnotacji, nazw FileSpec, słowników konfiguracji OCG, osadzania czcionek i kodowania TrueType, kolejności nagłówków, numeracji list, identyfikatorów Note, klipów multimedialnych oraz powtarzających się bezpośrednich elementów H podrzędnych. Niskopoziomowa ścieżka czytnika jest dostępna przez CheckFileCompliance; ścieżka modułu zapisującego w pamięci przez GetPDFUADiagnostics.

Prace walidacyjne PAdES w wersji 3.56.x dodają testy i dokumentację wyboru skrótu, uwierzytelnionych atrybutów PAdES-B-B, signing-certificate-v2 IssuerSerial, rozszerzania znacznika czasu podpisu, składania DSS/VRI, wskazania typu zobowiązania oraz atrybutów polityki podpisu. Kontrole te obejmują testy podpisywania i dedykowane strony PAdES w sekcji Security and Signatures.

Aktualizacja walidacji 3.23.0 zaostrza kontrolę zgodności wersji PDF dla PDF 1.2 i dodaje kontrole poziomu rozszerzeń Adobe PDF 1.7. Cele zapisu PDF 1.2 odrzucają teraz funkcje PDF 1.3+, takie jak dane TrimBox strony, zanim zostanie zapisany wynik. AESV3, AES-256, RichMedia, Projection, słowniki geoprzestrzenne i podfiltry podpisu ETSI są sprawdzane względem wymaganej deklaracji /Extensions /ADBE /ExtensionLevel. Punkty wejścia modułu zapisującego emitujące te funkcje poziomu rozszerzeń automatycznie deklarują odpowiedni poziom ADBE, a zapisy dołączające wykonują ten sam preflight co pełne zapisy. Tests.Document, Tests.Version i fixture C++Builder Tests.VersionCompliance obejmują ścisłe odrzucanie PDF 1.2, wyjście AES-256 ExtensionLevel, preflight zapisu dołączającego i reguły SSOT poziomu rozszerzeń.

Aktualizacja walidacji 3.20.0 rozszerza pokrycie EnsureMinVersion po stronie modułu zapisującego o osiem kolejnych punktów wejścia PDFlib: SetDocumentMetadata (PDF 1.4 — strumień XMP /Metadata), SetPDFAMode (PDF 1.4 — /MarkInfo i /OutputIntents), PageJavaScriptAction (PDF 1.5 — Page /AA), DocJavaScriptAction (PDF 1.4 — Catalog /AA), SetTabOrderMode (PDF 1.5 — Page /Tabs), NewOptionalContentGroup (PDF 1.5 — /Type /OCG), SetNeedAppearances (PDF 1.5 — AcroForm /NeedAppearances) oraz NewFormField dla pól podpisu (PDF 1.5 — bit AppendOnly AcroForm /SigFlags). W połączeniu z wpisami v3.15.0 i v3.17.0 PDFlib automatycznie podnosi teraz FVersion w dwudziestu jeden punktach wejścia modułu zapisującego. NewOptionalContentGroup wcześniej podnosiło FVersion bezpośrednio, omijając EnsureMinVersion i LockSaveVersion; teraz korzysta z właściwej ścieżki, więc blokada jest respektowana, a podniesienie pojawia się w AutoBumpedFeatures. Tests.Document obejmuje sześć nowych przypadków automatycznego podniesienia (SetDocumentMetadata 1.3 → 1.4, SetTabOrderMode 1.3 → 1.5, SetPDFAMode 1.3 → 1.4, NewOptionalContentGroup 1.3 → 1.5, SetNeedAppearances 1.3 → 1.5, NewFormField signature 1.3 → 1.5).

Aktualizacja walidacji 3.19.0 implementuje cztery wcześniej odroczone reguły SSOT. Flaga NoToggleToOff bitu 15 /Ff pola Btn (maska 16384) ogranicza zachowanie wyłącznie przycisku radiowego do PDF 1.4 i rozróżnia według /FT = 'Btn'. Reguła DeviceN /Subtype /NChannel rozpoznaje udoskonalenie przestrzeni barw NChannel z PDF 1.6 zakodowane w słowniku atrybutów pod indeksem 4 tablicy DeviceN. Reguła FontFile3 /Subtype /OpenType rozpoznaje programy czcionek OpenType PDF 1.6, gdy strumień jest osiągany przez klucz nadrzędny o nazwie 'FontFile3'. Reguła Sig /SubFilter ETSI działa na słownikach podpisów z /SubFilter ETSI.CAdES.detached lub /SubFilter ETSI.RFC3161, oba PDF 1.7. To pierwszy zestaw callbacków SSOT oparty na świadomości kontekstu Ctx.KeyName. Tests.Version potwierdza obecność wszystkich czterech reguł z prawidłowym MinVersion. Liczba reguł wzrosła z 99 do 103.

Aktualizacja walidacji 3.18.6 dodaje zależne od kontekstu reguły /AA (akcje dodatkowe). /AA występuje w czterech kontenerach słowników PDF o różnych wersjach minimalnych: Catalog /AA (wyzwalacze dokumentu, PDF 1.4), Annot /AA (wyzwalacze adnotacji, PDF 1.4), Page /AA (wyzwalacze strony, PDF 1.5) i Form field /AA (PDF 1.2, prawidłowe przy ścisłych celach PDF 1.2). Trzy nowe callbacki fmkCustom rozróżniają według /Type, dlatego /AA uruchamia tylko regułę zgodną ze swoim kontenerem. /AA adnotacji Widget (pole formularza będące również adnotacją /Subtype /Widget) celowo uruchamia gałąź Annot /AA dla PDF 1.4; jest to akceptowane przybliżenie, ponieważ każdy kontrakt zapisu od PDF 1.4 wzwyż akceptuje już /AA pola formularza. Tests.Version potwierdza obecność wszystkich trzech kontekstowych reguł /AA. Liczba reguł wzrosła z 96 do 99.

Aktualizacja walidacji 3.18.5 naprawia błędną klasyfikację reguły /Tabs i dodaje regułę /NeedAppearances. /Tabs (kolejność kart strony) było wcześniej wymienione dla PDF 1.4 w PDFFeatureRules, lecz specyfikacja zmian Adobe PDF 1.4 (Technical Note #5409) nie wprowadza /Tabs; wpis pojawia się po raz pierwszy w PDF 1.5, tabela 8.10 (Page Object). Reguła znajduje się teraz w sekcji PDF 1.5. Nowa reguła obejmuje AcroForm /NeedAppearances (PDF 1.5, tabela 218), którego wcześniej nie reprezentowano w tabeli. Tests.Version potwierdza brak wpisu /Tabs dla PDF 1.4 i obecność reguły /NeedAppearances PDF 1.5. Liczba reguł wzrosła z 95 do 96.

Aktualizacja walidacji 3.18.1 rozszerza zestaw reguł bitowych o siedem callbacków flag /Ff pól formularza i bit AppendOnly AcroForm /SigFlags. Tx FileSelect (1048576), Ch MultiSelect (2097152), Tx/Ch DoNotSpellCheck (4194304) i Tx DoNotScroll (8388608) wymagają PDF 1.4; Tx Comb (16777216), Tx RichText / Btn RadiosInUnison (33554432), Ch CommitOnSelChange (67108864) oraz AcroForm SigFlags AppendOnly (maska 2) wymagają PDF 1.5. Dziedziczenie /Parent nie jest śledzone — reguły uruchamiają tylko słowniki jawnie zawierające /Ff lub /SigFlags. Tests.Document obejmuje fixture Tx /Ff 16777220 (Comb + NoExport), który podnosi loader z 1.4 do 1.5 i wymienia Comb w ContributorFeatures.

Aktualizacja walidacji 3.18.0 rozpoczyna dodawanie reguł podkluczy i bitów do PDFFeatureRules. Trzy reguły bitowych flag adnotacji obejmują wartości maski /F dla Locked (128, PDF 1.4), ToggleNoView (256, PDF 1.5) i LockedContents (512, PDF 1.7); działają tylko wtedy, gdy słownik ma /Type /Annot. Sześć nowych reguł fmkDictKey obejmuje charakterystyczne podklucze katalogu i strony: /BoxColorInfo (PDF 1.4), /Permissions, /Legal i /PresSteps (PDF 1.5), /VP (PDF 1.6) oraz /Collection (PDF 1.7). Tests.Document obejmuje fixture Annot /F 516 (Print + LockedContents), który podnosi loader z 1.4 do 1.7 i wymienia LockedContents w ContributorFeatures. Tests.Version potwierdza obecność nowych reguł w tabeli.

Aktualizacja walidacji 3.17.0 rozszerza pokrycie EnsureMinVersion po stronie modułu zapisującego o osiem kolejnych punktów wejścia PDFlib: AddLinkToJavaScript, SetOpenActionJavaScript, AddGlobalJavaScript i FormFieldJavaScriptAction (wszystkie PDF 1.3); AddEmbeddedFile i AddFileAttachment (PDF 1.3); SetXFAFromString (PDF 1.5); AddSWFAnnotationFromFile (PDF 1.7). W połączeniu z pierwotnymi wpisami v3.15.0 (SetTransparency, SetPageUserUnit, Encrypt z siłą AES, dwustronicowe tryby SetPageLayout), PDFlib automatycznie podnosi FVersion w trzynastu punktach wejścia wysokich wersji. Tests.Document obejmuje trójkę JavaScript (AddGlobalJavaScript, SetOpenActionJavaScript, AddLinkToJavaScript), która automatycznie podnosi nowy dokument z PDF 1.2 do PDF 1.3.

Aktualizacja walidacji 3.16.3 dodaje opcjonalną blokadę wersji. Nowe API PDFlib LockSaveVersion(Version) przypina FVersion do Version i uniemożliwia EnsureMinVersion po stronie modułu zapisującego w fazie 3 jej podniesienie; UnlockSaveVersion usuwa blokadę. Kontrola podczas zapisu pozostaje bez zmian, więc zablokowany dokument, który otrzyma funkcję wyższej wersji przez wywołanie modułu zapisującego, nadal nie zapisze się z LastErrorCode 602. Tests.Document obejmuje: (a) blokada na 1.3 + SetTransparency: FVersion pozostaje 1.3, AutoBumpedFeatures pozostaje puste, SaveToFile kończy się LastErrorCode 602; (b) blokada na 1.6 + SetTransparency / SetPageUserUnit: oba wywołania działają bez dalszego podnoszenia FVersion; (c) blokada + SetTransparency (odmowa) + Unlock + SetTransparency (dozwolone): FVersion rośnie do 1.4, a AutoBumpedFeatures zapisuje "transparency".

Aktualizacja walidacji 3.16.2 dodaje widok tylko elementów przyczyniających się do wykrywania funkcji podczas wczytywania. CollectMatchesForObject i DetectFeaturesInObjectTree przyjmują teraz parametr BaselineVersion, aby wywołujący mogli podzielić dopasowane funkcje na "every match" (DetectedFeatures, GetInformation 101) i "matches whose MinVersion is strictly above the baseline" (ContributorFeatures, GetInformation 103). TPDFDocument.DetectVersionFromContent przekazuje HeaderVersion pliku jako poziom bazowy, dzięki czemu ContributorFeatures odpowiada na pytanie "why is the effective version higher than the literal file header?". Tests.Document obejmuje fixture wymieniający /CA w DetectedFeatures, ale dający puste ContributorFeatures (żadna reguła nie wymagała więcej niż nagłówek 1.4), oraz fixture łączony, gdzie tylko /UserUnit (1.6) pojawia się w ContributorFeatures, a /TrimBox (1.3) i /StructTreeRoot (1.4) są odfiltrowane.

Aktualizacja walidacji 3.16.1 rozszerza pokrycie wykrywania po stronie loadera o sześć dodatkowych syntetycznych fixtures i testów: ExtGState przezroczystości na stronie (funkcja PDF 1.4 bez podniesienia, bo nagłówek ma już 1.4), wpis Catalog /MarkInfo podnoszący PDF 1.3 do PDF 1.4, zestaw zawartości /OCProperties + OCG podnoszący PDF 1.4 do PDF 1.5, obiekt /Type /3DStream podnoszący PDF 1.5 do PDF 1.6, fixture wielu funkcji potwierdzający, że FVersion odzwierciedla najwyższe wymagane minimum, a DetectedFeatures wymienia każdy wpis przyczyniający się, oraz kontrolę stabilności migawki potwierdzającą, że podniesienia modułu zapisującego po wczytaniu trafiają do AutoBumpedFeatures, podczas gdy DetectedFeatures pozostaje migawką z czasu wczytywania.

Aktualizacja walidacji 3.16.0 kończy plan zgodności wersji PDF wykrywaniem po stronie loadera. Po LoadFromString / LoadFromFile / LoadFromStream TPDFDocument.DetectVersionFromContent przechodzi przez każdy obiekt pośredni za pomocą SSOT i podnosi FVersion ponad dosłowną wartość nagłówka %PDF-X.Y, gdy zawartość wymaga wyższej wersji. Trzy nowe klucze GetInformation (100 = HeaderVersion, 101 = DetectedFeatures, 102 = AutoBumpedFeatures) udostępniają diagnostykę loadera i modułu zapisującego. Tests.Document obejmuje syntetyczny PageUserUnitFixture (nagłówek 1.4, strona /UserUnit 2.0), który loader podnosi do 1.6 przy zachowaniu HeaderVersion 1.4, oraz przypadek nowego dokumentu potwierdzający, że diagnostyczne klucze GetInformation są puste przed wczytaniem.

Aktualizacja walidacji 3.15.0 prowadzi punkty wejścia modułu zapisującego PDFlib (SetTransparency, SetPageUserUnit, Encrypt z siłą AES, dwustronicowe tryby SetPageLayout) przez TPDFDocument.EnsureMinVersion, dzięki czemu wywołanie funkcji wysokiej wersji przy niskiej wersji docelowej SetInformation automatycznie podnosi wersję dokumentu zamiast generować LastErrorCode 602 podczas zapisu. Tests.Document obejmuje nową ścieżkę "set 1.3, SetTransparency, FVersion becomes 1.4 and save writes %PDF-1.4", równoważne ścieżki dla SetPageUserUnit i Encrypt(AES-256) oraz przypadek bez działania, gdy wywołujący już wybrał wersję spełniającą minimum modułu zapisującego.

Aktualizacja walidacji 3.14.3 zamyka fazę 2 prac nad zgodnością wersji, dodając pozostałe typy słowników 3D PDF 1.6 (/Type /3DStream /3DRef /3DBackground /3DRenderMode /3DLightingScheme /3DCrossSection /3DNode) oraz podtypy adnotacji Redact, RichMedia i Projection PDF 1.7 wraz z towarzyszącymi słownikami /Type /Requirement i /ReqHandler. Po tym PATCH SSOT obejmuje funkcje na poziomie rozdziałów od PDF 1.3 do 1.7 w jednej tabeli funkcja–minimalna wersja.

Aktualizacja walidacji 3.14.2 rozszerza zestaw reguł zgodności wersji o rozpoznawanie funkcji PDF 1.5: formularzy /XFA, /AlternatePresentations, drzewa nazw /Renditions, słowników multimedialnych /Type /Rendition /MediaCriteria /MediaPermissions /MediaPlayers oraz podtypu adnotacji Screen.

Aktualizacja walidacji 3.14.1 rozszerza zestaw reguł zgodności wersji o rozpoznawanie funkcji PDF 1.4: /StructTreeRoot, /MarkInfo i słowników StructElem (znakowany PDF), wpisów strony /Tabs i dokumentu /Lang, odwołań /StructParent i /StructParents, słowników /OutputIntents i /OutputIntent, podpisu praw użytkowania /UR3 oraz podtypów adnotacji PDF 1.4 Polygon, PolyLine, Caret, Ink, Popup i Watermark. Tests.Document obejmuje nowe ścieżki "save as PDF 1.3 rejects /StructTreeRoot" i "save as PDF 1.4 keeps /StructTreeRoot".

Aktualizacja walidacji 3.14.0 rozszerza zestaw reguł zgodności wersji o rozpoznawanie funkcji PDF 1.3 (gładkie cieniowanie i słowniki funkcji, przestrzenie barw ICCBased i DeviceN, wpisy strony TrimBox/BleedBox/ArtBox, CMaps /ToUnicode, adnotacje file attachment / Sound / Movie, słowniki /Type /Filespec i /Type /EmbeddedFile, klucze /Group /EF /Alternates /Mask oraz akcje JavaScript). Wersja 3.23.0 zastępuje wcześniejszą tolerancję zgodności PDF 1.2 ścisłą kontrolą PDF 1.2. Tests.Document obejmuje teraz ścisłe odrzucanie danych TrimBox PDF 1.3 dla PDF 1.2 oraz preflight wersji zablokowanego zapisu dołączającego.

Aktualizacja walidacji 3.13.0 zachowuje takie samo zachowanie odrzucania zapisu poza wersją jak 3.12.7 (LastErrorCode 602), przenosząc jednocześnie zestaw reguł do dedykowanego modułu Lib\PDFlibVersion.pas i dodając fixture DUnitX Tests.Version, który potwierdza, że tabela reguł zawiera reguły bazowe v3.12.6, a pomocnicze funkcje ciągów wersji poprawnie wykonują konwersję w obie strony.

Macierz walidacji 3.12.0 obejmuje build-zlib-bcc32, build-zlib-bcc64x, build-zlib-vc64, build-jpeg-bcc32 i build-jpeg-vc64, każdy zakończony zerową liczbą obiektów z błędami. Zweryfikowano również kompilacje pakietów biblioteki za pomocą build-Win32-Lib.cmd 37.0 i build-Win64-Lib.cmd 37.0.

Bieżące zestawy Delphi DUnitX zaliczyły 362 z 362 testów na Win32 i 362 z 362 na Win64. Objęte obszary to konwersje kompresji w obie strony, dekodowanie znanych strumieni zlib, ładunki o rozmiarach granicznych, zapisane strumienie wieloblokowe, wyjście HelloWorld /FlateDecode, renderowanie JPEG i PNG, import i eksport obrazów, czcionki, formularze, szyfrowanie, deszyfrowanie, podpisywanie, atrybuty PAdES, drukowanie, pomocnicze funkcje Unicode, bufory, rysowanie na płótnie, strony, tabele, przepływy dokumentów, analiza składni/xref, ścisłe kontrakty zapisu PDF 1.2, preflight wersji zapisu dołączającego, zgodność poziomu rozszerzeń PDF 1.7, diagnostyka PDF/UA oraz generowanie i porównywanie raportów preflight.

Bieżący zestaw GoogleTest C++Builder Win64x zaliczył 61 testów i pominął 2 istniejące testy zależne od przykładów. Obejmuje przepływy pochodzące z demonstracji, znane strumienie zlib-ng, ładunki o rozmiarach granicznych, ładunki wierszy skanowania podobne do PNG, zapisane konwersje wieloblokowe w obie strony, obsługę obrazów, wyjście renderowania, w tym bezpośredni dostęp PdfToImage, szyfrowanie, podpisywanie, drukowanie, ścisłe kontrakty zapisu PDF 1.2, wyjście poziomu rozszerzeń PDF 1.7, preflight zapisu dołączającego i kontrole skompresowanego wyjścia HelloWorld, co waliduje zestaw obiektów bcc64x zlib-ng przez ABI C++Builder.

Dokumentacja HTML jest chroniona przez tools/test_docs_api_coverage.py, który sprawdza, czy każda publiczna funkcja TPDFlib ma angielską stronę referencyjną, oraz przez tools/test_docs_navigation.py, który utrzymuje spójność celów wielojęzycznej nawigacji dziennika zmian w ramkowej powłoce pomocy.

Readme.html i dokumentacja HTML powinny pozostawać spójne, gdy zmienia się widoczne dla użytkownika zachowanie walidacji, preflight, renderowania, podpisywania lub raportów.