Перетворення завантаженого 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; вона публікує байти лише після того, як повний підготовлений результат пройде нативну валідацію

Збій запису в ціль запускає спробу скидання до порожнього потоку, але довільний пристрій або власний потік може відхилити це скидання і залишити частковий запис; коли публікація файлу має бути атомарною, використовуйте файлову точку входу

Параметри та межі ресурсів

ПараметрЗа замовчуваннямЗначення
DPI150Запитана фізична роздільна здатність, прийнятний діапазон від 36 до 1200
MaxPages1000Максимальна кількість завантажених сторінок джерела
MaxPixelsPerPage40,000,000Максимум пікселів сторінки та максимум пікселів окремого зображення джерела
MaxTotalPixels500,000,000Максимум накопичених растрових пікселів результату
MaxRasterBytes256 MiBМаксимальне растрове виділення для сторінки чи зображення джерела, з консервативною перевіркою чотири байти на піксель
MaxOutputBytes256 MiBМаксимальний розмір підготовленого PDF, застосовується перед виділенням потоку та записами
MaxDecodedStreamBytes64 MiBОбмежує кожен ланцюг фільтрів, спільний preflight вмісту кожної сторінки, окремі нативні callback читання потоку, окремі закодовані потоки зображень джерела та нативний валідатор результату
MaxTotalDecodedBytes256 MiBОбмежує додаткову нативну роботу фільтрованих декодерів упродовж перетворення, спільний preflight вмісту по сторінках і накопичені нативні callback читання потоку по сторінках
MaxInputObjects200,000Максимальна кількість уже завантажених непрямих об'єктів
CancellationTokennilПозичений токен, який перевіряється перед роботою, під час нативного рендерингу та декодування й перед публікацією
CheckpointnilПозичений синхронний 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, відхиляються перед нативним декодуванням

Ці перевірки обмежують відомі профілі заголовків і виділень, які приймає цей перетворювач, і не обіцяють повної пісочниці пам'яті процесу для кожного нативного декодера

Втрата інформації та якості

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