Zgodność zapisu z poszczególnymi wersjami PDF

Wersja 3.23.0 traktuje wybraną wersję zapisu PDF jako ścisły kontrakt pełnego zapisu. Gdy aplikacja wywołuje SetInformation(0, "1.2"), "1.3", "1.4", "1.5", "1.6" lub "1.7", SaveToFile, SaveToString i SaveToStream zapisują dane wyjściowe zgodne z wybraną wartością docelową albo kończą się niepowodzeniem przed zapisaniem danych

Pełny zapis usuwa nadpisania Catalog /Version, aby wczytany dokument nie mógł niejawnie podnieść efektywnej wersji ponad wybrany nagłówek. Cele niższych wersji usuwają również nieobsługiwane wpisy Catalog /Extensions, a cele PDF 1.3 pomijają Catalog /Metadata i strumienie XMP Metadata, zachowując słownik informacji o dokumencie

Kontrola wstępna zapisu odrzuca znane funkcje późniejszych wersji zamiast tworzyć plik o mieszanych wersjach. Sprawdzane granice obejmują prostokąty stron PDF 1.3, strumienie osadzonych plików, akcje JavaScript, przestrzenie kolorów ICCBased i DeviceN oraz CMap ToUnicode; przezroczystość PDF 1.4, struktury Tagged PDF, zamiary wyjściowe i klucze adnotacji; strumienie obiektów PDF 1.5, opcjonalną zawartość, XFA, karty stron, flagi pól podpisu tylko do dołączania i zaawansowane flagi pól formularza; UserUnit PDF 1.6, programy czcionek OpenType, słowniki 3D, przestrzenie kolorów NChannel i dane viewport; oraz rich media PDF 1.7, projekcję, redakcję, zaawansowane adnotacje i podfiltry podpisów ETSI. Ten sam zestaw reguł obejmuje również krycie adnotacji /CA, JBIG2Decode, strumienie Metadata, drzewo nazw EmbeddedFiles na poziomie dokumentu, JPXDecode, strumienie xref, filtry Crypt, filtry kryptograficzne AESV2 i Requirements PDF 1.7

Wymagania poziomu rozszerzeń Adobe PDF 1.7 są sprawdzane oddzielnie od nagłówka PDF 1.7. AESV3, AES-256, RichMedia, Projection, słowniki geoprzestrzenne i podfiltry podpisów ETSI muszą mieć wystarczającą deklarację Catalog /Extensions /ADBE /ExtensionLevel przed zaakceptowaniem wybranego celu zapisu. Punkty wejścia modułu zapisującego emitujące funkcje tego poziomu rozszerzeń automatycznie dodają pasującą deklarację rozszerzenia, gdy wybrany cel zapisu można podnieść do PDF 1.7

Od wersji v3.67.0 wykrywanie funkcji zawartości po stronie modułu wczytującego jest leniwe. Wczytany dokument nie jest skanowany natychmiast; wykrywanie uruchamia się przy pierwszym użyciu efektywnej wersji lub diagnostyki funkcji z czasu wczytywania przez GetInformation(0/101/103), GetPDFUADiagnostics, SaveToFile, SaveToString, SaveToStream albo powiązane ścieżki zapisu przez dołączanie. Przepływy tylko do odczytu, które nigdy nie odpytują tej diagnostyki i nie zapisują, mogą całkowicie pominąć skanowanie

Od wersji v3.67.1 skanowanie wykrywające płytko analizuje obiekty strumieni. Sprawdza słowniki obiektów i klasyfikację strumieni, pomijając duże treści strumieni, dlatego wykrywanie filtrów, podtypów, przestrzeni kolorów i kluczy ograniczających wersję pozostaje równoważne, a duże strumienie obrazów nie dominują już czasu skanowania. Zwykłe odczyty obiektów i każda ścieżka zapisu nadal odczytują pełną treść strumienia, gdy wymagają tego dane wyjściowe

Od wersji v3.67.2 jawne wybory wersji zapisu zachowują pierwszeństwo przed leniwym wykrywaniem. W wczytanym dokumencie SetInformation(0, ...) i LockSaveVersion uruchamiają oczekującą migawkę wykrywania przed zastosowaniem żądanej wersji, dlatego późniejszy zapis lub zapytanie diagnostyczne nie może podnieść wybranego celu poza kontrolą kodu wywołującego. Nowo utworzone dokumenty nie są uzbrajane do wykrywania po stronie modułu wczytującego, zgodnie z wcześniejszym zachowaniem kontroli wersji tylko po stronie modułu zapisującego

Kod wywołujący TPDFlib otrzymuje LastErrorCode 602, gdy wybrana wersja docelowa jest niższa niż funkcja nadal obecna w dokumencie. Przed zapisem wybierz nowszą wersję docelową albo usuń niezgodną funkcję