Zgodność zapisu według wersji PDF
Wersja 3.23.0 traktuje wybraną wersję zapisu PDF jako ścisły kontrakt dla pełnych zapisów. Gdy aplikacja wywołuje SetInformation(0, "1.2"), "1.3", "1.4", "1.5", "1.6" albo "1.7", SaveToFile, SaveToString i SaveToStream zapisują wynik zgodny z wybranym celem albo kończą się niepowodzeniem przed zapisaniem danych
Pełne zapisy usuwają nadpisania Catalog /Version, dzięki czemu załadowany dokument nie może po cichu podnieść wersji efektywnej ponad wybrany nagłówek. Cele o niższej 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 dokumentu
Kontrola preflight zapisu odrzuca znane funkcje późniejszych wersji zamiast tworzyć plik o mieszanych wymaganiach wersji. Sprawdzane granice obejmują pola stron PDF 1.3, osadzone strumienie plików, akcje JavaScript, przestrzenie barw ICCBased i DeviceN oraz ToUnicode CMaps; przezroczystość PDF 1.4, struktury Tagged PDF, output intents i klucze adnotacji; strumienie obiektów PDF 1.5, zawartość opcjonalną, XFA, page tabs, flagi append-only pól podpisu i zaawansowane flagi pól formularzy; PDF 1.6 UserUnit, programy czcionek OpenType, słowniki 3D, przestrzenie barw NChannel i dane viewport; a także PDF 1.7 RichMedia, Projection, Redaction, zaawansowane adnotacje i podfiltry podpisów ETSI; Ten sam zestaw reguł obejmuje także nieprzezroczystość annotation /CA, JBIG2Decode, strumienie Metadata, drzewo nazw EmbeddedFiles na poziomie dokumentu, JPXDecode, xref streams, Crypt filters, AESV2 crypt filters i PDF 1.7 Requirements
Wymagania poziomu rozszerzeń Adobe dla 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, zanim wybrany cel zapisu zostanie zaakceptowany. Punkty wejścia writer, które emitują te funkcje poziomu rozszerzeń, automatycznie dodają odpowiednią deklarację rozszerzenia, gdy wybrany cel zapisu może zostać podniesiony do PDF 1.7
Od v3.67.0 wykrywanie funkcji zawartości po stronie loadera jest leniwe. Załadowany dokument nie jest skanowany od razu; wykrywanie uruchamia się przy pierwszym użyciu wersji efektywnej lub diagnostyki funkcji z ładowania przez GetInformation(0/101/103), GetPDFUADiagnostics, SaveToFile, SaveToString, SaveToStream albo powiązane ścieżki append-save. Przepływy tylko do odczytu, które nigdy nie pobierają tych diagnostyk i nigdy nie zapisują, mogą całkowicie pominąć skan
Od v3.67.1 skan wykrywania płytko analizuje obiekty stream. Sprawdza słowniki obiektów i klasyfikację stream, pomijając duże ciała stream, więc wykrywanie filtrów, podtypów, przestrzeni barw i kluczy wymuszających wersję pozostaje równoważne, a duże strumienie obrazów nie dominują już skanu. Zwykłe odczyty obiektów i każda ścieżka zapisu nadal czytają pełne ciało stream, gdy wymaga tego wynik
Od v3.67.2 jawne wybory wersji zapisu mają pierwszeństwo przed leniwym wykrywaniem. W załadowanym dokumencie SetInformation(0, ...) i LockSaveVersion uruchamiają oczekujący snapshot wykrywania przed zastosowaniem żądanej wersji, więc późniejszy zapis lub zapytanie diagnostyczne nie może podnieść wybranego celu za plecami wywołującego. Nowo utworzone dokumenty nie są uzbrajane do wykrywania po stronie loadera, zgodnie z wcześniejszym zachowaniem kontroli wersji tylko po stronie writer
Wywołania TPDFlib otrzymują LastErrorCode 602, gdy wybrana wersja docelowa jest niższa niż funkcja nadal obecna w dokumencie. Wybierz nowszą wersję docelową albo usuń niezgodną funkcję przed zapisem