Огляд проєкту
HotPDF — це бібліотека PDF-компонентів на рівні вихідного коду для Delphi та C++Builder. Вона створена для настільного ПЗ, якому потрібен детермінований PDF-вивід, пряме малювання сторінок, сильна інтеграція з RAD Studio та компактне розгортання
Компонент охоплює повсякденну генерацію PDF, розширене збирання документів, редагування PDF, вивід, насичений зображеннями, форми із захистом від дублювання імен полів, анотації, обгортки полів AcroForm часу створення, повторно використовувані ланцюги конструктора дій для дій відкриття, дій життєвого циклу документа, додаткових дій сторінок, дій анотацій, додаткових дій анотацій та додаткових дій AcroForm, шифрування, робочі процеси підписання, оптимізацію шрифтів і потокові робочі процеси з однієї нативної API-поверхні
Інструментарій завантаженого документа додає видалення за діапазонами сторінок, злиття з урахуванням контурів та AcroForm, обмеження форм із кількома віджетами, редагування геометрії, видимості, обертання, рамок і кольору, повне редагування анотацій, автоматичну активацію голих веб- та email-адрес, пошук наступного збігу без стану, повні типізовані знімки контурів, підписання зі сховища сертифікатів Windows, детермінований друк із колацією та виявленням можливостей паперу, знімки переглядача на всю сторінку, обмежений регіон і межі пікселів, prefetch сусідніх сторінок з урахуванням кешу, постійні виділення сторінок, виділення прямокутником з урахуванням обертання, друк поточного перегляду, навігацію клавіатурою та колесом і VCL-компоненти переглядача
Нещодавні випуски бібліотеки розширили HotPDF від класичного засобу запису PDF до ширшого набору нативних PDF-інструментів, що охоплює специфічне для версій керування функціями PDF 1.3 / 1.4 / 1.5 / 1.6 / 1.7, нативний вивід PDF 2.0, відповідність стандартам PDF/A-1 / -2 / -3 / -4 + PDF/X-1a / -3 / -4 + PDF/UA-1 / -2, цифрові підписи PAdES baseline / extended / long-term-validation, внутрішньопроцесний конвейєр підписання PFX / PKCS#12 з нативними RSA та ECDSA плюс опційними OpenSSL 3 Ed25519 і Ed448, інкрементні оновлення з шифруванням Standard і з відкритим ключем зі збереженням облікових даних, стабільними постійними ID, обертовими ID модифікацій, байт-точними префіксами джерела та байт-точними no-op збереженнями, субсетінг шрифтів CFF / OpenType / CID-keyed CFF та адаптери експорту PDF для FastReport, QuickReport, ReportBuilder і DevExpress ExpressPrinting, які спрямовують наявні звіти через HotPDF як єдиний PDF-бекенд. Direct File API обробляє багатогігабайтні PDF з мільйонами об'єктів файл-у-файл — кількість сторінок, копії, перезапис інформації документа та шифрування чи дешифрування AES-256 — за секунди, тоді як обмежений завантажувач відновлення може перемістити коректну секцію xref або перебудувати зміщення прямих об'єктів після пошкоджених даних startxref і xref, не довіряючи вкладеному об'єктоподібному тексту чи бінарним даним, і публікує події відновлення з діапазонами байтів та явними рівнями довіри
Опційний засіб запису LinearizeOutput додає вивід fast web view із секцією залежностей першої сторінки, групуванням спільних об'єктів, таблицями підказок первинної сторінки та спільних об'єктів і ранньою таблицею перехресних посилань для сумісності, зберігаючи пряме файлове та потокове призначення
Фільтри завантажених потоків проходять крізь повторно використовуваний конвейєр, чия фінальна стадія пише безпосередньо в потоки викликача, а проміжні стадії переливаються крізь незалежно стиснуті блоки та обмежену асинхронну пакетну чергу, зі строгими кінцевими маркерами ASCII85 і ASCIIHex, незалежними стелями декодованих байтів на ланцюг і на документ, лімітами кількості фільтрів і глибини конвейєра, виявленням циклів непрямих посилань, відхиленням рекурсії в тому самому потоці та структурованою діагностикою для кожного успіху чи невдачі
Кодування предикторів тепер відкриває строгі повторно використовувані шляхи TIFF та фіксовані або адаптивні шляхи PNG для упакованих, 8-бітових і 16-бітових растрів; завантажені зображення можуть копіювати нативні або узагальнено декодовані корисні дані безпосередньо в потоки викликача, тоді як вибіркова оптимізація використовує буфери переливу з пам'яті на диск, детерміновану чотиристратегеву базу zlib з наступним бюджетованим розбиттям блоків Zopfli та обмежені паралельні завдання зображень, які фіксують лише менші корисні дані в порядку джерела
Перекомпресія завантажених JPEG і JPEG 2000 може виконувати обмежені випробування якості та обирати детермінований вивід, спільно оцінюючи вибіркову перцептивну похибку та відносну вартість закодованих байтів, з дотриманням явних лімітів візуальної похибки та мінімальної економії
Великі локальні документи використовують обмежене віконне відображення в пам'ять зі спільним LRU-кешем для зчитувань парсера та незмінних лінивих діапазонів потоків, тоді як пороги відображення та геометрія вікна залишаються налаштовуваними, а збої автоматично відкатуються до резервного шляху; сирі стиснуті діапазони, декодовані зображення, скомпільовані списки відображення та відрендерені растрові сторінки мають незалежні ліміти кількості записів, сумарних байтів і допуску на запис, поєднують нещодавність зі старіючим допуском за фіксованою частотою пам'яті для стійкості до скан-забруднення та відкривають статистику заповненості, трафіку й частоти; справедливий планувальник пікової пам'яті на весь процес відкладає конкуруючі завантаження документів, рендеринг, оптимізацію потоків і паралельну оптимізацію зображень до перекриття їх основних робочих наборів, зберігаючи скасування та повідомляючи тиск на допуск; нешифрована серіалізація потоків і керовані викликачем передавання пишуть байти пам'яті, відображених файлів, лінивих файлів, адаптивного кешу та кешу діапазонів без проміжного повнокопійного копіювання потоку; короткоживучі токени та буфери парсера використовують утримувану блокову арену між завантаженнями, прості словники й масиви сканують незмінні діапазони з прямим числовим перетворенням та однопрохідною вкладеністю, налаштовувані бюджети байтів, агрегованих токенів, записів контейнерів і пошкоджених токенів зупиняють ворожий ввід з типізованою телеметрією, ключам словників більше не потрібні тимчасові об'єкти імен, а повторювані імена, оператори вмісту та незмінні короткі рядки спільно використовують обмежений пул у масштабі документа; модифіковані завантажені потоки використовують LoadedStreamMemoryThreshold для вибору між пам'яттю та власним стиснутим тимчасовим потоком, чиї сирі та стиснуті блоки спільно використовують обмежену асинхронну чергу запису; члени потоків об'єктів індексуються за номером об'єкта та розбираються лише за посилання, тоді як LoadFromRandomAccessSource під'єднує HTTP range-читачі та власні сховища, об'єднує сусідні зчитування крізь обмежений кеш, адаптивно нарощує асинхронне випереджувальне зчитування під час стійкого прямого парсингу, пригнічує спекулятивне транспортування після стрибків, кооперативно скасовує роботу в польоті для пошуку на передньому плані, відновлює ключі паролів з обмежених діапазонів трейлера, xref, ідентифікатора документа та словника шифрування без запитування повного джерела, захоплює точні бінарні записи обробників безпеки з авторитетного зміщення об'єкта, тож відкладене розшифрування не потребує перечитування джерела, відкриває першу лінеаризовану сторінку з її самодостатнього префікса та планує обмежені мінімальні діапазони bootstrap, підказок, сторінок, спільних об'єктів і перехресних посилань для будь-якої пізнішої сторінки, приймаючи легальні короткі зчитування та обидві сумісні розкладки підказок — interoperable й Annex F — за строгих лімітів пам'яті та структури
Відображені локальні файли тепер адаптуються в межах налаштованої стелі байтів: стійкі прямі зчитування використовують більші вікна для зменшення повторних відображень, стійкі далекі або зворотні зчитування утримують до 16 менших вікон MRU, зміна режиму потребує повторюваних свідчень, а THPDFMappedFileStatistics повідомляє активну геометрію, пікові відображені байти, лічильники шаблонів доступу та переходи
HotPDFABI.dll відкриває версійований плоский C ABI з перевіреними на компонування структурами колбеків Win32 і Win64, валідованими непрозорими дескрипторами, фіксованими кодами статусів, 64-бітовими зчитуваннями довільного доступу прямо в буфери парсера, повторюваними потоковими записами, явними довжинами байтів, скасуванням, прогресом і діагностикою; build-HotPDF-ABI.cmd будує DLL та бібліотеку імпорту для кожної платформи
Операції з документами через JSON і C ABI поділяють виявлення можливостей, рендеринг, текст Unicode і форми, шари OCR, redaction, підписування PFX та обмежену архівну растрову конвертацію у PDF/A-4 через версійовану схему, бюджети ресурсів, відкат колбеків і атомарний вивід файлів; архівні запити явно приймають втрату інформації та зберігають завантажене джерело
Нативні бекенди FPC надають TIFF, JPEG/JPX, ICC, JBIG2 і Zopfli через перевірений місток кодеків Windows, разом зі справжнім паралельним сторінковим, упорядкованим сторінковим, плитковим, смуговим рендерингом та рендерингом плиток JPEG 2000
Детерміновані диференціальні регресійні пробники порівнюють іменовані рушії в доменах парсингу, рендерингу, тексту та збереження, повторюють кожен результат для виявлення нестабільності, ізолюють винятки, дотримуються меж вводу й виводу, надають вбудовані відбитки SHA-256 HotPDF і видають упорядковану JSON-схему hotpdf.differential.v1
Нативний статистичний стенд регресії продуктивності ізолює робочі навантаження завантаження, збереження, рендерингу та витягання Win32 і Win64, записує розігріви плюс 30 сирих вимірів з p50, p95, вибірковою дисперсією, RSS, вводом/виводом процесу, детермінованою ідентичністю фікстури та метаданими середовища, і зазнає невдачі проти версійованих JSON-порогів
Сховище безперервного корпусу пошкоджених PDF повторно валідує та повторно мінімізує кожен кейс збою в налаштовуваних межах, тримає найменший еквівалентний за підписом ввід між запусками, серіалізує конкуруючі засоби запису процесно-безпечним блокуванням та атомарно публікує PDF з адресацією SHA-256 і файли метаданих hotpdf.corpus.case.v1
Уніфікована телеметрія операцій розділяє резервування планувальника та затримку черги, настінний час від процесорного часу поточного потоку, переносиму утримувану компонентом пам'ять від вибіркового робочого набору процесу, закодований ввід від фінального декодованого виводу, а також повідомляє пікові додаткові живі виділення, дельти байтів вводу/виводу процесу, активність кешу, агреговану роботу фільтрів та розширення декодування
Обмежені детерміновані журнали відтворення захоплюють контрольні точки скасування, доступність діапазонів довільного доступу та булеві або цілочислові результати колбеків у впорядкованій JSON-схемі; строге відтворення валідує підпис кожної події та підставляє записані рішення, тож переривчасте зовнішнє хронометрування та поведінку колбеків можна відтворити без зміни операцій з документом
Завантаження з урахуванням редакцій тепер валідує вільні списки xref і переходи поколінь, зберігаючи обмежені подробиці для дублікованих і затінених визначень об'єктів; руйнівні інкрементні правки зливають наявні та нововивільнені об'єкти в повний детермінований вільний ланцюг, просувають покоління з насиченням, зберігають покоління брудних об'єктів і відкривають статистику перебудови; явні стани об'єктів clean, dirty, released і must-write підтримують звільнення кешу потоків об'єктів після збереження в умовах малої пам'яті, тоді як детермінований порядок словників, потокові версійовані JSON-знімки графа об'єктів та інкрементні оновлення, редаговний діагностичний вивід QDF з обмеженим ремонтом довжини потоків і xref, обмежені ребра залежностей та атрибуція утримуваної пам'яті на основі домінаторів роблять структурну інспекцію відтворюваною
Шари тексту OCR з можливістю пошуку під'єднують обраний застосунком розпізнавач до обмеженого рендерингу сторінок, валідують довіру, геометрію Unicode і пікселів, інвертують обертання сторінки для вирівняного невидимого тексту, опційно прив'язують вивід до одного OCG та фіксують кожну вибрану сторінку через одну транзакцію графа; позначені шари OCR HotPDF можна безпечно замінювати після збереження та перезавантаження, сусідні латинські та кириличні слова отримують явні пробіли Unicode, а консольний приклад SearchableOCR генерує зразки сканів і конвертує вибрані сторінки з вбудованим OCR, RapidOCR чи рушіями Tesseract DLL/CLI, налаштовуваними межами та статистикою конвертації
Вбудований рушій OCR розпізнає звичайний, жирний, курсивний і жирний курсивний ASCII-текст, зокрема вицвілі написи та світлий текст на переважно темній сторінці; слова з неоднозначними збереженими гліфами пропускаються як цілі, щоб уникнути мовчазної втрати символів, порожні чи нерозпізнані сторінки завершуються успішно, а Windows FPC зберігає і 24-бітові, і 32-бітові вхідні пікселі
Опційний нативний DLL-адаптер Tesseract надає налаштовувані режими сегментації сторінок і рушія, багатомовне розпізнавання Unicode, довіру, межі слів та базові лінії через HPDFCreateTesseractDLLOCREngine у збірках Delphi, C++Builder і Windows FPC/Lazarus
Локальний CLI-адаптер Tesseract також приймає THPDFTesseractOptions для одноколонкових, однословних, розсіяних і вертикально-блокових макетів, з явним режимом рушія, таймаутом і лімітами вхідних пікселів; нативний DLL-адаптер використовує напрямок базової лінії, щоб довжина вертикальних слів не роздувала розмір пошукового тексту
Адаптер локальних моделей RapidOCR додає явні шляхи ONNX-моделей, опційну класифікацію кутів, локальні словники та шрифти, керування процесорними потоками, офлайн-попередню перевірку, точні пробіли розпізнаних рядків і обмежене розпізнавання Unicode через THPDFRapidOCROptions у збірках Delphi, C++Builder і Windows FPC/Lazarus
Нативний DLL-адаптер RapidOCR тримає процесорні ONNX-моделі в межах процесу та розпізнає знімки пам'яті через HPDFCreateRapidOCRDLLOCREngine, з пресетами THPDFRapidOCRDLLOptions.ForLanguage для спрощеної та традиційної китайської, англійської, японської, корейської, російської, поширених латинських мов, арабської та гінді, перевіреними локальними пакетами моделей, горизонтальним порядком читання, опційною класифікацією кутів, текстом Unicode, обмеженим виводом і кооперативним скасуванням у збірках Delphi, C++Builder і Windows FPC/Lazarus
Опційні локальні адаптери Tesseract і RapidOCR надають скасовуваний китайський OCR з явними шляхами виконуваного файла та моделей; вбудований рушій залишається типовим, а зовнішні рушії, пакети Python, моделі та локальна передумова RapidOCR — Arial — забезпечуються окремо
SetLoadedFreeTextPlainText явно замінює зовнішній вигляд підтримуваної завантаженої анотації FreeText вирівняним ліворуч ASCII-текстом Helvetica для перезапису або інкрементного збереження, тоді як SetLoadedAnnotationContents змінює лише збережений вміст
SetLoadedFreeTextText перебудовує вигляди завантаженого Unicode та багатого FreeText з вбудованими шрифтами, перенесенням, вирівнюванням, прозорістю, обертанням та атомарною обробкою переповнення; SetLoadedFreeTextRichText тепер оновлює і видимий вигляд, і збережений вміст
Декодування штрихкодів завантажених сторінок рендерить повну сторінку або регіон у межах media-box прогресивними обмеженими фрагментами, передає кожен оригінальний або повернутий на чверть растр обраному застосунком декодеру, валідує Unicode, сирі байти, довіру та межі, розгортає обертання растра й сторінки в простір користувача PDF і дедуплікує перекривні корисні дані
Виявлення redaction із попереднім рецензуванням поєднує вбудовані шаблони PII з урахуванням контрольних сум з обраними застосунком детекторами сутностей та облич, відображує кожен прийнятий діапазон або растровий прямокутник у простір сторінки PDF, починає кожну знахідку як очікувану та атомарно розміщує лише знахідки з одночасною явною ухвалою та ідентичністю рецензента, не випалюючи вміст
Перезапис кольору завантажених сторінок конвертує вибране малювання в DeviceGray, DeviceRGB або DeviceCMYK, зберігає звичайний текст і шляхи кольорів пристрою як доступні для пошуку вектори, рендерить зображення, форми, візерунки, затінення, прозорість, ICC і колір Type 3 через один безвтратний образ процесу за потреби, типовим чином зберігає сторінки зі spot-кольорами та атомарно фіксує повний обмежений пакет
Структурований експорт завантажених сторінок записує вибрані сторінки як UTF-8 HTML, XHTML, XML або JSON з однієї доступної моделі читання, віддаючи перевагу тегованому порядку та зберігаючи мову і назву документа, заголовки, списки, таблиці, рисунки, альтернативи, контури, мітки сторінок, безпечні посилання, анотації та нечутливі елементи форм за атомарного скасування та бюджетів байтів
Типізоване витягання таблиць конвертує виявлену геометрію таблиць у публічну канонічну сітку, поєднує сумісні фрагменти та сусідні сторінки, позначає повторювані заголовки та об'єднані діапазони колонок, виводить керовані локаллю цілі числа, числа, булеві значення, дати, дати-час, валюти та відсотки з довірою та атомарно записує обмежений CSV або багатий на метадані JSON
Опційні обробники документів розпізнають XPS, EPUB і CBZ з інспектованого вмісту, зберігають порядок фіксованих сторінок, корінця чи природний порядок зображень, конвертують скорочені шляхи XPS та суцільні, багатостопові лінійні або еліптичні радіальні градієнтні пензлі властивостей-елементів у нативні PDF-вектори та затінювальні візерунки, заповнюють шляхи з кешованих ресурсів ImageBrush пакета JPEG, PNG, TIFF або JPEG XR з обмеженим відображенням viewbox і viewport, трансформаціями, локальними для пензля, нативними повторюваними або відбитими візерунками зображень та альфою soft-mask PNG, застосовують значення Path.OpacityMask суцільних, градієнтних або зображувальних масок крізь згорнуту альфу або спільні групи прозорості DeviceGray, компонують перекривні нащадки Canvas один раз крізь ізольовані групи DeviceRGB заради Opacity і Canvas.OpacityMask, компілюють дерева XPS VisualBrush — вбудовані або з ресурсів — у повторно використовувані Form XObjects та обмежені мозаїчні візерунки, відображують обмежену трансформовану структуровану геометрію Canvas.Clip у вкладені нативні шляхи відсікання PDF, зберігають обмежені кластери XPS Glyphs, точні програми шрифтів пакета та ID гліфів, явні аванси, зміщення, RTL-origins, прозорість, повторне використання ресурсів, витягання Unicode, трансформовану навігацію HTTP, HTTPS, пошти, сторінок пакета та LinkTarget крізь кліповані нативні PDF-анотації, успадковують навігацію в масштабі Canvas крізь нащадків-візуали з вкладеними перевизначеннями, видають позиційовані прогони TJ, дотримуються спільних бюджетів архіву, ресурсів, reflow, сторінок, посилань, URI, геометрії, вмісту груп, пікселів, виводу та скасування, і повторно використовують один незмінний PDF-кеш заради атомарного експорту та рендерингу
Віддалене підписання CSC під'єднує наявний конвейєр провайдера CMS до сервісів CSC API v2 крізь власний для застосунку HTTP-транспорт, з оновленням OAuth, виявленням ланцюга облікових даних, точною обробкою SAD із закріпленням хешу, обмеженими впорядкованими пакетами multisign, синхронним або асинхронним підписанням, обмеженим опитуванням, мітками часу RFC 3161, скасуванням, ключами ідемпотентності з адресацією вмісту SHA-256 та скінченним кешем завершених операцій
Вкладені транзакції графа об'єктів copy-on-write знімають знімок кожного торкнутого непрямого кореня один раз на точку збереження, зберігають адреси коренів під час відкату, відновлюють виділення номерів об'єктів, прибирають додані корені, переливають історію великих потоків за налаштовуваний поріг та відкривають статистику знімків у пам'яті та з файлового бекенду
Повторно використовувані елементи верстки підтримують вимірювання без побічних ефектів, верифіковані головки розбиття та власні продовження переповнення для абзаців, рядків, контейнерів і власного вмісту; декларативні колбеки сторінок компонують фони, колонтитули, вміст документа та передні плани в стабільному порядку, тоді як необмежені звіти зберігають файлове розміщення сторінок, обмеження абзаців, обмежену діагностику, семантичні помічники та керування напрямком bidi
Рендеринг завантажених сторінок виконує кольорові та некольорові мозаїчні візерунки плюс осьові, радіальні, вільні та ґратчасті Гуро, Coons patch і тензорно-добуткові patch-затінення для заливок і обведень, дотримується матриць візерунків у усталеній системі координат батьківського вмісту, підтримує всі три типи мозаїки та знакові кроки, ізолює шлях кожної клітинки, застосовує некольорові базові відтінки до операцій заливки й обведення та обмежує рекурсивну глибину візерунків, виконання плиток, декодування сіток і адаптивну тесаляцію для ворожих ресурсів
Продакшн-рендеринг бітмапів, direct-DC, форм та відтворення списків відображення тепер спільно використовують один інтерпретатор токенів вмісту зі скасуванням на рівні оператора; скомпільовані списки відображення кешують індекси операторів для відтворення без сканування операндів і відкривають кількість команд через THPDFPageDisplayList.OperatorCount і THPDFDisplayListInfo.OperatorCount, тоді як рендерер зберігає свою повну машину станів графіки та ресурсів
Ізольовані та knockout групи прозорості рендеряться крізь обмежені плитки по 768 пікселів з абсолютною безперервністю координат пристрою, локальним для плитки зберіганням альфи та soft mask, однопрохідним декодуванням і токенізацією форм, детермінованим відновленням стану вкладених груп та статистикою пікового робочого набору, доступною через GetLastTransparencyGroupTileStats
Опційний proofing overprint зберігає фарби процесу, які малювання не називає, застосовує захист нульової компоненти /OPM 1 для DeviceCMYK, трактує DeviceGray як чорну фарбу процесу та поєднує spot-відтінки Separation і DeviceN через їх альтернативні перетворення кольору
Повторювані гліфи Type 3 повторно використовують обмежені списки відображення CharProc, ключовані за шрифтом, гліфом, лінійною матрицею та станом кольору, уникаючи повторного декодування й токенізації потоків, зберігаючи трансляцію, відсікання, вкладені ресурси, правила кольору d0/d1 і ліміти рекурсії
Прогресивні сеанси завантажених сторінок декодують відповідні прогресивні зображення DCTDecode по одному скану на обмежене продовження заради раніших видимих попередніх переглядів, відкривають лічильники сканів і зображень через THPDFLoadedPageRenderSession і надають скасовувані сповіщення THPDFProgressiveJPEGScanEvent, зберігаючи резервний шлях повного зображення для непідтримуваного стану малювання чи збоїв декодування
Прогресивні регіональні сеанси виділяють лише запитане вікно простору користувача, зберігають стан графіки й тексту між обмеженими продовженнями, використовують консервативні межі списку відображення для відсікання нерелевантних шляхів, тексту, зображень, форм і затінень та відкривають лічильники видимого й відсіченого малювання для телеметрії
Декодування JPEG 2000 валідує окремі плитки кодового потоку, поєднує реконструкцію за регіоном джерела та роздільністю інтересу і паралельно декодує незалежні видимі плитки з приватним станом кодека, скасуванням, лімітами робочих потоків CPU і користувача, детермінованою композицією та автоматичним відкатом до бюджету пікової пам'яті
Кеш-попадання завантажених зображень тепер повертають незмінні декодовані растрові дескриптори з підрахунком посилань, які переживають виселення та знищення документа, підтримують безпечне для потоків пряме малювання, зберігають ізольовані змінні копії на вимогу та усувають повторне піксельне копіювання з теплих шляхів рендерера
Паралельний рендеринг завантажених сторінок тепер перекриває компіляцію списків відображення з відтворенням між динамічно збалансованими робочими процесами, компілює нерелевантні сторінки поза блокуванням кешу, починає вивід до завершення компіляції повного вхідного набору, зберігає порядок вводу та повідомляє телеметрію паралелізму стадій, використання кешу, завершення і затримок через THPDFParallelRenderPipelineInfo; RenderLoadedPagesParallelOrdered додає колбеки викличного потоку з обмеженою чергою завершених растрових зображень, backpressure упорядкованого вікна, кооперативним скасуванням колбеків та позиченими часами життя bitmap для завдань, чиї повні растрові результати не повинні залишатися резидентними
Обидва паралельні API сторінок тепер використовують планувальник пікової пам'яті на весь процес, щоб зменшувати кількість запитаних робочих потоків від консервативних оцінок сторінок, резервувати кожну заявлену сторінку, справедливо відкладати роботу під тиском та повідомляти похідну від пам'яті паралельність, пікові зарезервовані байти, допуски, затримки й час очікування; упорядковані колбеки тримають резерви виводу активними до звільнення bitmap, тож чергові растри та активні робочі процеси спільно використовують один бюджет
RenderLoadedPageTilesParallel і RenderLoadedPageBandsParallel потоково передають одну сторінку крізь ізольовані робочі процеси з доставкою плиток у порядку рядків або смуг зверху вниз, позиченими часами життя bitmap, кооперативним скасуванням, керованим викликачем пам'яттю в польоті та обмеженим незмінним кешем послідовностей токенів гліфів Type 3 і порогових екранів напівтонів
SaveLoadedPageToPng, SaveLoadedPageToPngStream, SaveLoadedPagesToTiffBanded і SaveLoadedPagesToTiffStreamBanded живлять той самий смуговий рендерер потоковими енкодерами PNG або TIFF, видаючи стиснуті рядки без повного фреймбуфера та повідомляючи телеметрію смуг, рядків, робочих процесів, пам'яті, виводу, часу та скасування
Підключувані бекенди рендерингу завантажених сторінок отримують скомпільовані списки відображення та доступ до ресурсів документа, оголошують можливості паралельності та керування кольором, беруть участь у синхронному та паралельному рендерингу, інвалідують застарілі растрові кеші під час заміни та відкривають детерміновану статистику збоїв, резервних шляхів і виконання; вбудований нативний бекенд GDI зберігає наявний вивід, не заявляючи апаратного прискорення
Prefetch завантажених сторінок тепер компілює та рендерить поза блокуванням кешу з контрольними точками кооперативного скасування, одразу поступається рендерингу сторінок на передньому плані та повідомляє прогрес запитів, використання кешу, збої, лічильники витіснення і затримку скасування через THPDFLoadedPagePrefetchInfo
Валідація графа сегментів JBIG2 тепер перевіряє як потоки зображень, так і глобальні потоки перед нативним або зовнішнім декодуванням, відхиляє пошкоджені залежності та недійсну вбудовану організацію в межах явних бюджетів сегментів, ребер, глибини та символів і не пускає недійсні спільні словники до кешу globals
Пакетне кодування JBIG2 тепер тренує символи по повному наборі сторінок крізь зовнішній статичний бекенд, спільно використовує один глобальний словник між усіма image XObject, згортає точні дублікати сторінок, за дозволу відкатується до нативного акумулятора та публікує телеметрію бекенду, розміру, символів і бюджету
Векторний та зображувальний рендеринг на основі ICC застосовує повні кольорові конвеєри джерела, proof, виводу та sRGB з обираним наміром рендерингу та компенсацією точки чорного, тоді як безпечний для потоків обмежений LRU-кеш повторно використовує перетворення між екземплярами документів і рендерерів
Перекомпресія завантажених зображень та даунсемплінг за ефективним DPI зберігають калібровані визначення виводу, тоді як вирівнювання прозорості видає калібрований RGB і зберігає сторінки Separation або DeviceN як векторний вміст замість відмови від ідентичності spot-кольорів
Дії обчислення та валідації завантажених AcroForm можуть використовувати обмежену типізовану підмножину виразів з булевими значеннями, числами, рядками, null, undefined, масивами, умовними та короткозамкненими операторами, детермінованими датами UTC та дозволеними помічниками рядків, масивів, перетворень і Math, тоді як непідтримуваний активний скриптинг завершується відмовою без запуску рушія JavaScript
Опційні прив'язки середовища QuickJS виконують ширший керований застосунком JavaScript через статичні об'єкти або нейтральний до ABI місток-DLL на Win32 і Win64, з налаштовуваними лімітами пам'яті, стека, скриптів, часу та переривань плюс явною семантикою статусів і відновлення
Скриптинг форм XFA розширює обмежений FormCalc умовною логікою, повторюваними числовими масивами та валідованими колбеками екземплярів, тоді як явно увімкнена пісочниця QuickJS додає повний потік керування та нативні типізовані масиви, не відкриваючи об'єктів файлів, процесів, браузера чи мережі; інтерактивне динамічне середовище XFA додає нейтральний до хоста фокус, редагування Unicode, перевірку попадання, обізнане з екземплярами валідування та обчислення, атомарний відкат і обмежений reflow без сплощення
SanitiseLoadedDocument застосовує до завантажених PDF політики лише-JavaScript, активного вмісту або строгих недовірених документів, прибирає недосяжні об'єкти-корисні дані, ущільнює живі номери об'єктів та безпечно перезаписує на місці через атомарну заміну файлу
Знахідки preflight у форматах JSON, HTML і стилі veraPDF відкривають стабільні ідентифікатори правил з простором імен та структуровані розташування PDF з логічним scope, шляхом, ключем і точними координатами об'єкта, сторінки або байта, коли вони доступні, тоді як текстова та CSV сумісність залишається без змін
Повторно використовувані політики валідації тепер поєднують структурний preflight зі строгими або WTPDF вимогами приймання, витягують канонічні метадані декларацій і тверджень, проводять упорядковані пакети файлів крізь обмежені ліміти робочих процесів і черг, зберігають помилки з урахуванням джерела та пропонують режими inspect, add-missing і synchronize для ремонту XMP незалежно від структурного ремонту PDF
Приймання Factur-X і ZUGFeRD тепер перехресно перевіряє MIME-тип первинного вкладення рахунка та назви FileSpec проти реєстрацій AF у EmbeddedFiles і Catalog, відкриває декодований MIME-тип та URI простору імен XMP і відхиляє неспівпадні типи документів XMP або простори імен розширень
Вбудована валідація бізнес-правил е-рахунків виконує всі специфічні для профілю перевірки Schematron з перевіреною сумісністю XPath 2, зовнішніми базами кодів, стабільними ідентифікаторами правил, явними помилками обчислення, безпечним парсингом XML та fail-closed спільними вердиктами
Архівна растрова конвертація завантажених PDF/A-4 перебудовує видимий вміст сторінок як обмежені зображення sRGB у новому валідованому документі PDF/A-4, нормалізуючи шрифти, прозорість і намальовані кольори через строгий нативний рендерер; файловий API готує та атомарно публікує результат, а звіт ідентифікує видалені анотації, форми та вкладення. Цей опційний візуальний архівний шлях відкидає початковий векторний текст, пошуковий текст, підписи та інтерактивний вміст
Вивід PDF 2.0 тепер підтримує ідентифікацію та валідацію PDF/A-4, PDF/A-4e, PDF/A-4f, PDF/UA-2, PDF/X-6, PDF/X-6p і PDF/X-6n, включно з відомими про редакції XMP, що розв'язуються за URI простору імен, транзакційним ремонтом PDF/A-4 для безпечного нормалізування заголовка, трейлера, метаданих, Catalog та презентації з байт-точним відкатом і збереженим вмістом сторінок, обираними наборами правил PDF/X-6 ISO 15930-9:2020 та resolved-errata, фактичними перевірками заголовка і каналів ICC, намірами виведення документа і сторінок, фактичним намальованим кольором та overprint крізь масиви вмісту, вкладеними формами, мозаїчними й затінювальними візерунками, зображеннями, масками зображень, затіненнями, гліфами Type 3, soft masks та зовнішніми виглядами анотацій, успадкованим станом графіки й прозорості, спільною композицією заливки та обведення, зв'язками CIDFont і CMap, обмеженою роботою декодованих байтів і токенів вмісту, елементами структури з урахуванням просторів імен, перевірками метаданих та рядків документа, optional content, фізичною приналежністю анотацій, семантикою форм, структурованими призначеннями, контурами, вкладеними мітками сторінок, авторингом пов'язаних файлів, успадкованими виробничими блоками сторінок, діагностикою з урахуванням пунктів і походженням наборів правил, автоматичною fail-closed валідацією генерації та транзакційним ремонтом PDF/UA-2 для просторів імен, атрибутів, списків, таблиць, Ruby, Warichu, вимови, альтернативного тексту, успадкування мови, порядку заголовків і тегів Artifact
Таблиці Tagged PDF 2.0 отримують обмежене розширення сітки, перевірки перетинів і груп рядків, локальну для таблиці асоціацію заголовків та виявлення циклів, тоді як списки отримують повні перевірки нумерації та ланцюгів продовження; точні послідовності Ruby і Warichu дотримуються, а застосунки можуть записувати підказки вимови на елемент або впорядковані вбудовані лексикони PLS через SetStructurePronunciation і AddPronunciationLexicon
Цикл v2.119.32-51 додав формування арабської / перської / урду на стороні генератора (обов'язкова лігатура LAM-ALEF, 9 літер Arabic Presentation Forms-A), повнофункціональний рушій заміни OpenType GSUB, що охоплює всі LookupType 1-8 з вибором Script / LangSys і замиканням субсетера TTF для замінних гліфів, підтримку контейнерів XFA (XML Forms Architecture) (AddXFAPacket / ClearXFAPackets / XFAPacketCount), родину тригерів полів форм AcroForm /AA /K + /F + /V + /C, реєстрацію шрифтів з багатьма Unicode /DR через RegisterAcroFormFont, сетери атрибутів доступності елементів структури (/Lang / /E / /T) з перечисленням стандартних типів структури Таблиці 333 та типізованим перевантаженням AddStructureElement, і властивості послідовності позначеного вмісту на BeginTaggedContent
Цикл v2.119.52-68 завершив автоматичний конвейєр формування Phase 8 і розширив охоплення писемностей: Arabic Extended-A (включно з U+0750-077F Arabic Supplement та U+08A0-08FF Arabic Extended-A) і персько-урдуські Form-B були розширені до повної таблиці класів з'єднань U+0672-06D5 плюс 26 нових відображень Forms-A, з пост-проходом згортання для LAM-ALEF, пар YEH-HAMZA + голосна (8 лігатур у U+FBEA-FBFB), окремої лігатури Allah (U+FDF2) і 22-кодовой фрази Bismillah (U+FDFD). Нова опційна властивість ShapingFeatures + перечислення THPDFShapingFeature (sfArabicGSUB / sfStandardLigatures / sfContextualLigatures / sfContextualAlternates / sfIndicShaping) змушує генератор автоматично видавати специфічні для шрифту заміни rlig / liga / clig / rclt, керовані GSUB, з приєднанням латинських стандартних лігатур (ff / fi / fl / ffi / ffl / ſt / st через U+FB00-FB06) та складового переупорядкування деванагарі (Repha + передбазова I-matra) до того самого конвейєра. Нові методи можливостей формування для сирійської (GetSyriacJoiningClass / GetSyriacPosition), монгольської (GetMongolianJoiningClass / GetMongolianPosition) і деванагарі (GetDevanagariCategory / ApplyDevanagariReorder) дозволяють викликачам керувати неарабськими складними писемностями через той самий рушій GSUB. GetCodepointAdvance відкриває кешовану em-фракцію /W для розрахунків переносів, а AssignSyntheticCodepointForGID / GetSyntheticCodepointForGID дозволяють генератору видавати будь-який GSUB-замінний GID (кластерні форми деванагарі, стилістичні альтернати, послідовності варіацій CJK) через кодові точки приватної області використання з повною інтеграцією /CIDToGIDMap + /ToUnicode + /W. Кумулятивна ToUnicode CMap тепер постачається з 35 записами зворотного відображення лігатур (8 LAM-ALEF + 18 родини YEH-HAMZA + 1 Allah + 1 Bismillah + 7 латинських), тож копіювання / вставка в читачах-споживачах дає вихідні кодові точки. Скелети документації ChangeLog тепер постачаються 11 мовами (EN / CN / AR / DE / ES / FR / IT / JA / KO / PT / RU) з UI вибору мови; ліміт утримання ChangeLog підвищено з 250 до 500 версійних секцій
Цикл v2.152-v2.190 побудував повний рушій позиціонування OpenType GPOS і розширив охоплення складних писемностей. Опційні перемикачі формування тепер застосовують власний кернінг шрифту (парний, контекстний і справа-наліво), розміщення комбінованих знаків (mark-to-base, mark-to-mark і mark-to-ligature на компонент), курсивні якорі з'єднання та вертикальний кернінг для вертикального тексту, усе записується стандартними текстовими операторами PDF, тож будь-який читач рендерить той самий результат. Формування на стороні генератора тепер охоплює арабську (включно з блоками Supplement, Extended-A та Extended-B), сирійську, монгольську, N'Ko, Adlam, Hanifi Rohingya, тибетський стек приголосних, деванагарі та інші індійські писемності через ланцюг Indic-функцій шрифту, яванську, впорядкування діакритики тайської і лаоської, впорядкування голосних івриту, кхмерську, бірманську, тай-в'єтську та метей-маєк. Родина опційних типографічних функцій OpenType — стандартні, дискреційні та історичні лігатури, малі великі літери, старостильні / лінійні / пропорційні / табличні фігури, верхні та нижні індекси, порядкові, дроби, наукові нижні індекси, чисельники, знаменники, стилістичні та контекстні альтернати, локалізовані форми, чутливі до регістру форми, перекреслений нуль і вертикальні альтернати — може застосовуватися автоматично під час виведення тексту. Копіювання, вставка та текстовий пошук відновлюють оригінальні символи в усьому сформованому виводі, включно з лігатурами та ланцюговими замінами функцій. Вивід шрифтів також став меншим: вбудовані програми шрифтів завжди стискаються Flate, шрифт з кількох сторінок вбудовується один раз на документ, теги субсетів виводяться детерміновано заради відтворюваного виводу, а опційний компактний режим пише plain-ASCII текст стандартними шрифтами як невбудований WinAnsi текст