Перетворення завантаженого PDF у растровий PDF/A-4
HPDFArchivalConversion створює новий документ PDF/A-4 із видимого вмісту сторінок завантаженого документа THotPDF, використовуючи строгий нативний рендеринг і поданий профіль ICC sRGB
Кожна вихідна сторінка містить стиснуте без втрат растрове зображення RGB у запитаній роздільній здатності DPI, причому оригінальні видимі розміри, кадрування, обертання та UserUnit відображаються в геометрії вихідної сторінки
Точки входу
function HPDFConvertLoadedToPDFA4Raster(Source: THotPDF;
Destination: TStream; const SRGBProfile: TBytes;
const Options: THPDFArchivalConversionOptions;
out Report: THPDFArchivalConversionReport): Boolean;
function HPDFConvertLoadedToPDFA4RasterFile(Source: THotPDF;
const TargetFileName: string; const SRGBProfile: TBytes;
const Options: THPDFArchivalConversionOptions;
out Report: THPDFArchivalConversionReport): Boolean;
Спочатку завантажте джерело й утримуйте будь-який належний викликачу вхідний потік живим, доки не буде знищено вихідний документ
Для звичайної архівної публікації використовуйте файлову точку входу: вона перевіряє наявну ціль на псевдоніми джерела, перш ніж створити монопольний тимчасовий файл у каталозі цілі, валідовує завершене перетворення, скидає файл на диск і замінює ціль через MoveFileEx з MOVEFILE_REPLACE_EXISTING і MOVEFILE_WRITE_THROUGH
Збої перетворення, рендерингу, валідації, скасування чи публікації зберігають наявний цільовий файл і видаляють тимчасовий результат
Потокова точка входу вимагає порожнього цільового потоку з позиціюванням у нульовій позиції та відхиляє відомі псевдоніми входу через IsLoadedSourceStreamAlias; вона публікує байти лише після того, як повний підготовлений результат пройде нативну валідацію
Збій запису в ціль запускає спробу скидання до порожнього потоку, але довільний пристрій або власний потік може відхилити це скидання і залишити частковий запис; коли публікація файлу має бути атомарною, використовуйте файлову точку входу
Параметри та межі ресурсів
| Параметр | За замовчуванням | Значення |
|---|---|---|
DPI | 150 | Запитана фізична роздільна здатність, прийнятний діапазон від 36 до 1200 |
MaxPages | 1000 | Максимальна кількість завантажених сторінок джерела |
MaxPixelsPerPage | 40,000,000 | Максимум пікселів сторінки та максимум пікселів окремого зображення джерела |
MaxTotalPixels | 500,000,000 | Максимум накопичених растрових пікселів результату |
MaxRasterBytes | 256 MiB | Максимальне растрове виділення для сторінки чи зображення джерела, з консервативною перевіркою чотири байти на піксель |
MaxOutputBytes | 256 MiB | Максимальний розмір підготовленого PDF, застосовується перед виділенням потоку та записами |
MaxDecodedStreamBytes | 64 MiB | Обмежує кожен ланцюг фільтрів, спільний preflight вмісту кожної сторінки, окремі нативні callback читання потоку, окремі закодовані потоки зображень джерела та нативний валідатор результату |
MaxTotalDecodedBytes | 256 MiB | Обмежує додаткову нативну роботу фільтрованих декодерів упродовж перетворення, спільний preflight вмісту по сторінках і накопичені нативні callback читання потоку по сторінках |
MaxInputObjects | 200,000 | Максимальна кількість уже завантажених непрямих об'єктів |
CancellationToken | nil | Позичений токен, який перевіряється перед роботою, під час нативного рендерингу та декодування й перед публікацією |
Checkpoint | nil | Позичений синхронний callback, який викликається з nil-відправником на контрольних точках перетворення та нативних ресурсів; не заходьте повторно у вихідний документ |
Ліміти декодування рахують роботу декодера й можуть знову списати той самий фільтрований потік під час preflight, компіляції display list і рендерингу; збільшення бюджету є явним рішенням викликача
Preflight пікселів охоплює і запитану фізичну роздільну здатність, і цілочисельний DPI нативного рендерера після масштабування UserUnit; дуже малі одиниці можуть вимагати додаткових растрових пікселів, а дробові розміри сторінки можуть призвести до субпіксельного ресемплінгу, коли зображення відображається назад на фізичну сторінку
Межі перетворення застосовуються після завантаження джерела; коли приймаєте недовірений вхід, налаштуйте власні ліміти ресурсів завантажувача
Граф об'єктів джерела зберігається, тоді як кеші читання та статистика декодування можуть бути заповнені; налаштування рендерингу, токен скасування, бекенд і бюджети декодування відновлюються і при успіху, і при збої
Надайте перетворювачу монопольний доступ до свого вихідного документа, доки він тимчасово застосовує ці налаштування
Рендеринг і колір
Кожна сторінка має відрендеритися без нативної резервної діагностики, відкинутої діагностики чи збою відсутнього ресурсу; непідтримуваний вміст відхиляє перетворення замість публікації неповної сторінки
Аргумент ICC має описувати sRGB із розпізнаним представленням matrix/TRC, стандартними основними кольорами, адаптованими до D50, і передавальною функцією IEC sRGB; сторонні профілі RGB, профілі CMYK, пошкоджені профілі та профілі на основі LUT відхиляються
Результат оголошує sRGB OutputIntent і метадані XMP PDF/A-4; власний proof- чи вихідний ICC-процес, уже налаштований на джерелі, відхиляється, оскільки його налаштування декодера зображень не можна безпечно переінтерпретувати як sRGB
Збірка FPC вимагає свого нативного кодекового мосту з доступним LittleCMS і відхиляє перетворення, коли цей бекенд керування кольором відсутній
Потоки зображень JPEG і JPX, включно із закодованими inline-зображеннями, перевіряються на фактичні розміри кодопотоку перед нативним декодуванням пікселів і мають збігатися зі словником зображення PDF
JPEG приймає обмежені заголовки 8-бітних baseline, extended sequential і progressive; JPX приймає обмежені заголовки J2K SIZ і JP2-бокси звичайної довжини щонайбільше з чотирма компонентами та точністю компонент щонайбільше 16 бітів
Закодовані кодеки мають додатковий консервативний робочий бюджет 64 байти на піксель джерела, а метадані тайлів JPX обмежені і MaxInputObjects, і 1024 байтами на тайл у межах MaxRasterBytes; типові 256 МіБ растрового бюджету відтак дозволяють щонайбільше 4,194,304 закодованих пікселів джерела, і викликачі можуть явно збільшити його для більших зображень
Перетворення JBIG2 відхиляється, оскільки його внутрішні виділення регіонів і символів не можна обмежити через доступний header API; нетермінальні кодеки зображень, JP2-бокси розширеної довжини, непідтримувані обгортки та загорнуті кодекові потоки з DecodeParms також відхиляються
Параметри факсу CCITT мають зберігати оголошені додатні розміри зображення; перевизначення DecodeParms.Columns і Rows, що відрізняються від словника, включно з невідомим Rows=0, відхиляються перед нативним декодуванням
Ці перевірки обмежують відомі профілі заголовків і виділень, які приймає цей перетворювач, і не обіцяють повної пісочниці пам'яті процесу для кожного нативного декодера
Втрата інформації та якості
- Векторний вміст, шрифти, прозорість і колірні простори джерела стають пікселями RGB сторінки; більший DPI покращує візуальну деталізацію, але збільшує використання пам'яті та розмір файлу
- Текст результату не можна шукати чи виділяти, а текстовий шар або результат OCR не синтезуються
- Анотації, вигляди анотацій, поля форм, вигляди віджетів і видимі вигляди підписів пропускаються, а не вбудовуються в растр сторінки
- Цифрові підписи, вбудовані файли, скрипти, дії, закладки, шари як інтерактивні елементи керування, структурні теги та оригінальна ідентичність документа не зберігаються
- Результат не зберігає редагованість векторів, чинність оригінальних підписів, доступність PDF/UA чи семантику вихідного документа
THPDFArchivalConversionReport надає стан успіху та скасування, кількість сторінок джерела і відрендерених, растрові пікселі, байти результату, кількості вилучених анотацій/форм/вкладень, діагностику збою та знахідки нативної валідації
FailureKind розрізняє afkNone, afkConversion, afkBudget і afkCancelled; типізовані бюджетні збої перетворювача також надають BudgetMetric, BudgetObserved і BudgetLimit
Виняток у контрольній точці зупиняє перетворення і повідомляється через нативний результат збою; обгортки, яким потрібна початкова категорія callback-винятку, мають зберегти її до того, як перетворювач її перехопить
Операція archive.pdfa4.raster JSON і C ABI вимагає явного прийняття втрати інформації, зберігає дескриптор джерела, доставляє валідований PDF і звіт про втрати та застосовує консервативні межі бюджету завдання
Перевірка відповідності
Перетворювач перечитує свій підготовлений результат і вимагає ValidatePDFA4 з базовим профілем PDF/A-4 перед публікацією; нативний валідатор покриває свій задокументований обмежений набір правил і не є доказом кожної вимоги ISO 19005-4
Для незалежного приймання можна використати veraPDF з --flavour 4; регресійна фікстура з невбудованим текстом, прозорістю, зображенням RGB, посиланням, віджетом підпису та вкладенням пройшла veraPDF 1.30.2 без жодної невдалої перевірки чи правила
Для цільового не-GUI регресійного набору запускайте Tests/Delphi/Run-HotPDFArchivalTests.bat