Совместимость сохранения по версиям PDF

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

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

Предварительная проверка сохранения отклоняет известные функции более поздних версий вместо создания файла со смешанными требованиями версий. Проверяются границы для page boxes PDF 1.3, встроенных файловых потоков, действий JavaScript, цветовых пространств ICCBased и DeviceN и ToUnicode CMaps; прозрачности PDF 1.4, структур Tagged PDF, output intents и ключей аннотаций; object streams PDF 1.5, optional content, XFA, page tabs, append-only флагов полей подписи и расширенных флагов полей форм; PDF 1.6 UserUnit, программ шрифтов OpenType, 3D-словарей, цветовых пространств NChannel и данных viewport; а также PDF 1.7 RichMedia, Projection, Redaction, расширенных аннотаций и подфильтров подписи ETSI; Тот же набор правил также охватывает непрозрачность annotation /CA, JBIG2Decode, потоки Metadata, дерево имен EmbeddedFiles на уровне документа, JPXDecode, xref streams, Crypt filters, AESV2 crypt filters и PDF 1.7 Requirements

Требования уровня расширения Adobe для PDF 1.7 проверяются отдельно от заголовка PDF 1.7. AESV3, AES-256, RichMedia, Projection, геопространственные словари и подфильтры подписи ETSI должны иметь достаточную декларацию Catalog /Extensions /ADBE /ExtensionLevel, прежде чем выбранная цель сохранения будет принята. Точки входа writer, которые создают такие функции уровня расширения, автоматически добавляют соответствующую декларацию расширения, когда выбранную цель сохранения можно поднять до PDF 1.7

Начиная с v3.67.0, обнаружение функций содержимого на стороне загрузчика выполняется лениво. Загруженный документ не сканируется сразу; обнаружение запускается при первом использовании эффективной версии или диагностик функций загрузки через GetInformation(0/101/103), GetPDFUADiagnostics, SaveToFile, SaveToString, SaveToStream или связанные пути append-save. Сценарии только для чтения, которые не запрашивают эти диагностики и не сохраняют документ, могут полностью пропустить сканирование

Начиная с v3.67.1, скан обнаружения выполняет поверхностный разбор объектов stream. Он проверяет словари объектов и классификацию stream, пропуская большие тела stream, поэтому обнаружение фильтров, подтипов, цветовых пространств и ключей, влияющих на версию, остается эквивалентным, а крупные потоки изображений больше не доминируют в сканировании. Обычные чтения объектов и все пути сохранения по-прежнему читают полное тело stream, когда это требуется для вывода

Начиная с v3.67.2, явный выбор версии сохранения имеет приоритет над ленивым обнаружением. Для загруженного документа SetInformation(0, ...) и LockSaveVersion выполняют ожидающий снимок обнаружения перед применением запрошенной версии, поэтому последующее сохранение или диагностический запрос не может повысить выбранную цель за спиной вызывающего кода. Новые документы не активируются для обнаружения на стороне загрузчика, что соответствует прежнему поведению управления версией только на стороне writer

Вызывающий код TPDFlib получает LastErrorCode 602, когда выбранная целевая версия ниже функции, которая все еще присутствует в документе. Выберите более новую целевую версию или удалите несовместимую функцию перед сохранением