Съвместимост при запис, специфична за версията на PDF

Версия 3.23.0 третира избраната PDF версия за запис като строг договор за изход при пълно записване. Когато приложението извика SetInformation(0, "1.2"), "1.3", "1.4", "1.5", "1.6" или "1.7", SaveToFile, SaveToString и SaveToStream записват изход, който съответства на избраната цел, или се провалят преди да запишат какъвто и да е изход

Пълните записвания премахват overrides за Catalog /Version, така че зареденият документ да не може незабелязано да повиши ефективната версия над избраната заглавка. Целите с по-ниска версия премахват и неподдържаните записи Catalog /Extensions, а целите за PDF 1.3 пропускат Catalog /Metadata и XMP Metadata потоци, като запазват документния информационен речник

Проверката при запис отхвърля известните функции от по-късни версии, вместо да създава файл със смесени версии. Проверяваните граници включват page boxes в PDF 1.3, embedded file streams, JavaScript actions, ICCBased и DeviceN color spaces и ToUnicode CMaps; transparency в PDF 1.4, tagged PDF структури, output intents и ключове на анотации; object streams в PDF 1.5, optional content, XFA, page tabs, append-only флагове за полета за подписи и разширени флагове за полета на формуляри; UserUnit в PDF 1.6, OpenType font programs, 3D dictionaries, NChannel color spaces и viewport данни; и rich media, projection, redaction, разширени анотации и ETSI signature subfilters в PDF 1.7. Същото правило обхваща също annotation /CA opacity, JBIG2Decode, Metadata streams, document-level EmbeddedFiles name tree, JPXDecode, xref streams, Crypt filters, AESV2 crypt filters и PDF 1.7 Requirements

Изискванията от ниво Adobe extension за PDF 1.7 се проверяват отделно от заглавката на PDF 1.7. AESV3, AES-256, RichMedia, Projection, geospatial dictionaries и ETSI signature subfilters трябва да имат достатъчна декларация Catalog /Extensions /ADBE /ExtensionLevel, преди избраната цел за запис да бъде приета. Точките за запис, които излъчват тези функции от ниво разширение, добавят автоматично съответната декларация за разширение, когато избраната цел за запис може да бъде повишена до PDF 1.7

От версия v3.67.0 нататък откриването на функции на съдържание от страната на зареждането е лениво. Зареден документ не се сканира веднага; откриването се изпълнява при първото използване на ефективната версия или на диагностиката на функциите при зареждане чрез GetInformation(0/101/103), GetPDFUADiagnostics, SaveToFile, SaveToString, SaveToStream или свързаните пътища за запис с допълване. Работни потоци само за четене, които никога не заявяват тези диагностики и никога не записват, могат да пропуснат сканирането изцяло

От версия v3.67.1 нататък сканирането за откриване прави повърхностен анализ на потоците. То проверява речниците на обектите и класификацията на потока, като пропуска големите тела на потоците, така че откриването на филтри, подтипове, цветови пространства и ключове за ограничаване по версия остава еквивалентно, докато големите image потоци вече не доминират в сканирането. Обичайните четения на обекти и всеки път за запис все още четат цялото тяло на потока, когато изходът го изисква

От версия v3.67.2 нататък изричните избори на версия за запис запазват приоритета си пред ленивото откриване. При зареден документ SetInformation(0, ...) и LockSaveVersion изпълняват очакваната моментна снимка на откриването, преди да приложат поисканата версия, така че по-късен запис или диагностична заявка да не може да повиши избраната цел зад гърба на извикващия код. Новосъздадените документи не се подготвят за откриване от страната на зареждането, което съответства на по-ранното поведение за управление на версията само от страната на запис

Извикващите TPDFlib получават LastErrorCode 602, когато избраната целева версия е по-ниска от функция, която все още присъства в документа. Изберете по-нова целева версия или премахнете несъвместимата функция преди записване