HotPDF Бележки към изданието

История на версиите за видими за потребителите функции на HotPDF, корекции, актуализации за съвместимост и промени в документацията

Note: Only the latest 500 change records are kept

Last release

  • Latest version: 2.748.6; Release date: 2026-09-07

Version 2.748.6

Fixed

  • Поправено е subsection на cross-reference, който декларира повече записи, отколкото таблицата съдържа, да обхожда целия деклариран брой, макар да не е останало нищо за четене, което правеше отхвърлянето на 40-байтов malformed файл да отнема десетки секунди
  • Поправено е job runner-ът да губи всички резултати, които вече е произвел, когато операция хвърли изключение, и HTML import-ът да губи picture обект, когато stream-ът около него не може да бъде създаден

Version 2.748.5

Fixed

  • Поправено е PKCS#12 файл с парола извън ASCII да не се отваря: паролата е UTF-8 байтов низ, но се разширяваше байт по байт вместо да бъде декодирана, така че извеният ключ беше грешен за всеки символ извън ASCII. Файлове, защитени със съвременната PBES2 схема, не бяха засегнати — затова двете се държаха различно
  • Поправено е signature batch validator-ът и revocation evidence cache-ът да вдигат access violation вместо собствена грешка при конструиране с невалидна опция, защото деструкторът се изпълняваше преди членовете, които той освобождава, да бъдат създадени
  • Поправено е evidence download задачата да се проваля в деструктора си, когато аргументите ѝ бъдат отхвърлени, тъй като проверките се изпълняваха преди самият thread да бъде създаден
  • Поправено е cloud-signature provider-ът да кодира algorithm identifier, чийто втори arc надхвърля 39, а malformed идентификатор вече вдига собствената грешка на provider-а вместо грешка от конверсия
  • Certificate и signature container-ите вече отхвърлят вложен елемент, който декларира дължина, излизаща отвъд елемента, който го съдържа, така че онова, което се валидира, и онова, което подписът покрива, вече не могат да се разминават
  • Стойностите на private key се изчистват от паметта след RSA подписване, вместо да си остават на heap-а за следващото заделяне

Version 2.748.4

Fixed

  • Поправено е зареждането на Type 1 шрифт да чете всяко свойство от първия ред на font програмата: token списъкът се презареждаше, без да бъде изпразван, така че низовете за version, family и weight, stem hint-овете и дължината на charstring ключа всички идваха от стари token-и. Type 1 шрифтовете вече докладват собствените си metadata
  • Поправено е дължината на charstring ключа да се пази като указател към вече освободен низ и да се използва без range check; сега се съхранява като стойност и се ограничава до диапазона, който форматът позволява
  • Поправено е не-вграден шрифт винаги да се връща към системния default face: търсеното име на face се копираше байт по байт в wide-character font записа, така че нито един инсталиран family изобщо не съвпадаше
  • Поправено е парсването на вградени TrueType и OpenType да чете след края на съкратена font програма при декодиране на glyph outline-и, аргументи на composite glyph и CFF таблицата на OpenType container, а malformed character map вече не иска отрицателен glyph масив
  • Поправено е препълване на декларираните номера на обекти в cross-reference таблици и stream-ове: запис, претендиращ за номер близо до лимита на integer, се увиваше в отрицателен индекс и се записваше извън таблицата, а деклариран брой обекти или /Size, далеч по-голям от капацитета на файла, оразмеряваше масивите на loader-а само въз основа на тази претенция

Version 2.748.3

Fixed

  • Поправено е Data Matrix да отхвърля валиден вход: размерът на символа се оценяваше, като броят цифри се делеше на две, но само съседни цифри споделят code word, така че текст като 1a2a3a избираше символ, твърде малък за собствените му данни, и кодирането се проваляше
  • Поправено е четири-байтовите UTF-8 символи в XFDF, като emoji, да се декодират към грешен surrogate pair, а неразпознат байт вече не поглъща трите символа след него
  • Region записите на enhanced metafile вече ограничават броя правоъгълници по размера на записа, вместо да вярват на броя в region header-а, който можеше да чете далеч отвъд записа
  • PNG изображения, чиято декларирана ширина по височина надхвърля адресируемия диапазон, се отхвърлят още на header-а вместо да заделят pixel буфер с отрицателна дължина
  • High-quality resampling на изображения вече докладва заявка извън диапазона вместо да препълни размера на междинния си буфер
  • WebP meta prefix изображение, което претендира повече entropy групи, отколкото пиксели има, се отхвърля вместо да задели стотици мегабайта prefix таблици от вход от няколкостотин байта
  • Поправени са leak-ове по failure пътищата на Aztec кодиране, WebP bitmap декодиране и object-stream decode worker pool-а, където частично изграден обект се изоставяше, когато по-късна стъпка хвърли изключение

Version 2.748.2

Fixed

  • Поправено е QR Code символът да губи последните битове на code word: обхождането при module placement прескачаше най-лявата колона, така че опашката на последния error correction block никога не се записваше в символа
  • Поправено е QR terminator-ът да запълва целия остатък от data block с нулеви битове, което не оставяше място за pad code word-овете 0xEC / 0x11, изисквани от ISO/IEC 18004; символ version 1 носеше шест нулеви code word-а вместо това
  • Нов тест прочита генерирания символ обратно от неговите модули, така че data block, pad code word-овете, error correction block, mask-ата и placement-ът се проверяват срещу стандарта, а не срещу собствения изход на encoder-а

Version 2.748.1

Fixed

  • Поправени са три parser-а да блокират на malformed вход вместо да го докладват: object parser-ът при >> вътре в масив или ] вътре в dictionary, CMap reader-ът при stray скоба или фигурна скоба, и XFDF reader-ът при конструкция без tag име (например document type declaration) или stray байт между атрибути. Всеки от тях спираше да придвижва курсора си, така че един-единствен неочакван байт превръщаше parse-а в безкраен цикъл
  • Поправено е CDATA секция в XFDF да се чете като markup: съдържанието ѝ вече се приема за текст на елемента, а маркерът на секцията се измерва коректно вместо да поглъща първия символ
  • Поправено е дължина на WebP chunk близо до 2 GB да препълва size проверката, така че копието на payload-а четеше след края на file буфера; дължините на chunk-овете вече се проверяват за диапазон в 64-битова аритметика
  • Поправено е PNG chunk с дължина 0xFFFFFFFF да освобождава chunk буфера, докато chunk-ът продължаваше да докладва декларираната си дължина, което оставяше следващи четения да сочат към освободена памет; прекалено дълги chunk-ове се отхвърлят
  • Поправено е CCITT fax декодирането да препълва изчислението на размера на row буфера при много големи декларирани page геометрии, което можеше да пише след буфера; row store-ът вече е ограничен и декодирането спира чисто на лимита
  • Поправено е CCITT encoder-ът да чете един байт след края на scan линия при ширини, кратни на осем
  • Поправено е четенето на comment записите на enhanced metafile през 32-битов съкратен указател на 64-битови build-ове, което четеше несвързан адрес за всеки EMF с GDI comment
  • Поправено е 8-битови изображения с по-малко от 256 palette записи да публикуват неинициализирана памет като опашка на цветовата си таблица, а таблицата вече декларира истинския си брой записи
  • Поправено е дълбоко вложени BER структури с неопределена дължина да изчерпват стека при parse на signature или certificate container; вложение над 128 нива се отхвърля

Version 2.748.0

Fixed

  • Поправена е error correction на всички 2D barcode, които библиотеката чертае: QR Code, Data Matrix, PDF417 и Aztec изграждаха generator polynomial-а си от свободния член нагоре, но делеха по него, сякаш водещият член идва първи, така че всеки символ носеше check words, които нито един коректен reader не приема. Check words вече съвпадат с решените примери в ISO/IEC 18004, ISO/IEC 16022 и ISO/IEC 15438
  • Поправено е Aztec символът да губи payload-а си: encoder-ът дели code word масива на място, а caller-ът излъчва същия масив, така че message words бяха презаписани от деленето и символът не носеше нито данните, нито валидно mode message
  • Поправено е generator polynomial на Data Matrix да започва корените си една степен по-ниско, което произвеждаше различен полином от предписания в ISO/IEC 16022 Annex E
  • Поправен е finder pattern на Data Matrix: плътното L вече е лявата колона и долният ред, а редуващият се clock track — горният ред и дясната колона, като всеки започва тъмен в ъгъла, който споделя с L. Двете бяха разменени, така че reader-ите не можеха да установят ориентацията на символа

Version 2.747.4

Fixed

  • Поправено е редактирането на зареден документ да записва PDF числа със системния десетичен разделител: page stitching, redaction на правоъгълници, text и image stamp-ове, композитни форми за воден знак и ellipse appearance-и винаги изписват точка, така че документи, редактирани на locale с десетична запетая (например немски или френски Windows), повече не съдържат content stream-ове, които viewer-ите отхвърлят
  • Поправено е зареждането на Type 1 шрифт да зависи от системния locale: реалните числа на FontMatrix, BlueValues, stem hint-овете и charstring вече се парсват като PostScript числа с точка, така че PFB шрифтовете запазват метриките и outline-ите си на системи с десетична запетая вместо тихомълчиво да се сриват
  • Поправено е парсването на размера и цвета на шрифта в default-appearance (/DA), на HTML width и size атрибутите, на резултатите от FormCalc и на JSON числата от job да следва locale-а на процеса; те вече използват инвариантния формат и в двете посоки
  • Поправено е вграденото чертане на barcode да записва правоъгълниците на бар-овете през формат, зависещ от locale, което произвеждаше невалиден content stream на система с десетична запетая
  • Free Pascal build-овете вече парсват и форматират operand-ите на content stream, метриките от text extraction и JavaScript числата с инвариантния формат, съответствайки на Delphi build-овете вместо да се връщат към конверсията, зависеща от locale
  • Number writer-ът вече не презаписва десетичния разделител в глобалните форматни настройки на хост приложението при всяко извикване, което променяше начина, по който останалата част от програмата форматираше собствените си числа, и не беше безопасно, когато няколко thread-а произвеждат документи едновременно

Version 2.747.3

Fixed

  • Поправено е редактирането на зареден документ да записва PDF числа със системния десетичен разделител: page stitching, redaction на правоъгълници, text и image stamp-ове, композитни форми за воден знак и ellipse appearance-и винаги изписват точка, така че документи, редактирани на locale с десетична запетая (например немски или френски Windows), повече не съдържат content stream-ове, които viewer-ите отхвърлят
  • Поправено е зареждането на Type 1 шрифт да зависи от системния locale: реалните числа на FontMatrix, BlueValues, stem hint-овете и charstring вече се парсват като PostScript числа с точка, така че PFB шрифтовете запазват метриките и outline-ите си на системи с десетична запетая вместо тихомълчиво да се сриват
  • Поправено е парсването на размера и цвета на шрифта в default-appearance (/DA), на HTML font size атрибутите, на резултатите от FormCalc и на JSON числата от job да следва locale-а на процеса; те вече използват инвариантния формат и в двете посоки
  • Free Pascal build-овете вече парсват и форматират operand-ите на content stream, метриките от text extraction и JavaScript числата с инвариантния формат, съответствайки на Delphi build-овете вместо да се връщат към конверсията, зависеща от locale

Version 2.747.2

Added

  • Добавена е Free Pascal Win32 поддръжка: Lazarus пакетът вече се build-ва както за i386-win32, така и за x86_64-win64 чрез специализирани build entry point-и, smoke suite-ите приемат аргумент за архитектура, а проблемите с 32-bit компилатора и C symbol linking са поправени; създаването на PDF, зареждането, Flate компресията, AES криптирането и обработката на CBZ документи са покрити и на двете цели

Version 2.747.1

Fixed

  • Поправено е retry-ът с ротарирана маска на вградения barcode декодер да оставя остарели байтове в недокоснатите клетки на ротарираната маска, което измисляше фантомно мастило и правеше завъртяните на четвърт оборот Code 39 символи нечетими; ротираният буфер вече се нулира изрично, така че завъртяни Code 39 снимки и сканирания се декодират през rotation retry

Version 2.747.0

Added

  • Добавен е WebP image import: AddImageFromFile вече приема .webp файлове чрез вграден беззагубен (VP8L) декодер, имплементиращ RFC 9649 — канонични prefix кодове, spatial meta prefix кодове, LZ77 backward references с neighborhood distance картата, color cache-а и всичките четири inverse трансформации (predictor, color, subtract-green, color indexing с pixel bundling); lossy VP8 кадрите се отхвърлят с ясно съобщение

Version 2.746.0

Added

  • Вграденият barcode декодер вече чете QR символи във всяка от осемте ориентации, в които може да пристигне снимана или сканирана страница: finder pattern-ите разпознават липсващия ъгъл, а семплираната module матрица се ротира или огледализира в очакваната подредба преди декодиране, така че завъртанията на четвърт оборот и огледалните снимки се четат без pre-processing

Version 2.745.0

Added

  • Добавена е eIDAS оценка на qualified сертификати за заредени подписи: GetLoadedSignatureQCStatements докладва ETSI EN 319 412-5 QCStatements на сертификата на подписващия — QcCompliance, QcSSCD, QcType стойности, QcLimitValue валута/сума/експонента и PDS локациите — плюс TS 119 495 PSD2 роли на платец и получател, и повдига qualified-signature евристика, когато QcCompliance и QcSSCD са заявени едновременно (решението за QTSP trust остава у повикващия)

Version 2.744.0

Added

  • Добавено е N-up imposition за заредени документи: ComposeLoadedPagesNUp преподрежда всяка страница върху grid-композирани листове с размера на source хартията (2-up, 4-up, 6-up, до 16x16) за print-ready изход, поглъща /Rotate на всяка страница в матрицата на позициониране, споделя page ресурсите с композираната форма и по избор рисува тънки клетъчни рамки с регулируем gutter

Version 2.743.0

Added

  • FlattenLoadedAnnotations вече запечатва анотации без appearance stream, вместо да ги прескача тихо: widget-ите първо получават генериран field appearance от стойността на полето (случаят /NeedAppearances, типичен за формуляри, отпечатани от браузър), така че въведената стойност оцелява в page съдържанието
  • Markup анотации без /AP получават синтезиран appearance, рисуван от собствените им свойства — FreeText и Stamp текст със /DA стилизация и /Q подравняване, Square и Circle фигури с /C / /IC цвят и /BS ширина, Line и Ink щрихи и Highlight / Underline / StrikeOut / Squiggly quad markup, зачитащи /QuadPoints и /CA opacity
  • Скритите анотации (флагът /F hidden) остават анотации, когато нямат appearance, защото запечатването на невидима бележка би я направило видима

Version 2.742.0

Fixed

  • Поправено е провалът на Free Pascal package build-овете от 2.738.0 насам: декларациите на членове за LTV evidence и seed value бяха поставени в Delphi-only conditional блок, докато имплементациите им бяха безусловни, така че Free Pascal пакетът вече не се компилираше; имплементациите сега носят същия conditional и пакетът отново се компилира

Version 2.742.0

Added

  • HTML импортът вече подрежда таблиците върху пълна occupancy решетка, така че rowspan и colspan клетките заявяват своите колони коректно, а следващите редове прескачат заетите слотове, вместо да изместват наляво
  • Височините на редовете на таблицата идват от пренасянето на текста на клетката при собствения ѝ шрифт, вместо от оценка по брой знаци, така че смесеното тясно и широко съдържание вече не произвежда преливащи или прекалено големи клетки
  • Широчините на колоните следват <col> width hint-и и per-cell width атрибути, а заглавните редове, маркирани с <thead> (или водещи редове само от <th>), се повтарят в горната част на всяка продължена страница, когато таблица пресича page break
  • rowspan група се запазва цяла при пренасяне през страници: редовете, съединени от обхващаща клетка, минават заедно на следващата страница, така че обхващащата клетка никога не се реже

Version 2.741.0

Fixed

  • Поправено е Free Pascal build-овете да прекратяват изпълнението вместо да докладват грешка, когато документ се нуждае от някой от codec-ите, които тези build-ове не линкват: отваряне на TIFF, декодиране на JPEG 2000 или JBIG2 изображение, четене на progressive или намален мащаб JPEG, прилагане на ICC цветова трансформация или заявка за Zopfli рекомпресия прекратяваха процеса направо
  • Всяка от тези операции вече се проваля по начина, който повикващият вече очаква, така че документ, използващ една от тях, се зарежда с пропусната функция, вместо да повали приложението

Version 2.741.0

Added

  • Добавено е извличане на текст по структурен ред: ExtractLoadedPageStructureText обхожда дървото от структури на документа в реда на създаване (ISO 32000-1 14.8.4) и конкатенира marked-content run-овете на страница по MCID, така че tag-нати документи като държавни формуляри и достъпни публикации извличат своя авторитетен ред на четене вместо геометрично предположение; глифовете, които дървото никога не заявява, попадат в geometric tail и се броят в untagged отчета

Version 2.740.0

Fixed

  • Поправена е загубата на прозрачност на цветните глифове във Free Pascal build-ове: вградените цветни битмапи се четяха през път, който изхвърля alpha канала, така че всеки emoji или color font глиф се рисуваше като непрозрачен правоъгълник. Битмапите вече запазват своя per-pixel alpha

Version 2.740.0

Fixed

  • Активирано е P-384 ECDH key agreement: финалното условно изваждане в CIOS Montgomery умножението сравняваше с P limb плюс borrow, което се превърта към нула при all-ones high limbs на P-384 / P-521 простите числа и тихо взимаше грешен borrow; сравнението вече открива borrow без преливащото събиране и P-384 споделената тайна съвпада с OpenSSL reference векторите byte по byte

Version 2.739.0

Added

  • Free Pascal build-овете вече шифроват и дешифроват документи: AES entry point-ите се обслужват от собствената FIPS-197 имплементация на библиотеката вместо да докладват unsupported-operation грешка, така че AES-128 и AES-256 защитени файлове могат да се създават и отварят там
  • AES-GCM шифроване и дешифроване, включително streaming контекстът, използван за големи payload-и, са налични във Free Pascal build-ове
  • Free Pascal smoke тестът вече проверява шифъра срещу FIPS-197 known answer, упражнява PKCS#7 и GCM round trips и създава и презарежда AES-256 защитен документ с отхвърляне на грешна парола

Version 2.739.0

Added

  • Добавена е CSS2.1 абзацна типография в HTML5 import engine-а: text-align (с legacy align атрибут и mapping на center тага), letter-spacing и word-spacing чрез PDF Tc / word-space операторите, text-indent за отстъпи на първи ред и text-decoration underline / line-through правила, така че съществуващите web и email HTML импорти запазват центрираните си заглавия, отстъпите и подчертаванията
  • Разширен е вграденият QR декодер отвъд version 1: version-ът на символа вече се извежда от finder геометрията чрез делимост на решетката (version 2-40 с чист module grid се декодират), лимитът на дължина в byte mode следва ISO/IEC 18004 Table 7 капацитета за version, а function-module картата покрива alignment patterns и version information блокове за по-високи символи

Version 2.738.0

Added

  • Free Pascal build-овете вече компресират и декомпресират документи нативно: deflate codec-ът се осигурява от вграден backend върху Pascal zlib имплементацията, която идва с Free Pascal, така че FlateDecode съдържание вече не докладва unsupported-operation грешка
  • Компресирани документи могат да се създават и презареждат под Free Pascal със настройката за компресия по подразбиране, а cross-reference потоци, object потоци, вградени файлове и компресирано page съдържание всички се декодират там
  • Backend-ът покрива zlib и raw deflate wrapper-ите, gzip wrapper-а и автоматичното разпознаване на header, така че SVG импортът и multi-window-size decompression fallback-ът се държат както под Delphi
  • Free Pascal smoke тестът вече верифицира codec-а чрез wrapper и checksum self тест плюс round trip с компресиран документ

Version 2.738.0

Added

  • Добавено е доизграждане на веригата чрез AIA caIssuers: HPDFFetchAIAIntermediates обхожда access-method 1.3.6.1.5.5.7.48.2 endpoint-ите на CMS сертификатно множество през транспорта на повикващия (голите DER и PEM тела се декодират еднакво), а опцията за валидация FetchMissingIntermediates подава извлечените intermediates в изграждането на пътя, така че подписи от cloud-signer с единствен end-entity сертификат се валидират, вместо path building-ът да се проваля
  • Добавено е LTV включване с едно извикване: PopulatePAdESLTVEvidence обхожда всеки зареден подпис, тегли intermediates плюс OCSP/CRL доказателства онлайн и записва материала в document DSS, като надгражда свеж B-B подписан документ до B-LT без ръчно сглобени evidence масиви
  • Добавено е налагане на seed value при подписване: CheckLoadedSignatureSeedValue чете /SV речника на signature поле и проверява кандидат SubFilter, DigestMethod, Reason и DocMDP profile срещу ограниченията му със force-bit семантиката на ISO 32000-1 12.7.5.5, така че ограничения от автора на формуляра се спазват преди поставянето на подписа

Version 2.737.0

Added

  • Добавена е строга проверка при запис чрез свойството VerifySavedOutput: след записването нова reader инстанция с изключено възстановяване на кръстосаните препратки презарежда файла, така че повредената сериализация вдига изключение на мястото на извикването, вместо да излезе на следващия консуматор
  • Разширен е ReproducibleOutput за шифровани документи: AES-CBC потоците използват статичната 14*(1+i) IV конвенция, key material и солите се извеждат детерминистично, а каноничният document ID нормализира променливите Info timestamps, което дава byte-идентични шифровани записа за regression pipeline-и

Version 2.736.0

Added

  • Добавени са висококачествено resampling и монохромно dithering чрез новата единица HPDFResample: separable Catmull-Rom bicubic и Lanczos3 ядра заменят GDI stretch семантиката за downsample на изображения чрез свойството ImageDownsampleKernel, а RenderOutputDither прилага Floyd-Steinberg error diffusion след композицията на страницата, така че print-preview изходът запазва фотографските детайли в чисто черно и бяло

Version 2.735.2

Fixed

  • Поправено е подаването на адреса на buffer променливата вместо на самия буфер от Flate декомпресионните потоци при допълване от source потока, което разваляше паметта на всяко четене и можеше да срине процеса; засегнати са зареждането на компресирани документи, inflate stream класовете и compress/decompress stream помощниците

Version 2.735.1

Fixed

  • Поправено е разтегливите XFA полета без data source да се свиват на един ред при flattening: височината им вече се измерва от текста, който самият template декларира, защото точно той се показва в такова поле. Поле, обвързано с празни данни, продължава да се мери като празно

Version 2.735.0

Added

  • Free Pascal build-овете вече покриват цялата библиотека: всяка единица се компилира с FPC 3.2.2 и Lazarus, докато преди това само основният път за създаване и зареждане го правеше
  • XPS, EPUB и CBZ контейнери могат да се импортират под Free Pascal чрез вграден read-only ZIP четец, който обслужва ZIP64 размери, stored и deflated записи, CRC проверка и традиционно шифровани записи със същия password callback като Delphi пътя
  • XFA form flattening, FormCalc изчислителният engine, widget runtime-ът, компонентите за преглед на документи, Type 1 font handler-ите, HTML импортът, проверката на подписи и job runner-ът се компилират във Free Pascal build-ове; flattening-ът на XFA пакетите на зареден документ допълнително изисква deflate codec-а, който тези build-ове не линкват

Fixed

  • Поправена е 64-битовата byte размяна в PNG helper единицата, която връщаше грешни стойности на Win64 и беше оставила единицата изцяло извън build-а

Version 2.735.0

Added

  • Добавено е откриване на липсващи глифове по време на рисуване: свойството TrackUnresolvedGlyphs записва всяка code точка, която щеше да се нарисува като .notdef tofu квадрат през активния Unicode шрифт, извиква събитието OnUnresolvedGlyph при всяка находка и не пипа нерегистрирани pure-GDI документи
  • Добавена е поддръжка на legacy kern таблици: RegisterUnicodeTTF прихваща kern таблицата от епохата на Apple/GDI, а излъчването на kerning се обръща към нейното format-0 binary търсене по двойки, когато шрифт няма GPOS kern lookup-и, което възвръща класическото разстояние между двойки в шрифтове като стандартния Arial
  • Добавен е per-run font fallback в подредбата на абзаци: WideTextOutBox вече разделя всеки пренесен ред на code точки, които текущият шрифт не може да картира, и рисува всеки run в резолвирания му fallback шрифт, така че смесени латински, emoji и CJK абзаци се рендират без tofu, когато са регистрирани fallback вериги

Version 2.734.0

Added

  • Добавена е инфраструктура за RFC 3161 time-stamp заявки: HPDFRFC3161BuildRequest излъчва DER TimeStampReq с прясно positive-INTEGER nonce, опционален policy OID и certReq, а HPDFRFC3161ParseResponse декодира PKIStatusInfo header-а и извлича token-а, така че TSA transport callbacks са три реда вместо курс по DER
  • Добавена е ISO/TS 32002 developer extension декларация (THotPDF.EnsureISO32002Extensions), покриваща EdDSA signature алгоритми и допълнителните ECDSA криви в PDF 2.0 документи, idempotent и version-gated като 32001 SHA-3 декларацията

Version 2.733.0

Added

  • Добавено е преносимо key agreement с X25519 и X448 Montgomery ladder плюс P-256 / P-521 NIST-curve ECDH с CIOS Montgomery умножение, което позволява key-agreement (KARI) public-key получатели да се създават и разгръщат изцяло в процеса; RFC 7748 и OpenSSL-генерирани reference вектори заключват ladder поведението в regression suite-а
  • Добавени са HPDFUnwrapKeyAgreementRecipientEnvelope заедно с entry point-ите AddPubSecAgreementKeyMaterial и AddPubKeyAgreementRecipientWithSecret, така че документи, шифровани с ECDH / X25519 / X448 получатели, могат да се отварят с private scalar на получателя и да се шифроват без външен ECDH инструментариум

Version 2.732.0

Changed

  • Записите вече насочват serializer изхода през 1 MiB buffered write поток, като свиват per-token Write извикванията на object header-и, dictionary ключове и xref редове в batched pushes към файлови дестинации
  • Payload-ите на cross-reference поток прилагат PNG Up prediction (/DecodeParms /Predictor 12) преди FlateDecode и свиват free-list дупките чрез /Index подсекции, което смалява xref контейнерите на всеки PDF 1.5+ документ и при разредени обектни диапазони
  • Свойството CompressionLevel вече избира и Flate усилието на cross-reference потока и object-stream контейнерите, така че clMaximum произвежда по-малки структурни потоци при запис

Fixed

  • Ширините на /W полетата на cross-reference потока вече се адаптират към реалния offset диапазон, вместо фиксираната [1 4 2] подредба, чийто Cardinal cast тихо отрязваше offset-и над 4 GiB в повреден изход

Version 2.731.0

Changed

  • Преработен е вграденият template-matching OCR с glyph извличане по connected компоненти, grayscale coverage оценяване спрямо кеширани multi-font шаблони, Otsu бинаризация с local-window fallback, bimodal gap разделяне на думи, базови линии по дума, отхвърляне на speckle шум и разширената 62-знакова азбука, която разпознава mixed-case ASCII текст чрез height клъстеризация на ниво ред и preference по case контекст

Version 2.730.0

Added

  • Добавена е Win64 поддръжка за Free Pascal 3.2.2 и Lazarus 4.6, включително runtime package, reproducible build скрипт, compatibility слой и non-GUI create-and-reload smoke тест; нативните static codec интеграции остават само за Delphi и докладват изрична unsupported-operation грешка във Free Pascal build-овете

Version 2.729.0

Added

  • Добавен е host-neutral динамичен XFA widget runtime с Unicode редактиране, focus и hit тестване, instance-aware binding, атомарна валидация и изчисление, ограничен reflow и read-only factory за заредени документи, която запазва source XFA

Version 2.728.0

Fixed

  • Коригирано е XFA intrinsic измерването и текстовото продължение да запазват изрично празни и изчислени стойности, да използват binding контекста на всяко поле или повторен ред, да пазят breakAfter действия, да избягват колизии на synthetic имена и да налагат кеширан глобален measurement бюджет

Version 2.727.0

Changed

  • XFA подредбата вече прилага intrinsic минимални и максимални размери, измерва growable полетата по обвързания им текст и атомарно разделя подходящото textEdit съдържание между content области и страници с read-only continuation полета и ограничени текстови, fragment и measurement бюджети

Version 2.726.0

Added

  • Добавени са пълни NChannel process и spot атрибути, mixing hint-и, ограничени PDF 2.0 CxF/X-4 спектрални ink потоци и consistency проверки на ниво документ за spot tint дефиниции и външни output-intent цветни таблици

Version 2.725.0

Added

  • Добавен е thread-safe детерминистичен SIMD scanline render backend, който прави preflight на поддържаните rectangle display списъци, записва финалната bitmap повърхност на vector блокове без междинно bitmap копие и връща точни причини за отказ по заявка през съществуващия software fallback и telemetry pipeline

Version 2.724.0

Changed

  • Разширен е ограниченият нативен FormCalc evaluator с общи SOM node-set агрегации, смесени scalar и node-set аргументи, вложени числови и string извиквания и детерминистични selection, string, тригонометрични, логаритмични и конверсионни функции при съществуващите operation, array, depth, time и output бюджети

Version 2.723.0

Changed

  • SubsetLoadedFonts вече безопасно подбира subset от вградени Type 1 PFB, split binary и hex PFA програми, запазва рекурсивните TrueType composite зависимости и затваря COLR v0/v1 outline зависимости, като пази цветовите, bitmap, variation и shaping таблици

Version 2.722.0

Added

  • Добавени са ограничени password callbacks за класически ZIP-шифровани XPS, EPUB и CBZ записи, включително retry лимити на запис, проверки за отмяна, credential обработка само в паметта и fail-closed отхвърляне на недостъпно, невалидно или неподдържано шифроване

Version 2.721.0

Changed

  • DownsampleLoadedImages вече преоразмерява поддържаните 8-битови Separation и DeviceN image семпли директно в component пространство и запазва оригиналния граф на цветните пространства, tint transform, оцветителите, /Decode диапазоните и overprint семантиката при запис и повторно зареждане

Version 2.720.0

Added

  • Добавени са ограничени built-in recognition overloads за висококонтрастен uppercase ASCII OCR, хоризонтален Code 39 и чисти, ориентирани по осите QR version 1 byte-mode символи, което позволява searchable text слоеве и barcode декодиране на заредени страници без engine, подаден от повикващия, докато двусмисленият или неподдържан вход отказва затворено

Version 2.719.0

Added

  • Добавено е ограничено JPEG 2000 доразработване по resolution и quality layer чрез THPDFJpeg2000Decoder.LoadProgressiveFromByteArray, плюс multi-layer кодиране чрез TJpeg2000Bitmap.QualityLayers, с идентични финални пиксели за LRCP, RLCP, RPCL, PCRL и CPRL progression подредби

Version 2.718.0

Changed

  • Вградени са пълните UniJIS, UniGB, UniCNS и UniKS UCS2 и UTF16 хоризонтални и вертикални CMaps, включително supplementary скалари и стандартни вертикални настройки по подразбиране, така че CJK извличането на текст и геометрията вече не зависят от външни Unicode mapping файлове или догадки с половин em

Version 2.717.0

Added

  • Добавени са изрични linearized shared-object зависимости по диапазони и range-arrival redraw планировчик, така че страниците могат да се рисуват преди пристигането на всички опционални зависимости и да се прерисуват точно когато новодостъпните данни променят резултата

Version 2.716.0

Added

  • Добавен е ограничен repair на обектния граф за actionable preflight находки в xref, trailer, каталог, дърво от страници и дърво от имена, с валидиран transaction commit и пълен rollback при unsafe или двусмислен вход

Version 2.715.0

Added

  • Добавени са PDF 2.0 encrypted payload wrapper-и, при които видимото съдържание на документа остава четимо преди автентикация, докато имена, описания и байтове на вградени файлове остават защитени до изрично отключване с парола

Version 2.714.0

Changed

  • SVG експортът на заредени страници вече излъчва axial и radial градиенти, ограничени PNG представления на mesh засенчвания Type 4 до Type 7 и декодирани inline изображения, без да увеличава съответните skip броячи

Version 2.713.0

Changed

  • OpenType SVG цветните глифове вече използват ограничения Form XObject pipeline за дъги, векторни градиенти, opacity, геометрични маски и локално #id повторно използване, като продължават да отхвърлят скриптове, външни ресурси, изображения и неподдържано активно съдържание

Version 2.712.0

Changed

  • ReplaceLoadedPageText вече заменя съвпадения, обхващащи TJ string елементи и масиви, чрез glyph source span-ове, като запазва kerning числата, несъвпадащите prefix-и и suffix-и, несвързаните операнди и оригиналната структура на content stream-а

Version 2.711.0

Added

  • Добавена е CFF FontSet SyntheticBase резолюция с наследени Top и Private DICT стойности, CharStrings, charset, Encoding и Local Subrs, плюс детерминистична override семантика и ограничено отхвърляне на невалидно, циклично или прекалено дълбоко наследяване

Version 2.710.0

Added

  • Добавен е детерминистичен ограничен избор на Flate predictor чрез HPDFSelectFlatePredictor, който използва разпределени row семпли, оценка на byte разхода, конфигурируемо CPU претегляне и изрични byte, row и work бюджети

Version 2.709.0

Added

  • Добавен е opt-in нативен JBIG2 Huffman symbol-dictionary и text-region изход чрез THPDFJBIG2Options.UseHuffmanEncoding, включително стандартните DH, DW, BMSIZE, FS, DS и DT таблици, raw collective битмапи, symbol-ID таблици, детерминистично нативно маршрутизиране и pixel-точни decoder round trips, като се запазват arithmetic и MMR настройките по подразбиране

Version 2.708.0

Changed

  • Кеширани са арабските и комбинираните presentation-form обратни cmap карти по generation на регистрирания шрифт, което заменя повтарящите се сканирания на U+FB00..U+FDFF и U+FE70..U+FEFF в ApplyArabicGSUBRefinement, ApplyArabicGSUBContextualRefinement и generic contextual GSUB пътя, като запазва codepoint предимството и shaped изхода

Version 2.707.0

Added

  • Добавен е Aztec 2D barcode енкодер (ISO/IEC 24778) чрез THPDFPage.DrawAztec и самостоятелната единица THPDFAztec: high-level кодиране с динамично програмиране с mode latches, shifts и binary-shift run-ове, bit stuffing, Reed-Solomon корекция на грешки над GF(16) до GF(4096), автоматичен избор между compact 15x15..27x27 и full 19x19..143x143 символи и forced-layer контрол за фиксирани размери на символите
  • Добавен е вертикален assembly на текста на страницата: THotPDF.ExtractLoadedPageText и range/stream aggregation API-тите вече групират WMode 1 глифове в колони по origin X на глифа, подреждат колоните отдясно наляво и обхождат всяка колона отгоре надолу, вместо да разкъсват вертикалния CJK текст на редове по глиф

Fixed

  • Поправен е паралелният band export, който се проваляше с несъответствие на PNG band широчина на страници с дробни пикселни размери (A4 на 96 DPI): растерният размер вече се закръгля с Ceil еднакво с band writer-ите, така че доставените tile-ове винаги съвпадат с широчината на енкодера

Version 2.706.0

Added

  • Добавен е streaming PNG експорт на заредени страници и banded многостраничен TIFF експорт чрез THotPDF.SaveLoadedPageToPng, SaveLoadedPageToPngStream, SaveLoadedPagesToTiffBanded и SaveLoadedPagesToTiffStreamBanded, които пишат компресирани image данни ред по ред през band енкодери, така че много големите страници не изискват пълен framebuffer; THPDFBandImageExportInfo докладва телеметрия за страница, band, ред, worker, памет, изход, време и отмяна

Version 2.705.0

Added

  • Добавена е PDF/A финализация в save пътищата за заредени документи: THotPDF.SaveLoadedDocument и SaveLoadedDocumentToStream вече валидират GTS_PDFA1 OutputIntent (наследен от source каталога или току-що регистриран) и излъчват pdfaid:part / pdfaid:conformance XMP идентификация, когато PDFACompliance е зададено, като запазват съществуващ pdfaid packet byte-for-byte при повторен запис
  • Добавена е консумация на вертикално писане (WMode 1) при зареждане: CIDFont /W2 и /DW2 клетъчни метрики вече управляват извличането на текст и рендирането на страниците, като обхождат колоните надолу по y оста на text пространството с вектора за позициониране v1x/v1y вместо хоризонталните /W аванси

Version 2.704.0

Added

  • Добавен е паралелен tile и band рендинг на заредени страници чрез THotPDF.RenderLoadedPageTilesParallel и THotPDF.RenderLoadedPageBandsParallel, с row-major callbacks на повикващата нишка, borrowed битмапи, cooperative отмяна, in-flight памет, контролирана от повикващия, peak-memory допускане и ограничен immutable кеш за Type 3 глифове и halftone screen-ове, споделен между изолирани render контексти

Version 2.703.0

Added

  • Добавени са ограничени CSC multisign batch-ове за дайджести чрез THPDFCSCSignatureProvider.SignHashBatch, с един hash-pinned SAD и една signatures/signHash заявка за подредена batch от един алгоритъм, като се налагат локални и credential multisign лимити, строга response кардиналност, синхронно или асинхронно подреждане на резултатите, SHA-256 content-addressed idempotency ключове и replay на завършени batch-ове

Version 2.702.0

Added

  • Разширен е THotPDF.RenewPAdESLTATimestamp с certificate, OCSP и CRL доказателства, подадени от повикващия, които се сливат в съществуващия DSS преди новия RFC 3161 document timestamp, запазва всяка по-ранна ревизия byte-for-byte и точно дедупликира validation потоците при последователни подновявания

Version 2.701.0

Added

  • Добавен е clause-addressable PAdES baseline и extended profile preflight чрез THotPDF.PreflightLoadedPAdES, който докладва всяко приложимо изискване със стабилен rule ID, profile, нормативно ниво, клауза от стандарта, PDF път, номер на обект, подписана или текуща ревизия и статус на преминаване, като валидира CMS кардиналности, ESS препратки на сертификата на подписващия, ограничения на signature речника, byte-range покритие, trusted време, DSS доказателства и покритие на document timestamp

Version 2.700.0

Added

  • Добавено е end-to-end PFX / PKCS#12 зареждане на частни ключове и CMS подписване на документи с ECDSA, Ed25519 и Ed448, включително named-curve CNG ECDSA, опционален OpenSSL 3 PureEdDSA, RFC 8410 декодиране на ключове, RFC 8419 правила за дайджести и параметри, SHAKE256 с 512-битов изход за Ed448, автоматичен избор на key алгоритъм и строго certificate-to-key сдвояване

Version 2.699.0

Added

  • Добавен е детерминистичен multi-identity избор на PFX / PKCS#12 credential чрез HPDFEnumeratePFXIdentities, HPDFParsePFXByLocalKeyID и THPDFCMSSignOptions.PFXLocalKeyID, включително строги single-valued localKeyId и friendlyName bag атрибути, public-key свързване, рекурсивни safe-content bag-ове, ограничена диагностика за двусмислия и цикли и автоматично вграждане на съответстващи intermediate и root certificate вериги с точна DER дедупликация

Version 2.698.0

Added

  • Разширено е in-process PFX / PKCS#12 PBES2 декодирането с AES-128-CBC и AES-192-CBC плюс PBKDF2 HMAC-SHA-384 и HMAC-SHA-512 PRF-и, включително специфична за шифъра опционална keyLength валидация и ограничени проверки на salt, итерации, IV и padding, като се запазва съвместимост с AES-256-CBC и HMAC-SHA-1 / SHA-256

Version 2.697.0

Added

  • Добавено е съобразено със спецификацията наследяване на XPS и OpenXPS Canvas FixedPage.NavigateUri, така че descendant Path, Glyphs и вложени Canvas визуали получават scoped URI, освен ако самите не го презапишат, като запазва external, mail, package-page и percent-decoded LinkTarget действия през трансформации, вложени клипове, изолирани opacity групи, потиснато reusable-visual, възстановяване след вложени override-и и съществуващите link, URI, отмена и unsafe-scheme лимити

Version 2.696.0

Added

  • Добавени са ограничени нативни XPS и OpenXPS Canvas transparency групи, така че Opacity и плътните, gradient или image Canvas.OpacityMask стойности композират припокриващи се дъщерни визуали веднъж през изолирани DeviceRGB Form XObjects, със сгъната uniform alpha, споделени variable-alpha soft маски, вложени групи, трансформирани клипове, пренос на ресурси, запазени линкове и fail-closed обработка на повредено, неподдържано, сингулярно или прекалено голямо съдържание

Version 2.695.0

Added

  • Добавена е ограничена нативна XPS и OpenXPS Canvas.Clip конверсия за abbreviated геометрия, локални или remote StaticResource PathGeometry стойности, директни property елементи, структурирани line, Bézier, quadratic и arc фигури, geometry трансформации, празни клипове и вложени EvenOdd или NonZero изрязвания чрез PDF W* или W, с изрязани navigation граници, лимит за parse от 100,000 стойности и fail-closed обработка на повредени или сингулярни трансформации

Version 2.694.0

Added

  • Добавена е ограничена нативна XPS и OpenXPS навигация за трансформирани Path и Glyphs визуали, която запазва HTTP, HTTPS и mail линковете като PDF URI анотации и резолвва package-relative страници и percent-decoded LinkTarget фрагменти като forward или backward PDF GoTo действия след създаването на всички страници, с metric-aware click граници, лимити от 65,536 линка и 8,192 знака, потиснато VisualBrush capture, отмяна и fail-closed диагностика за unsafe схеми

Version 2.693.0

Added

  • Добавена е ограничена нативна XPS и OpenXPS VisualBrush конверсия за inline или resource-backed Canvas, Path и Glyphs визуали, hierarchical и remote ResourceDictionary търсене, absolute Viewbox, absolute или relative Viewport, None, Tile и огледални tile режими, трансформации, opacity, многократно използваеми Form XObjects, споделени tiling шарки, token-aware пренос на ресурси и fail-closed бюджети за цикли, повреден вход, recursion, съдържание, кеш и позициониране

Version 2.692.0

Added

  • Добавено е нативно вграждане на package шрифтове за XPS и OpenXPS за TrueType и OpenType програми, TTC member фрагменти, GUID-обфускирани ресурси, директни или cmap-производни glyph ID-та, едно-към-много Unicode cluster-и, изрични аванси и отмествания, width-коректни RTL начала, споделени font ресурси, permissions за вграждане и забрана на subsetting, опционален glyph subsetting, ограничени ToUnicode карти и amortised-linear изход на позиционирани run-ове без GDI замяна на face

Version 2.691.0

Added

  • Добавено е ограничено OpenXPS Glyphs Indices подреждане със строги cluster code-unit и глифови бройки, изрични аванси в стотни от em, хоризонтални и вертикални отмествания, обратно продвижение при нечетен BidiLevel, плътни fill-ове от атрибути или property елементи, opacity, нативен PDF TJ batching, positioned Unicode cluster fallback, запазено извличане на текст, fail-closed диагностика при повреден вход и amortised-linear буфери, ограничени до 65,536 mapping-а

Version 2.690.0

Added

  • Добавена е поддръжка на OpenXPS Path.OpacityMask за плътни, variable-alpha multi-stop линейни и елиптични радиални градиенти и обикновени, tiling или огледални PNG ImageBrush маски чрез сгъната uniform alpha, ограничени нативни DeviceGray transparency групи, споделени shading шарки и image soft-mask потоци, fail-closed обработка на неподдържано съдържание и многократно използваемия RegisterLuminositySoftMaskState builder с alpha-image resource обвързване

Version 2.689.0

Added

  • Добавени са OpenXPS ImageBrush режими Tile, FlipX, FlipY и FlipXY чрез нативни PDF tiling шарки с едно, две или четири независимо изрязани позиционирания, споделени image и PNG soft-mask ресурси, композирани fixed-page, path и brush матрици и ограниченият RegisterImageTilingPattern API за многократно използваеми image-backed шарки

Version 2.688.0

Added

  • Добавена е поддръжка на OpenXPS ImageBrush.Transform за крайни матрични атрибути с шест параметъра и MatrixTransform property елементи, конкатенирани след нативното Path изрязване и преди viewport изрязването и позиционирането на изображението, така че brush-ът може да ротира, мащабира, наклонява или мести, без да променя векторната геометрия, която го съдържа; нестандартният RelativeTransform и неразрешените matrix ресурси остават изрична диагностика

Version 2.687.0

Added

  • Добавено е matrix-контролирано позициониране на image XObject чрез THPDFPage.ShowImageMatrix и разширен XPS fixed-page import с ImageBrush fill-ове от package JPEG, PNG, TIFF и JPEG XR, absolute или спрямо границите Viewbox и Viewport mapping, нативно path и single-viewport изрязване, opacity на изображение и path, PNG soft-mask alpha, DPI-aware оразмеряване на 96 DPI, споделен кеш на декодирани ресурси и fail-safe диагностика за неподдържани tiling, трансформации, цветова конверсия и image щрихи

Version 2.686.0

Changed

  • Добавена е многократно използваема ограничена регистрация на multi-stop радиални градиенти и разширен native-vector XPS path import с елиптични RadialGradientBrush стойности като property елементи, Pad spread, еднаква stop alpha, opacity на brush, относителен или абсолютен center, mapping на origin и радиус, нативно Type 3 PDF засенчване и възстановяване на координатите, което оставя path геометрията непроменена

Version 2.685.0

Changed

  • Разширен е подреденият native-vector XPS path import с quote-aware и ограничен parse на property елементи, плътни и multi-stop линейни gradient brushes, нативни PDF shading шарки, alpha на brush и stop, координати на градиента по подразбиране спрямо границите или изрично абсолютни, интерполация на stop-ове извън диапазона и fail-safe диагностика за неподдържани трансформации, spread режими, цветова интерполация, променлива alpha и дегенерирани оси

Version 2.684.0

Changed

  • Добавен е подреден native-vector XPS path import с ограничена abbreviated геометрия, fill правила, плътни RGB и ARGB fill-ове и щрихи, opacity на path, ширина на щриха, трансформации с шест параметъра и fail-safe диагностика за неподдържани чертачки възможности

Version 2.683.0

Changed

  • Усилена е PDF/X-6 валидацията на реално рисуваното съдържание с graphics state на shading шарките към момента на дефиниция, ExtGState семантика на nonstroking pattern, fail-closed проверки на soft-mask subtype и backdrop, точни Type 3 глифови метрики и правила за наследен цвят, строга alpha класификация на комбинираното рисуване, ограничена JPX цветова инференция и appearance-aware анотационно композитиране

Version 2.682.0

Added

  • Добавена е поддръжка при подписване и проверка за ECDSA подписи с brainpoolP256r1, brainpoolP384r1 и brainpoolP512r1, включително специфичната за кривите матрица от SHA-2 и SHA3 дайджести, валидация с провал преди provider, строги named-curve сертификатни параметри, ECDSA алгоритъмни идентификатори без параметри, канонични DER подписни стойности, Windows CNG import на named криви и детерминистична диагностика за изрични, trailing, неизвестни или несъответстващи параметри

Version 2.681.0

Changed

  • Обединено е изпълнението на съдържание за non-progressive bitmap, direct-DC, Form и display-list чрез HPDFInterpretContentTokensDevice и опционалното пълно разширение IHPDFContentOperatorDevice, с една cancellation точка на оператор, compile-time кеширане на операторни индекси за replay на display-list без сканиране на операнди, публични OperatorCount метрики, запазена съвместимост на semantic-device ниво, коригирани семантики на операторите ", v и y и коректна обработка на EI терминатор без фалшиви fallback диагностики

Version 2.680.0

Added

  • Добавени са ограничени transactional overloads на RepairPDFA4 с типизирани опции, детайлни repair отчети, споделен произход на находките, безопасна нормализация на PDF 2.0 header, trailer ID, metadata, Catalog и презентация, namespace-aware repair на PDF/A идентификацията, конфигурируема политика за partial или full-conformance commit, откриване на error regression, byte-exact rollback на графа и XMP и строга граница, която запазва съдържанието на страниците, шрифтовете, цветовете, прозрачността, изображенията, графичните оператори и извлечения текст

Version 2.679.0

Added

  • Добавена е PDF/X-6 валидация на реално рисуваното съдържание с избор между ISO 15930-9:2020 и resolved-errata 2025 правила, проверки на реалния ICC header и каналите, resource-aware обхождане на content масиви, Form XObjects, tiling и shading шарки, изображения, Type 3 глифове, soft маски и анотационни appearance-и, диагностика на overprint mode и transparency при комбинирано рисуване, стабилен произход на правилата и ограничена работа по декодирани байтове, токени, обекти, находки, recursion и graphics state

Version 2.678.0

Added

  • Задълбочена е ограничената PDF/A-4 валидация с кеширани проверки на ICC header и компоненти, консистентност на output intent на документа и страницата, анализ на реално рисуваните device цветове и прозрачността в content масиви, вложени Form XObjects, изображения, image маски, засенчвания и анотационни appearance-и, наследено graphics state, вграждане на рендиращи шрифтове, CIDFont и CMap взаимоотношения, строги анотационни флагове и appearance състояния, UTF-8 XMP packet и namespace валидация, логически локации в дървото от страници, стабилна clause-aware диагностика и конфигурируеми тавани за декодирани байтове и content токени

Version 2.677.0

Added

  • Довършена е ограничената PDF/UA-2 валидация на документ, human-readable низове, optional content, анотации, AcroForm, structure назначения, outline, вградени файлове и вложени page етикети, включително физическо ParentTree ownership, скаларни structure деца, ограничения на appearance stream, XMP свойства по namespace URI, откриване на Unicode private-use и clause-aware диагностика; структурираният HTML, XHTML, XML и JSON експорт вече споделя tagged-first достъпен модел на четене с език, заглавие, навигация, page етикети, безопасни линкове, анотации, несензитивни формулярни контроли, заместващи marked-content, артефакти, алтернативи на изображения, geometric fallback, независими лимити, отмяна и атомарно публикуване

Version 2.676.0

Added

  • Добавено е ограничено минимално byte-range планиране за всяка страница в линеаризиран PDF чрез PlanProgressiveLinearizedPageRanges, с raw и Flate декодиране на primary или overflow hint-и, interoperable byte-aligned combined и Annex F continuous split hint подредби, точни bootstrap, page, shared-group и LF- или CRLF-префиксирани традиционни или stream зависимости на кръстосаните препратки, коректно натрупване при къси четения, таван от 256 MiB по подразбиране за паметта на planner-а с fail-closed разграничаване на кодирането, сливане с отчитане на припокриванията, строги структурни кръстосани проверки, типизирани лимити и диагностика на наличността и обединен [0, /E) first-page път

Version 2.675.0

Added

  • Добавени са независими, съобразени със стандартите crypt-filter политики за низове, нормални потоци и вградени файлове чрез ConfigureCryptFilterDefaults и SetStreamCryptFilter, включително password и public-key reserved филтри, /Identity, коректно при запис password-security /EFF и водещи /Crypt pipeline-и, fail-closed получателски граници, специфични за public-key потоци, case-sensitive зареждане и инспекция на външни named филтри, /CFM /None, докладване на V2 дължина на ключа, mixed-policy Direct File fallback, разделени политики за object-stream контейнер и member низове и запазващи политиките шифровани инкрементални актуализации

Version 2.674.0

Added

  • Добавени са инкрементални актуализации с запазени credential-и за Standard и public-key шифроване чрез password-aware overload на BeginIncrementalUpdate и зададен key material на получателите, със сигурно запазени file ключове или FEKs, отделни crypt-filter политики за string, stream, metadata и Identity, generation-aware derivation на legacy обектни ключове, точни наследени /Encrypt препратки, byte-идентични изходни ревизии, оригинален user, owner или recipient достъп и fail-closed отхвърляне на промени в шифроването или неподдържани хетерогенни филтри

Version 2.673.0

Security

  • Добавена е ограничена валидация на JBIG2 segment графа преди full-page, region, нативно или външно декодиране и преди споделяне на global dictionary, с индексирани проверки за дублирани сегменти и липсващи препратки, итеративно откриване на цикли и дълбочина на зависимостите, налагане на page-асоциация на embedded stream сегментите, отхвърляне на забранени сегменти, бюджети за long reference и aggregate ръбове, предпазители при symbol dictionary алокации и прецизна телеметрия при отказ

Version 2.672.0

Added

  • Добавено е генериране и строга валидация на PAdES E-EPES signature-policy-identifier с изрични policy OID-и, известни или ETSI unknown hash-ове, SPuri, SPUserNotice и SPDocSpecification квалификатори, ограничен Unicode и collection parsing, хеширане на policy документа, закачване на OID и hash на основния подписващ преди криптографската работа, отделни статути за несъответствие и пълен JSON отчет

Version 2.671.0

Added

  • Добавени са детерминистични RFC 5652 контейнери с до 256 независими основни SignerInfo записа чрез HPDFCMSBuildMultiSignedData и HPDFCMSMergeSignedData, включително prevalidation на цялата партида преди страничните ефекти на подписващите, атрибути, алгоритми, сертификати и providers на всеки подписващ, стриктна definite-length валидация на контейнера, DER-сортирани и дедупликирани множества, независими резултати от проверката, byte съвместимост при един подписващ и side-effect-free aggregate placeholder оразмеряване

Version 2.670.0

Added

  • Добавени са опционални RFC 5652 SubjectKeyIdentifier идентичности на подписващия чрез THPDFCMSSignOptions.SignerIdentifier, включително компактно IMPLICIT SID кодиране, автоматичен избор на версия на SignerInfo и SignedData, стриктно извличане на X.509 разширения, поддръжка при provider и placeholder оразмеряване и fail-closed съвпадение на SID, сертификат и версия при проверката

Version 2.669.0

Security

  • Добавена е fail-fast диагностика за консистентност на CMS digest алгоритмите в SignedData.digestAlgorithms, SignerInfo, параметрите на signature механизма и RFC 6211 CMSAlgorithmProtection, с отделен verification статус, код за неуспешна валидация, разпространение на timestamp, детайлни причини за проблемите и JSON изход

Version 2.668.0

Added

  • Добавено е генериране и проверка със SHA3-256, SHA3-384 и SHA3-512 в detached CMS, RSA PKCS#1 v1.5, RSA-PSS и ECDSA provider договори, RFC 3161 content и signature времеви печати, PAdES-LTA подновяване, Seed Value речници и ISO 32001 PDF 2.0 developer-extension декларации, с ограничено еднопроходно byte-range хеширане, споделено със съответните PDF MAC политики

Version 2.667.0

Added

  • Добавен е THotPDF.ValidatePDFMACChain с валидация на инкременталните ревизии от най-старата към най-новата, кумулативно класическо или xref-stream индексиране, точни локации на грешки по ревизия и xref, откриване на подмяна на исторически MAC, стабилно налагане на KDFSalt, отхвърляне на понижаване силата на дайджеста, автентикирани проверки на /P и /Perms, preflight отчети и ограничен parse на ревизии без временни PDF копия

Version 2.666.0

Added

  • Добавени са THotPDF.SignPDFWithPFXAndAttachedPDFMAC и валидация, прикачена към подписа, с директен AuthCode в активния trailer, индиректен SigObjRef, пълно покритие на подписаната ревизия, обвързване на дайджеста на raw signature value, PDF MAC политики със SHA-2 или SHA-3, еднопроходно подписване и MAC range hashing, preflight отчети и атомарна подмяна на изхода

Version 2.665.0

Fixed

  • Коригиран е THotPDF.RegisterNChannelColorSpace да излъчва петелементната ISO 32000-2 форма DeviceN с /Subtype /NChannel и metadata за process-компонентите, минималната PDF версия е повишена на 1.6, а luminosity soft mask-овете вече резолвват NChannel рисуване през неговото alternate пространство, като същевременно се запазва съвместимост при четене със старите /NChannel family token-и

Version 2.664.0

Added

  • Довършено е PDF рендирането на blend mode-ове с целочислени hot-path имплементации за Hue, Saturation, Color и Luminosity, и е коригиран fast path-ът за пълна непрозрачност, така че всеки активен separable или non-separable blend mode се композира върху своя backdrop

Version 2.663.0

Security

  • PKCS#12 контейнерите вече се автентикират преди разкриването на шифрованите safe съдържания, чрез проверка на опционалния външен MacData с ограничени PKCS#12 KDF итерации, SHA-1 или SHA-256 HMAC, сравнение на дайджести в constant time и fail-closed обработка на грешна парола и подправяне

Version 2.662.0

Added

  • Добавени са три HotPDFCLI команди: render растеризира всяка избрана страница в <prefix>-page<N>.png през pipeline-а за битмапи на заредени страници (--pages диапазон, --dpi 10..2400, по подразбиране 150), tables извлича типизирани таблици в CSV или JSON чрез ExportLoadedTypedTables (--json, -o файл или конзола), а compare извежда JSON отчет за сравнение на два документа чрез HPDFDocCompareDocuments (--mode 0..5: брой страници, текст на страници, брой обекти, рендерирани изображения, пълен и структурен)

Fixed

  • Поправен е Win64 ICC transform pipeline, който произвеждаше изход само от нули при 8-битови batch трансформации (TransformBytes): оптимизираният 1D-LUT fast path вътре в Win64 lcms2 обектите връща нули, докато generic resampling pipeline-ът е коректен, затова 8-битовата трансформация вече се компилира с cmsFLAGS_NOOPTIMIZE само на Win64; 16-битовият single-color път и всички Win32 трансформации запазват оптимизирания fast path (batch sRGB primaries вече се round-trip-ват на двете платформи)

Version 2.661.0

Added

  • Добавено е истинско бюджетирано Zopfli Flate компресиране с висок коефициент след съществуващия zlib baseline с четири стратегии, със строг избор без нарастване на размера, лимити за вход, итерации, блокове, изход и време, детайлна телеметрия за потоци и паралелни изображения и детерминистични прагове за спестявания върху фиксиран корпус

Version 2.660.0

Added

  • Добавени са детерминистични XML preflight отчети, четими от машини, и trusted плъгини с версии по ABI за извличане на характеристики и персонализирани правила за валидация, със стабилна подредба, интеграция с policy bundle, разпространение на отмяната, fail-closed проверки за възможности и крайни бюджети за плъгини, находки, характеристики, низове, изход и време

Version 2.659.0

Added

  • Разширен е ограниченият XFA FormCalc с условна логика, повтарящи се числови агрегации и валидирани dynamic-instance callbacks, и добавени са sandboxed QuickJS формулярни скриптове, изключени по подразбиране, с пълен control flow, нативни typed arrays, изолиран достъп до данни, крайни бюджети за инструкции, време, памет, стек, стойности и операции върху инстанции и телеметрия на изпълнението

Version 2.658.0

Added

  • Добавени са ограничени редактируеми XFA packet DOM структури за пълни XDP потоци и подредени масиви от пакети с path заявки по local-name, мутиране на пакети и възли, точно запазване на недокоснатите байтове, селективно пренаписване на пакет, детерминистичен изход за namespaces и атрибути, безопасно разделяне на CDATA, екраниране на entity-та и крайни бюджети за вход, изход, пакети, възли, дълбочина, атрибути, текст и заявки

Version 2.657.0

Added

  • Добавено е CSC API v2 отдалечено подписване през съществуващия CMS provider pipeline с транспорт, притежаван от приложението, обновяване на OAuth токени, ограничено откриване на credential вериги, изрична обработка на authorization и SAD, синхронно или асинхронно подписване на дайджести, RSA-PSS параметри, polling, RFC 3161 времеви печати, отмяна, стабилни idempotency ключове и краен кеш на завършени операции

Version 2.656.0

Added

  • Добавени са опционални XPS, EPUB и CBZ документни манипулатори с оценяване по съдържание, подменяема thread-safe регистрация, едно валидирано сканиране на архива, подредба по fixed-page, spine и естествен ред на изображения, неизменяем кеш на PDF конверсиите, споделени бюджети за архив, ресурси, reflow, страници, пиксели, DPI, изход и отмяна и публикуване на PDF, безопасно при rollback

Version 2.655.0

Added

  • Добавено е ограничено извличане на типизирани таблици и атомарен CSV или JSON експорт с канонични колони, сливане на фрагменти от една страница и от последователни страници, обхвати на слети клетки, повтарящи се заглавни редове, геометрия на страницата, увереност, произход и locale-контролирано разпознаване на integer, number, boolean, дата, date-time, валута и проценти

Version 2.654.0

Added

  • Добавено е атомарно структурирано експортиране на заредени страници в HTML, XHTML, XML и JSON през единен модел на реда на четене с блокове, стилизирани span-ове, открити таблици, координати, ред на източника, опционални ограничени PNG изображения, Unicode-безопасно екраниране, отмяна и крайни ресурсни бюджети

Version 2.653.0

Added

  • Добавено е атомарно пренаписване на цвета на заредени страници към DeviceGray, DeviceRGB или DeviceCMYK със запазено търсимо векторно съдържание, беззагубена цветово-управлявана растерна конверсия за изображения и сложни ресурси, устойчив на завъртане изход, изрични бюджети за точност на рендиране и ресурси, както и политики за запазване, конвертиране в обработка или отхвърляне на spot плаките

Version 2.652.0

Added

  • Добавено е review-first откриване на redaction върху заредени страници с checksum-aware PII pattern-и, pluggable entity и face detector-и, confidence-оценени page-space находки, ограничена work телеметрия, задължителна reviewer идентичност, атомарно staging на одобрени анотации и отделна изрична burn-in граница

Version 2.651.0

Added

  • Добавено е ограничено barcode декодиране на заредени страници и региони с pluggable engine-и, прогресивен low-resolution рендеринг, fallback quarter-turn сканирания, валидирани текстови и raw payload-и, PDF-space граници и ориентация, confidence филтриране, overlap дедупликация, отмяна и ресурсна телеметрия

Version 2.650.0

Added

  • Добавени са ограничени, отменяеми searchable OCR текстови слоеве с pluggable recognition engine-и, confidence и geometry валидация, rotation-подравнен невидим Unicode текст, optional-content групиране, ресурсна телеметрия и атомарно multi-page публикуване

Version 2.649.0

Added

  • Добавени са пълни object graph round trips през versioned JSON със streaming snapshot и incremental export-и, raw или декодирани embedded и атомарни sidecar payload-и, ограничен schema-съвместим import, структурна и stream-length валидация и transactional публикуване

Version 2.648.0

Added

  • Добавен е ограничен repair за ръчно редактирани QDF диагностични документи, който запазва object и stream байтове, поправя direct, indirect, липсващи или остаряли stream дължини, възстановява classic кръстосани reference offset-и и trailers, отхвърля небезопасна структура и верифицира изхода през нормалния loader

Version 2.647.0

Added

  • Добавен е thread-safe регистър за custom stream filter-и с ограничени push и pull договори, споделени decode бюджети, cooperative отмяна, изрични seek изисквания, изолирани custom неуспехи и execution телеметрия

Version 2.646.0

Added

  • Добавени са ограничени content-operator visitor и event API-та с read-only operand изгледи, детерминистични state callbacks, действия inspect, measure, replace, delete, stop и reject, cooperative отмяна, валидиран изход и атомарни обновявания на заредени страници

Version 2.645.0

Added

  • Добавен е pluggable loaded-page render backend договор с достъп до компилирани display list-ове, нативна GDI имплементация, thread-safe паралелна диспетчеризация, детерминистична fallback политика, cache инвалидация и execution телеметрия

Version 2.644.0

Added

  • Добавено е ограничено откриване на layout застъпвания, element пътеки, opt-in source mapping, нативни vector overflow и overlap overlay-и, live диагностични callbacks и work статистика

Version 2.643.0

Added

  • Добавени са нативни ограничени vector chart-ове с line, bar, area, pie и scatter серии, автоматични или ръчни оси, теми, легенди, етикети, PDF/UA Figure алтернативи и render статистика

Version 2.642.0

Added

  • Добавено е ограничено GUI-thread RichEdit и RTF странициране с vector EMF изход, изображения, opt-in поддържани OLE представления, отмяна, запазване на stream позиция и изрични input, character, page и output бюджети

Version 2.641.0

Added

  • Добавен е ограничен SVG 2 import като reusable PDF Form XObjects с нативна геометрия и арки, CSS cascade, векторни gradient-и, clip и mask поддръжка, Base 14 текст, opacity ресурси, placement-aware link анотации и import статистика

Version 2.640.0

Added

  • Добавен е versioned HTML5 paged-media import профил с толерантен DOM parsing, print CSS cascade, paginated block и table layout, опционални AcroForm контроли, ограничени callback-driven ресурси и статистика per операция

Version 2.639.0

Changed

  • Големите local-file mapping-и вече адаптират конфигурирания mapped-byte таван между по-големи sequential прозорци и до 16 по-малки MRU random-access прозорци, запазват изрична fixed-geometry опция и докладват активната геометрия, преходите, броячите по access pattern и peak mapped байтове

Version 2.638.0

Added

  • Добавен е ограничен cross-page JBIG2 symbol training с external и native backend-и, един споделен global речник, точно преизползване на дублирани страници, директно PDF image-batch вмъкване, backend и size телеметрия и измерени 78.8 процента спестяване на компресия върху 100-страничния regression corpus

Version 2.637.0

Changed

  • Паралелният loaded-page рендеринг вече намалява заявените worker-и от process-wide memory бюджета, резервира всяка заявена страница, задържа ordered-output резервациите през callback доставката, буди budget waiter-ите при отмяна или неуспех и докладва concurrency, reservation, admission, delay и wait телеметрия

Version 2.636.0

Changed

  • Loaded-page prefetch-ът вече компилира и рендерира извън cache заключването, отменя cooperatively през tokenization и playback, отстъпва на foreground page рендеринга и излага progress, failure, preemption и cancellation-latency телеметрия

Version 2.635.0

Added

  • Добавен е подреден streaming паралелен page рендеринг с calling-thread callbacks, ограничена опашка от завършени bitmap-и, producer backpressure, cooperative отмяна, borrowed bitmap животи и queue, byte, wait, completion и delivery телеметрия

Version 2.634.0

Added

  • Добавен е двустадиен паралелен loaded-page pipeline, който компилира display list-ове извън render-cache заключването, стартира playback преди пълният набор страници да е компилиран, динамично балансира ограничени worker-и, запазва входния ред, намалява content-token алокацията и излага stage, cache, completion и latency телеметрия

Version 2.633.0

Added

  • Добавени са immutable reference-counted декодирани bitmap handle-и с copy-free cache попадения, директно thread-safe рисуване от renderer-а, изолирани mutable копия при нужда, eviction-независими животи и кумулативна handle и copy телеметрия

Version 2.632.0

Changed

  • QuickJS изпълнението вече работи и чрез static обекти, и чрез ABI-neutral bridge DLL на Win32 и Win64, с Unicode-safe стойности, детерминистично докладване на статус, конфигурируеми memory, stack, script, време и interrupt лимити, secure DLL откриване, recovery след отхвърлени скриптове и възпроизводими cross-platform runtime build-ове

Version 2.631.0

Changed

  • Factur-X и ZUGFeRD business-rule валидацията вече изпълнява пълната прегледана XPath 2 Schematron повърхнина с външни code бази данни, sequential bindings, quantifiers, FLWOR суми, стабилни fallback rule идентификатори, secure ограничен XML parsing, изрични evaluation-error находки, нула мълчаливи прескачания и fail-closed комбинирана валидация

Version 2.630.0

Added

  • Добавено е вградено TrueType variable-font instancing с мапнати оси, споделени и частни gvar tuple-и, IUP интерполация, simple и composite outline обновявания, phantom-point метрики, HVAR, VVAR и MVAR baking, компактно static glyph възстановяване, checksum-коректен изход и callback-free Unicode font регистрация

Version 2.629.0

Added

  • Добавено е side-effect-free CMS placeholder оценяване от изрични, provider или RSA certificate signature размери, точно static container shaping, консервативни dynamic payload резерви, pre-sign rebuild-и, capability-gated provider retry-та, строги single-invocation гаранции за external signer, ограничено оразмеряване и детайлна диагностика на опитите

Version 2.628.0

Added

  • Добавен е reachability-based subsetting на шрифтове, вградени в заредени PDF-и, включително page съдържание, nested Form XObjects, annotation appearance състояния, споделени font програми, TrueType и CFF формати, encoded-size избор, стабилни CID и ToUnicode mapping-и, детайлни резултати и default отказ при наличие на подписи

Version 2.627.0

Added

  • Добавено е автоматично PDF/UA структуриране за декларативни layout дървета, включително заглавия, списъци, таблици, фигури, language и alternate-text metadata, pagination артефакти, continuation-safe marked-content reference-и, запазване на реда на четене, semantic валидация и structure статистика

Version 2.626.0

Added

  • Добавен е декларативен document DOM с наследяеми стилове, reusable component factories, текст, spacer-и, stack-ове, контейнери, секции, повтарящи се headers и footers, претеглени таблици с повтарящи се заглавни редове, ограничена continuation дълбочина, pagination статистика, non-copying текстови и таблични фрагменти, линейно top-level обхождане, непосредствено page flushing и съответстващи Delphi и C++Builder повърхнини

Version 2.625.0

Added

  • Добавена е повторяема Win32 и Win64 статистическа performance gate, която изолира load, save, render и text extraction, записва warmup-и и 30 raw sample-а с p50, p95, sample variance, RSS, process I/O, среда и детерминистична fixture идентичност, после оценява стабилни JSON прагове и връща failing exit код при regression

Version 2.624.0

Changed

  • Преработено е парсването на прости dictionary и array около immutable source span-ове, директна numeric конверсия, еднопроходни nested контейнери и indexed dictionary вмъкване, с публична materialization телеметрия; 30,000-двойков Win32 fixture намали байтовете, алокирани в петте прохода, с 64.7 процента, а времето падна от 3,656 ms на 46 ms

Version 2.623.0

Added

  • Добавени са конфигурируеми парсер лимити за отделни token байтове, общо token броене, array или dictionary записи и malformed token-и, плюс строг untrusted-input preset, typed limit изключения и per-load телеметрия; regression gate-овете отхвърлят 2 MiB token и контейнер от един милион token-а под 250 ms и под 37 MiB process връх

Version 2.622.0

Added

  • Добавени са изрични API-та за освобождаване на object graph на заредени страници и телеметрия, които изхвърлят clean page-owned корени и render кешове, като запазват indirect споделени ресурси и reload metadata; последователната обработка на 100,000 страници остава на стабилен връх от 69.3 MiB, а освободените обикновени или компресирани страници се материализират отново с оригиналната си object идентичност

Version 2.621.0

Changed

  • Декодираните object-stream контейнери вече ползват конфигурируем byte-ограничен LRU кеш с непосредствено per-container eviction, source-backed reload след eviction, zero-retention режим и peak-byte, eviction и reload телеметрия

Version 2.620.0

Changed

  • Големите обикновени page дървета вече се отварят в компактни placeholder-и, разрешават произволни страници чрез /Count-водено обхождане и indirect-object hash индекс, кешират разрешените страници, излагат materialization телеметрия и контроли и се разгръщат автоматично преди структурна мутация или save операции

Version 2.619.0

Changed

  • Заредените AcroForm полета, qualified имена, widget-и, анотации и страници вече споделят lazy двупосочен relationship кеш с reverse annotation lookup, per-widget page lookup, activity телеметрия, изрична инвалидация за raw object-graph редакции и mutation-safe автоматична поддръжка

Version 2.618.0

Changed

  • Page-object lookup-ът вече ползва лениво преизграждан, mutation-aware reverse индекс за object номера и resolved page указатели, заменяйки повтарящите се page-table сканирования при page копиране, outlines, named destinations, actions, forms, accessibility и page-tree reconciliation, като излага validity и activity телеметрия

Version 2.617.0

Changed

  • Сравняването на рендерирани документи вече поддържа caller-избран DPI, RGB или luminance цветов толеранс, changed-pixel съотношение и SSIM-подобни similarity gate-ове, детерминистични свързани changed региони, опционални PNG difference overlay-и и fail-closed page и агрегатни pixel бюджети с изрична rendering диагностика

Version 2.616.0

Changed

  • Сравняването на документи вече обхожда indirect object графи през детерминистични catalog-based пътеки, hash-ва стойности и потоци в изрични ресурсни лимити, подравнява страниците преди класифициране на insertions, deletions, moves и промени, разграничава преместени обекти от добавяния и премахвания и докладва непълни сравнения вместо да третира бюджет-ограничени резултати като идентични

Version 2.615.0

Changed

  • Декодирането на заредени изображения вече ползва 16 cache metadata shard-а и точна per-key singleflight координация, изпълнява независимите скъпи декодирания конкурентно, като пази един owner decode за дублирани заявки, налага конфигурираните byte и entry бюджети във всички shard-ове и излага cached decode entry точки плюс concurrency телеметрия; четири независими 12,000-пиксел JPEG заявки скалират 3.72 пъти на четири Win64 worker-а, докато осем заявки със същия ключ декодират веднъж

Version 2.614.0

Changed

  • Рендерингът на low-resolution grayscale и RGB JPEG вече избира ограничен 1/2, 1/4 или 1/8 inverse-DCT scale, стриймва мащабирани scanline-и през fixed-point resampler директно в точния target bitmap, запазва decode бюджетите, отмяната и codec-worker изолацията и излага source, scaled, target, scanline и memory телеметрия чрез GetLastJPEGReducedDecodeInfo; regression fixture-ът от 12,000 на 12,000 към 300 на 300 върви 24.05 пъти по-бързо от пълния decode, без да алоцира своя 432 MB source raster

Version 2.613.0

Changed

  • /Contents масивите на заредени страници вече излагат lazy seekable конкатениран поток, задържат нефилтрирани сегменти в source-backed съхранение, декодират най-много един филтриран сегмент наведнъж, ползват amortised-linear натрупване на token-и и байтове, запазват оригиналните потоци при редакция чрез добавяне на нов сегмент и държат последователност от 1 GiB с 10,000 сегмента под 64 MiB допълнителна работна памет

Version 2.612.0

Changed

  • Incremental update-ите вече държат source файла заключен за писане и на файлова основа, вместо да задържат пълните source байтове, обхождат и излъчват само променени, нови и изтрити обекти в sparse xref подсекции, стриймват оригиналния prefix към нова цел и append-ват директно с rollback за saves към същата цел; 4 GiB ревизия с един обект остава в рамките на 128 MiB допълнителна работна памет

Version 2.611.0

Added

  • Добавен е ограничен document-scoped кеш за заредени font decoder-и с LRU лимит от 32 MiB и 128 записа, singleflight reuse на парсване между страници и заредено text extraction, SVG export и text replacement, независими deep-copy резултати от GetLoadedFontDecoder, конфигурируем memory бюджет и telemetry API-та и автоматична инвалидация при промяна на graph, страница, reload, JSON Patch и CMap конфигурация; повторната употреба на един споделен indirect шрифт вече парсва encoding-а, ширините, ToUnicode, CIDToGIDMap и descendant mapping-ите само веднъж, докато се задържа

Version 2.610.0

Changed

  • Ускорени са page import-ът и object grafting-ът чрез замяна на линейния, прецизно преоразмеряван foreign-object lookup масив с operation-scoped power-of-two open-addressed карта, ключована по source документ, object номер и поколение; споделените indirect обекти и цикличните графи запазват съществуващата си identity семантика през batch import-ите, докато големите object графи вече ползват amortised constant-time регистрация и expected constant-time lookup

Version 2.609.0

Changed

  • Подобрена е точността на SVG page export: директните w, J, j, M и d graphics-state оператори вече запазват ширината на линията, именуваните cap и join стилове, miter лимитите, dash масивите и dash фазата; q/Q възстановява тези атрибути през nested съдържание и Form XObjects; even-odd f*, B* и b* paint операторите излъчват fill-rule="evenodd"; zero-width PDF hairline-ите остават видими чрез non-scaling SVG strokes

Version 2.608.0

Added

  • Добавена е QuickJS static-linking инфраструктура: Lib/HPDFQuickJSStatic.pas линква петте QuickJS OMF обекта (build-нати с bcc32c от кръпени source-ове) чрез {'$L'} директиви — без DLL зависимост — и декларира пълната C runtime повърхнина (47 символа: msvcrt C99 math, Borland 64-bit аритметика, size-neutral atomic stub-ове, pthread stub-ове); thirdparty/QuickJS/build-static.bat автоматизира patch-and-compile pipeline-а. Известно ограничение: JS_NewRuntime успява, но JS_NewContext удря access violation, защото премахването на _Atomic променя реда на struct инициализация; DLL build-ът от v2.607.0 остава работещият evaluation път

Version 2.607.0

Added

  • Добавено е генериране на DataMatrix 2D barcode (Lib/HPDFDataMatrix.pas): ASCII-mode кодиране с digit-pair компресия, Reed-Solomon ECC върху GF(256) с примитивния полином на DataMatrix $12D, квадратни размери от 10x10 до 144x144, codeword поставяне с променлива посока и L-образния finder pattern; THPDFPage.DrawDataMatrix рендерира кодираната матрица като мрежа от запълнени module квадрати
  • Добавено е генериране на PDF417 stacked 2D barcode (Lib/HPDFPDF417.pas): text-mode кодиране с base-30 свързване на знаци, Reed-Solomon ECC върху GF(929) с примитив 3, symbol descriptor кодиране и ред/колона подредба със start/stop pattern-и; THPDFPage.DrawPDF417 рендерира codeword матрицата
  • Добавено е обвързване на QuickJS JavaScript engine (Lib/HPDFQuickJS.pas плюс предварително build-нати Win32/Win64 quickjs.dll под thirdparty/QuickJS/bin/): dynamic DLL зареждане, runtime+context lifecycle и evaluation API повърхнината (Eval/EvalInt/EvalFloat); Eval code path-ът има известен Win32 startup crash при линкване в приложение и е документиран за последващо проучване
  • Добавена е архитектурната extraction цел THPDFWriter (Lib/HPDFWriter.pas): xref entry регистър (free/used/compressed), classic xref table сериализатор и trailer dictionary builder, към които THotPDF save пътят делегира incrementally

Version 2.606.0

Added

  • Добавени са две HotPDFCLI команди: decrypt зарежда криптиран PDF с подадената парола, декриптира го чрез DecryptLoadedDocument и записва некриптирано копие (-o изходен път, по подразбиране <input>-decrypted.pdf), а optimize рекомпресира всеки поток с FlateDecode чрез CompressLoadedDocument (-o изходен път, по подразбиране <input>-optimized.pdf, отказва криптиран вход)

Version 2.605.0

Added

  • Добавено е генериране на QR Code 2D barcode: новият Lib/HPDFQRCode.pas имплементира пълен QR енкодер (numeric, alphanumeric и byte encoding режими; Reed-Solomon error correction върху GF(256); версии 1-40 и с четирите EC нива L/M/Q/H; всичките осем mask pattern-а с penalty оценка; коректно поставяне на модулите, включително finder, timing, alignment, format info и version info pattern-и). Методът THPDFPage.DrawQRCode рендерира кодираната матрица като мрежа от запълнени module квадрати върху всяка страница в писане (ModuleSize в точки, конфигурируемо EC ниво и цвят)

Version 2.604.0

Added

  • Добавена е пълна MacExpertEncoding decode таблица: горната 128-байтова половина вече мапва expert glyph-ове (small capitals, old-style фигури, superior/inferior цифри, fraction-и, типографски символи) към най-близката Unicode кодова точка или Private Use Area surrogate, заменяйки предишния raw-byte identity fallback, който даваше накъсан изход за документи с expert-кодирани Type 1 шрифтове

Version 2.603.0

Fixed

  • Поправен е дълго време флакъващ fail в ConcurrentObjStmDecryptionMatchesSerial: глобалната FRevision оставаше остаряла след като aes256 се понижаваше до aes128 под default PDF 1.6 версията, насочвайки CreateKeys погрешно към V5 клона, който никога не запълва legacy /O и /U password hash-овете — серилизираният encryption речник носеше празни или остаряли password string-ове и файлът не се отваряше. Fix-ът преизвежда FRevision от понижения FCryptKeyType и в setter-а, и на двете места за version договаряне, а legacy речник клонът вече хвърля ясна диагностика, когато password string-овете не са точно 32 байта

Added

  • Добавена е HotPDFCLI командата html: рендерира ограничен HTML файл (h1-h6, p, ul, ol, hr, inline markup) в PDF чрез HPDFRenderHTMLDocument

Version 2.602.0

Added

  • Добавен е block-level HTML import: THPDFHTMLImporter (и convenience wrapper-ът HPDFRenderHTMLDocument) рендерира ограничено HTML подмножество върху документ в писане — h1-h6 заглавия с размери per ниво, p абзаци (гол текст в тялото става имплицитни абзаци), ul/ol списъци с отместени li елементи (bullet или 1. номерация), hr линии, автоматични page break-и при долния margin и browser-style recovery за незатворени p/li блокове; head/script/style региони се прескачат, а container таговете минават прозрачно. Inline markup (b/i/u/font/a/sub/sup, entity-та, word wrap) се делегира на съществуващия TextOutHTML renderer, така че блоковете се държат заедно в рамките на страница; таблици, изображения, CSS и nested списъци са извън обхвата

Version 2.601.0

Added

  • Добавени са три HotPDFCLI команди: merge добавя всяка страница на допълнителните входове към първия документ и записва комбирания файл (-o изходен път, поне два входа, с пазене от колизия изход/вход), split записва всяка избрана страница на документ в собствен едностраничен файл (<prefix>-page<N>.pdf, --pages диапазон от 1, prefix по подразбиране от входния път), а export-svg записва SVG export на всяка избрана страница (<prefix>-page<N>.svg, страница 1 по подразбиране)

Version 2.600.0

Added

  • Добавен е SVG page export: BuildLoadedPageSVG връща standalone SVG 1.1 документ за всяка заредена страница, а SaveLoadedPageAsSVG го записва на диск; export-ват се paths (fill/stroke/fill-and-stroke paint оператори с DeviceRGB цветове), text runs (<text> елементи, позиционирани per character, ползващи същата font-decode fallback верига като text extraction, съобразяващи Tf/Tc/Tw/Tz/Ts и text матрицата вкл. ротация и мащабиране), image XObjects (декодирани и вградени като base64 PNG data URI, мапнати през CTM единичния квадрат) и Form XObjects (рекурсивна интерпретация с form матрицата и собствени /Resources), а /Rotate 90/180/270 страници се export-ват в завъртяната canvas геометрия
  • Известни ограничения, наследени от споделения content-stream device dispatcher: без W/W* clipping, без sh shadings, без Type 3 шрифтове, inline изображенията докладват само metadata, а stroke параметрите, поддържани от ExtGState (LW/LC/LJ/ca/CA), се спазват, докато plain w/J/j/d операторите не се диспетчеризират

Version 2.599.0

Added

  • Добавен е command-line инструментът HotPDFCLI (tools/HotPDFCLI): console front end с три команди — info (PDF версия, брой страници и размер на първата страница, encryption метод, linearization и xref структура, броячи за анотации/шрифтове/изображения/формуляри/подписи, Info metadata), extract-text (--pages диапазони от 1, --out файл изход, --layout monospaced grid режим, съвпадащ с визуалния ред на четене) и verify (статус per signature поле, signer, причина, hash, време на подписване, покритие на целия документ и състояние на сертификата, ненулев exit код при неуспех на произволен подпис); Build-HotPDFCLI.bat произвежда Win32 и Win64 бинарни файлове

Version 2.598.0

Added

  • Добавен е SetRenditionMediaPlayParameters: прикачва или обновява /P media play parameters речника на media rendition с must-honour /MH или best-effort /BE цели, носещи процента на звука, видимост на контролера, autoplay флаг, fit режим (meet/slice/fill/scroll/hidden), брой повторения и продължителност като intrinsic, infinity или изричен timespan
  • Добавен е SetRenditionMediaScreenParameters: прикачва или обновява /SP media screen parameters речника на media rendition (тип на прозореца floating/full-screen/hidden/screen-annotation правоъгълник, DeviceRGB цвят на фона, непрозрачност на фона, monitor индекс)
  • Добавен е SetSoundAnnotationParameters: презаписва sample формата на /Sound потока на Sound анотация (rate, канали, битове на sample, Raw/Signed/muLaw/ALaw кодиране) отвъд вградените 22050 Hz stereo 16-bit Signed default-и и задава /Name икона като Speaker или Mic

Version 2.597.0

Added

  • Добавен е SetMovieAnnotationParameters: презаписва /Movie речника на movie анотация (aspect двойка, ротация 0/90/180/270, продължителност в секунди, видимост на poster-а), който AddMovieAnnotation бе създал с вградените си default-и
  • Добавен е SetRichMediaPresentation: попълва /RichMediaSettings activation, deactivation и presentation речниците на RichMedia анотация (condition имена като PO page-open, toolbar / navigation UI / context click / transparency флагове); празно condition име пропуска съответния речник
  • Добавен е ResolveIndirectObject върху THotPDF: разрешава indirect reference-ите, които authoring страната съхранява в записаните речници, така че повикващите могат да навигират пресни изградени object дървета; AddRichMediaAnnotation вече също регистрира своята анотация в LastAnnotation

Version 2.596.0

Added

  • Добавено е live откриване на revocation evidence: certificate парсерът вече чете AIA OCSP responder и CRLDistributionPoints URI разширения, HPDFExtractCertificateRevocationURLs ги излага per сертификат, а HPDFCollectCMSRevocationRequests ги превръща в evidence заявки (GET pkix-crl per distribution point, POST ocsp-request с минимално RFC 6960 SHA-256 CertID тяло, изградено от сертификата и неговия issuer, като self-signed сертификатите се резолват като собствен issuer)
  • Добавен е HPDFValidateCMSCertificatePathOnline: събира тези заявки, изпълнява ги през transport, подаден от повикващия, върху съществуващата retry/worker механика (библиотеката никога не отваря socket-и) и подава всеки извлечен OCSP отговор и CRL към offline validator-а; неуспешните fetch-ове се деградират до offline evidence семантиката

Version 2.595.0

Added

  • Добавено е JBIG2 halftone region декодиране (segment types 22/23): pattern речници (type 16) с MMR или arithmetic collective bitmap-и, gray-scale bit-plane стекове както в MMR (byte-aligned верижни plane-ове), така и в arithmetic форма (един споделен MQ декодер), grid поставяне с 8.8 fixed-point вектори и опционалната HSKIP празна карта
  • Добавени са JBIG2 standalone generic-refinement региони (types 42/43, GRTEMPLATE 0/1 с TPGRON), уточняващи архивирания bitmap на референциран region сегмент или page буфера
  • Добавени са AddPubSecKeyMaterial / ClearPubSecKeyMaterials: допълнителни recipient частни ключове, пробвани срещу всеки /Recipients плик, когато първичният PubSecKeyMaterial не съвпадне
  • Добавени са test-stream builder-ите HPDFJBIG2Codec_EncodeHalftoneRegionTestStream и HPDFJBIG2Codec_EncodeStandaloneRefinementTestStream, покриващи новите segment types от край до край

Fixed

  • Поправено е public-key AES-128 зареждането на документи: legacy object проходът оставяше FileKey, StringKeyType и StreamKeyType неинициализирани след pubsec разделянето, така че всеки обект се декриптираше с боклук ключ (Win64 зареждане се проваляше направо; Win32 зареждане мълчаливо даваше грешен plaintext)
  • Поправено е round-trip-ването на криптирани string-ове: ciphertext-ът вече винаги се сериализира като hex string, защото literal string-овете нормализират CR, LF и CRLF към единичен LF, а escape обработката можеше да обърне произволни cipher байтове

Version 2.594.0

Added

  • Добавено е вградено identity приближение за предефинираните CJK UCS2/UTF16 CMap-и (UniJIS-UCS2-H, UniGB-UTF16-V и още 15): HPDFLoadStandardCMapFile отговаря от вградена таблица, когато на диска няма CMap ресурси, така че Type0 text extraction вече не декодира 2-байтови кодове по един байт наведнъж
  • Добавена е поддръжка на потребителски JBIG2 Huffman таблици (segment type 53, Annex B.2 descriptor форма): нативният декодер парсва table сегментите, а selector стойност 3 за symbol-dictionary SDHUFFDH/SDHUFFDW/SDHUFFBMSIZE/SDHUFFAGGINST и text-region SBHUFFFS/DS/DT/RDW/RDH/RDX/RDY/RDSIZE ги разрешава от референцираните сегменти
  • Добавен е SetStructureClassMapEntry, регистриращ споделения attribute речник на class име в StructTreeRoot /ClassMap, довършващ SetStructureElementClass /C API

Fixed

  • Поправено е multi-recipient key възстановяването при public-key: /Recipients пликовете се съхраняваха в непреброен списък, alias-вал един буфер между записите, така че документи с двама или повече получатели извеждаха грешен file ключ за всеки шифър; пликовете вече са owned копия, а legacy SHA-1 пътят hash-ва pristine envelope байтове като AES-256 пътя

Version 2.593.0

Added

  • Добавен е Shading Type 1 (function-based) рендеринг: видимата част на domain правоъгълника се дели от quadtree, воден от цветова грешка, и всеки лист cell се рисува като два gradient триъгълника с vertex цветове, семплирани от 2-входовата функция, заменяйки предишната "not sampled" fallback диагностика
  • Добавено е снисходително оценяване на 2-входови функции: функция, декларираща само един вход, се деградира до f(x) (константа по втората domain координата) вместо да се проваля, така че sampled и exponential функции зад Type 1 shading продължават да се рисуват

Version 2.592.0

Added

  • Добавен е object-stream quarantine: повреден /Type /ObjStm контейнер се записва с причина (THPDFObjStmQuarantineReason: not a stream, bad dictionary, bad header, bad stream size, decrypt failed, decompress failed, /First out of range, header unparsable или container exception), диагностичен ред и member object номерата, които е оставил неразрешени, докато независимите контейнери продължават да се зареждат
  • Добавен е member-level quarantine (osqrMemberUnparsable): member тяло, което не успее да се парсне от успешно декодиран контейнер, се записва веднъж, без да засяга sibling-ите си, а GetLoadedQuarantinedObjStmCount / GetLoadedQuarantinedObjStmInfo излагат всеки запис; quarantine записите оцеляват през recovery retry-тата на едно зареждане, дедупликират се per контейнер и се изчистват при следващото зареждане

Version 2.591.0

Added

  • Добавен е paging на кръстосаната reference карта: когато гъстата карта надхвърли THotPDF.XRefMapPagingThreshold записа (по подразбиране 250000, 0 изключва), load-complete проходът я опакова в THPDFXRefMapPager -- сортиран snapshot от пакетирани 24-байтови слотове, обслужван с binary search през LRU-материализирана страница от 64 записа -- и освобождава гъстия масив
  • Добавен е GetLoadedXRefMapPaged, докладващ paged състоянието с брой записи, snapshot байтове и брояч hit/miss на прозореца; rebuild-ът на free set при incremental save и резолюцията на indirect /Length на лениво материализирани stream членове отговарят през pager-а, така че paged документите запазват пълна функционалност

Version 2.590.0

Added

  • Добавени са изрични object lifecycle състояния: THPDFObjectLifecycleState получава olsRaw (индексирани, но нематериализирани компресирани членове), olsParsed (материализирани от source байтове, немодифицирани) и olsFlushed (сериализирани към изходния документ); заредените обекти вече носят olsParsed вместо generic clean състоянието
  • Добавени са MarkRaw, MarkParsed и MarkFlushed върху THPDFObject; GetLoadedObjectLifecycleState връща olsRaw за компресирани членове, чието тяло все още не е материализирано
  • Добавени са RawCount, ParsedCount и FlushedCount към THPDFObjectLifecycleStatistics; всеки full-save път (plain, packed, linearized) мести излъчените обекти в olsFlushed, докато IsDirty продължава да значи olsDirty или olsMustWrite

Version 2.589.0

Added

  • Добавена е zero-copy materialization на object-stream членове: компресираните членове вече се парсват през read-only slice изглед върху споделения декомпресиран container буфер вместо дублиран substring плюс второ копие на потока, като се пази точната byte подредба, включително крайния line feed
  • Добавен е THPDFObjectStreamSliceStream — public read-only view поток, излагащ (source, offset, length) slice-ове с виртуален краен LF, плюс две нови полета в THPDFObjectStreamCacheInfo, SliceViewCount и SliceViewBytes, докладващи колко членове преминават през zero-copy изгледи при materialization

Version 2.588.0

Added

  • Добавена е конкурентна декриптация на object-stream контейнери чрез новия HPDFObjStmDecode unit: THotPDF.ObjStmDecryptWorkers (по подразбиране 1) ограничава worker нишките, които предварително декриптират всеки различен AES-256 криптиран /Type /ObjStm контейнер преди serial decode-and-index прохода; key материалът per контейнер се копира и изчиства per заявка, резултатите запазват queue реда, а legacy RC4 / AES-128 контейнерите остават на повикващата нишка

Version 2.587.0

Added

  • Добавено е повторно зареждане на public-key криптирани документи: документи, криптирани с /Adobe.PPKLite / /Adobe.PubSec, вече се зареждат, когато повикващият зададе PubSecKeyMaterial (от HPDFParsePFX); prescan-ът разгъва /Recipients RSA-OAEP плика, възстановява seed-а и преизвежда file ключа, така че container и string декриптирането върви непроменено
  • Добавен е callback-ът PubSecRecipientQuery, който избира кой recipient плик да разгъне подаденият ключ, с PubSecRecipientQueryContext за състояние на повикващия
  • Добавен е HPDFUnwrapRSAOAEPRecipientEnvelope, възстановяващ seed-а и permission битовете от CMS EnvelopedData recipient плик

Fixed

  • Поправени са дефекти в public-key writer-а, разкрити от reload round-trip-а: recipient пликовете се разваляха от binary-through-Unicode string обръщане (сега се съхраняват hex-кодирани), digest-ът на file ключа hash-ваше байтовете на плика с отместване от един байт, а /Recipients string-овете се криптираха като обикновени низове — сега те се изключват чрез изричния флаг SkipEncryption

Version 2.586.0

Added

  • Добавено е XFA overflow target продължение: <overflow target="..."/> вече насочва прелелите flowed елементи в правоъгълника на именувания target subform, нареждайки continuation редове, докато target-ът се напълни, с fallback към нормалната content-area верига и warning, когато target-ът липсва, е по-малък от един елемент или е пълен

Version 2.585.0

Added

  • Добавен е XFA barcode рендеринг: <draw><value><barcode type="..."> вече излъчва device-independent черти вместо да се деградира до read-only текстово поле, като мапва XFA symbology имена (code3Of9, code128, ean13, upcA, codabar и други) върху barcode engine-а
  • Добавена е XFA transformation графика: rotate, <tran><scale> и <tran><translate> увиват всеки вид графика (line, arc, правоъгълник, изображение, текст, barcode) в center-rotation q ... cm ... Q transform

Version 2.584.0

Added

  • Разширен е FormCalc със string функции: Concat, Len, Left, Right, Substr, Replace, Lower, Upper, Trim и Space, включително quoted string литерали и смесени text/numeric изрази
  • Добавена е FormCalc date конверсия: Date2Num/Num2Date обръщат ISO дати през serial day броенето с епоха 1900, плюс Date()
  • Добавена е FormCalc finance библиотеката: Pmt, FV, PV, Rate и NPer с конвенцията за знаци на cash-flow, композируема с numeric функции като Round

Version 2.583.0

Added

  • Довършена е XFA SOM резолюцията с междинни голи * wildcard сегменти, които слизат във всеки child branch, и с истински class token-и: #subform/#dataGroup избират container-class възли, #field избира field-подобни възли, а другите #name token-и съвпадат с custom data възли
  • Class token-ите вече се комбинират с индексиране (#subform[2] брои всеки възел от класа в document order) и участват в descendant .. търсения

Version 2.582.0

Added

  • Добавено е съгласуване на appearance състояния за radio-button и checkbox: записването на button стойност през SetFormFieldValue или SetLoadedFormFieldValueByName вече избира съответстващото /AS състояние във всеки widget, а flattening-ът се съгласува преди генериране на appearance-ите, така че остаряло Off състояние никога не надделява над импортирана стойност
  • Добавена е стабилност при регенерация на button appearance-и: EnsureLoadedFieldAppearanceStream запазва съществуващото on-state име на state речник и извежда on-state имената на radio децата от собствената им /T export стойност

Version 2.581.0

Added

  • Добавени са завъртяни field appearance-и: widget-ите с /MK /R вече носят ротацията като /Matrix върху генерирания appearance, като запазват незавъртяното form пространство, така че comb, multiline и listbox рендерингът остава непроменен, а flattening-ът картира трансформирания правоъгълник върху /Rect
  • Добавена е поддръжка на rich-text appearance: полетата без plain /V, но с /RV тяло, рендерират символното съдържание с премахнат inline XHTML markup
  • Добавено е whole-word пренасяне за multiline текстови полета: прекалено дългите редове се чупят на word граници чрез per-character оценката на ширината, като думите остават цели вместо да се режат

Version 2.580.0

Added

  • Добавени са CID-font field appearance-и: EnsureLoadedFieldAppearanceStream намира /DA шрифта през AcroForm речника /DR и прикача наново document font обекта към appearance ресурсите, така че Type0 шрифтове рендерират CJK стойности като UTF-16BE hex текст вместо Helvetica заместване
  • Добавено е appearance покритие за всеки AcroForm field клас: checkbox и radio widget-ите вече получават Off плюс on-state appearance-и (векторна отметка и запълнен кръг, без зависимост от ZapfDingbats), push бутоните рендерират captions, а listbox-ите рисуват по един ред /Opt с маркирания ред подчертан
  • Добавена е оценка на ширината per character, мерища CJK и full-width диапазони на пълен em, която подобрява quadding и comb подравняването за multi-byte стойности

Version 2.579.0

Added

  • Добавени са строги form-script бюджети чрез свойството THotPDF.FormScriptBudgets: wall-clock CPU cutoff, кумулативен memory бюджет и таван за генерирания изход вече ограничават всяко изпълнение на EvaluateLoadedFieldJavaScript и всеки recalculation проход
  • Добавен е record-ът THPDFScriptBudgets, покриващ дължина на скрипта, statements, recursion дълбочина, операции, CPU време, памет per value и кумулативна и изходни байтове; нула в което и да е поле вдига съответния лимит
  • Добавена е evaluation телеметрия: THPDFJavaScriptEvaluationResult вече докладва ElapsedMilliseconds и ValueBytes редом до броя операции

Version 2.578.0

Added

  • Добавен е dependency graph за form-field изчисления чрез THotPDF.BuildLoadedFormCalculationGraph: всеки Calculate скрипт, регистриран в /CO, се анализира статично и се свързва в topological ред на оценяване
  • Добавен е THotPDF.RecalculateLoadedFormFieldsIncremental, който преизчислява само изчисленията, transitively чели променено поле, така че вериги като subtotal към total се разпространяват в един проход, без да пипат несвързани изчисления
  • Добавено е dirty-field tracking: записите през SetFormFieldValue и SetLoadedFormFieldValueByName натрупват dirty set, консумиран от incremental overload-а без параметри, overload-а с изрично изброени променени полета и пълния recalculation проход
  • Добавен е HPDFFormCalcGraph unit, излагащ affected-closure заявки, пълната target последователност, cycle броене и неразрешени source имена за tooling preview-и
  • Добавен е HPDFExtractSafeJavaScriptFieldReferences, извличащ имената на полетата, които safe-subset скрипт чете от AFSimple_Calculate аргументи и getField достъпи, като прескача string литерали

Changed

  • Dependency циклите вече запазват /CO реда на документа и променено поле никога не преизчислява собствения си скрипт, така че цикличните документи се държат като еднопроходен recalculation, а потребителските стойности винаги оцеляват

Version 2.577.0

Added

  • Добавена е batch валидация на подписи чрез новия метод THotPDF.ValidateLoadedSignatureBatch: всеки зареден подпис минава byte проверка и certificate валидация в един проход със структурирани резултати за всеки подпис
  • Добавен е HPDFSignatureBatch unit със споделен certificate-path кеш: подписите с повтаряща се signer верига преизползват предишната path присъда вместо да я преизчисляват
  • Добавено е споделено timestamp кеширане в рамките на batch: еднаквите RFC 3161 document timestamps и вградените signature timestamp token-и прескачат повторна верификация чрез THPDFCMSVerifyOptions.SkipSignatureTimestampVerification
  • Добавено е споделяне на revocation evidence между подписите: OCSP отговорите и CRL-ите, видяни при една валидация, се съхраняват в THPDFRevocationEvidenceCache и се инжектират в по-късните подписи под новия vesCache evidence source
  • Добавен е THPDFSignatureValidationBatch за standalone batch изпълнения с FailFast, worker паралелизъм, cancellation token-и и споделен външен revocation кеш
  • Добавен е HPDFSignatureBatchResultToJSON, който представя целия batch изход със cache статистика като machine-readable JSON

Version 2.576.0

Fixed

  • Поправен е crash с access violation при стартиране на Showcase демото: THPDFViewer изстрелва OnPageChange по време на конструкция и rebinding, така че първата генерация на галерията вече се изпълнява от OnShow (след като window handle-ите съществуват), а всеки event handler се пази от контроли, които все още са nil
  • Поправено е Showcase галерията да вгражда пълни TrueType шрифтове за своите Unicode примери: font subsetting вече е включен и десетстраничният документ се смалява от около 3.9 MB на около 336 KB

Version 2.575.0

Added

  • Добавено е algorithm-agile създаване и валидиране на PDF MAC за SHA-256, SHA-384, SHA-512, SHA3-256, SHA3-384 и SHA3-512, включително streaming range hashing и проверки за консистентност на CMS algorithm protection
  • Добавени са изрични THPDFPDFMACOptions профили compatibility, modern, high-assurance и custom с алгоритми за генериране, validation allowlist-и, опционално налагане на AES-256-GCM, policy диагностика и source-съвместими default overload-и

Security

  • Валидацията на PDF MAC вече открива кодирания digest преди hashing на големи byte range-ове и отхвърля забранени алгоритми или encryption режими преди автентикация, докато HMAC-SHA-256, HKDF-SHA-256 и AES-256 key wrap остават фиксирани от формата на документа

Version 2.574.0

Added

  • Добавен е SaveIncrementalUpdateAuthenticated с режими за cryptographic integrity и trusted certificate: методът записва candidate в същата директория, автентикира всеки подпис с политика, налага решенията DocMDP, FieldMDP, UR или UR3, Identity и unknown-transform през по-късните ревизии и атомарно замества целта само след като всяка политика успее

Security

  • Анализът на ревизии вече възстановява transform политиките от точния подписан snapshot и ги свързва с оригиналния signature обект, byte range и CMS стойност, вместо да се доверява на по-късни предефиниции в активния object graph, а отхвърлените candidate-и се изтриват, без да пипат съществуваща цел

Version 2.573.0

Added

  • Добавена е флагманската Showcase демо програма под Demo\Delphi: тя генерира десетстраничен feature-gallery PDF при стартиране (gradient корица, типография с inline rich text, векторни gradient-и / pattern-и / прозрачност, фактура с THPDFTable, barcode symbologies, изображения, рисувани по време на изпълнение, анотации и линкове, optional-content слоеве и PAdES signature appearance) и го рендерира във вградения THPDFViewer със синхронизиран списък с теми
  • Добавено е действие Encrypt AES-256 с един клик към Showcase демото, което преизгражда галерията с AESV3 (R6) криптиране, user парола и само-print разрешения в HotPDF-Showcase-Encrypted.pdf
  • Добавена е bookmark навигация за всяка Showcase галерийна страница чрез BeginDoc(True) и OutlineRoot.AddChild, така че генерираният документ се отваря с попълнен outline панел

Version 2.572.0

Changed

  • Разширени са инспекцията на signature transform-и и класификацията на incremental промени за всички стандартни методи: GetLoadedSignaturePermissions вече докладва DocMDP, UR, FieldMDP, Identity, неизвестни методи, връзката между Catalog /UR и /UR3, всеки стандартен usage-right бит и ограничения transitive Identity /Data object обхват; анализът на ревизии разграничава form fills, подписи, операции create/delete/modify върху анотации и вградени файлове и излага независимите URCompliant, IdentityCompliant и агрегатното TransformCompliant решение

Fixed

  • Прилага се стандартното default DocMDP /P 2 разрешение при липса на опционалния запис и се отхвърлят malformed, дублирани, несъответстващи или неизвестни transform структури вместо да се игнорират мълчаливо

Version 2.571.0

Added

  • Добавена е поддръжка на MacExpertEncoding: таблицата с glyph имена, транскрибирана от PDF 1.7 Appendix D.3, вече захранва HPDFBaseEncToUnicode, така че expert-set Type 1 шрифтове се декодират до истински Unicode при извличане на текст вместо raw byte идентичност; Adobe Glyph List получи тринадесетте accent small варианта (Acutesmall до Tildesmall) с кодовите им точки за spacing-accent
  • Добавени са единадесетте separable blend режима (ISO 32000-1 11.3.5): HPDFBlendComponent имплементира Multiply, Screen, Overlay, Darken, Lighten, ColorDodge, ColorBurn, HardLight, SoftLight, Difference и Exclusion; renderer-ът парсва /BM от ExtGState в graphics-state snapshot-а и композира рисуваните пиксели спрямо фона преди alpha претеглянето
  • Разрешени са nested GSUB contextual lookup-и: SequenceLookupRecord вече може да сочи contextual (Type 5), chained-contextual (Type 6) и reverse-chained (Type 8) lookup-и с диспетчиризация през споделените per-format applier-и под съществуващия таван за recursion дълбочина

Version 2.570.0

Added

  • THPDFRevocationEvidenceCache — thread-safe LRU кеш за timestamp / OCSP / CRL evidence с ключове по issuer, serial и responder идентификатори (case-insensitive). Записите носят интервал на валидност, lookup-ите избират най-късно започващия интервал, съдържащ времето на оценяване, попаденията обновяват recency, а бюджетите по брой записи и байтове задействат FIFO eviction с пълни броячи за hit / miss / eviction / replacement чрез GetInfo
  • Добавени са page-level SaveState / RestoreState върху THPDFPage, излъчващи graphics-state операторите q / Q, така че повикващите могат да ограждат clip, ExtGState и text-outline секции, без да пипат content builder-а

Fixed

  • Поправено е изпускането на free записите от традиционни таблици от слетата кръстосана reference карта при зареждане: type-0 записите от classic таблици вече се записват като техните xref-stream двойници, така че втори проход на SaveIncrementalUpdate вижда запазената free верига вместо SourceFreeObjectCount=0 и изгубени поколения
  • Поправено е THPDFSignatureEvidenceTask да хвърля "Cannot call Start on a running or suspended thread" при конструиране: задачата вече стартира в AfterConstruction, след като обектът е изцяло изграден, вместо да надпреварва RTL проверката на thread състоянието отвътре в конструктора

Version 2.569.0

Added

  • THPDFCertificateValidationOptions.TrustPurpose избира unrestricted, document-signing, code-signing, email-protection, timestamping, OCSP-signing или custom EKU политика, докато path валидацията запазва пълното налагане на permitted и excluded name-subtree, certificate-policy mapping и inhibition, а избраният purpose OID се докладва в THPDFCertificateValidationInfo

Version 2.568.0

Added

  • THPDFSignatureEvidenceTask добива timestamp, OCSP и CRL evidence чрез ограничени background worker-и със стабилна подредба на резултатите, exponential retry и ограничени server закъснения, cooperative отмяна, лимити за размера на отговора, изолация на transport изключения, live snapshot-и и разграничени изходи за permanent, exhausted, cancelled и oversized

Version 2.567.0

Added

  • THPDFWindowsKeyStorageSignatureProvider подписва през smart-card, TPM и vendor CNG key-storage provider-и без експортиране на частни ключове, поддържа lookup на запазени ключове или borrowed и owned NCRYPT_KEY_HANDLE стойности, опционално hardware налагане, silent достъп, RSA PKCS#1 v1.5, RSA-PSS, ограничен изход и класификация на provider статуса, редом до съществуващия PKCS#11 адаптер

Version 2.566.0

Added

  • HPDFNormalizeContentStreamGraphicsState и HPDFCompareContentStreamsSemantic сравняват декодирани content streams чрез ограничени канонични събития, елиминирайки разликите в изписването на числа и низове, излишните graphics и text-state setter-и, празните q/Q области и еквивалентните конкатенирани матрици, като запазват ефективното състояние, операндите на операторите и SHA-256 идентичностите на inline изображенията

Version 2.565.0

Changed

  • SaveIncrementalUpdate вече преизгражда пълната активна free-object верига след разрушителни редакции, запазва предишните free поколения, увеличава новосвободените поколения с насищане при 65535, задържа ненулевите поколения за пренаписаните обекти, излъчва записите в детерминистичен ред по object номер, а резултатът е достъпен чрез GetLastIncrementalXRefRebuildInfo

Version 2.564.0

Added

  • THPDFPage.TextOutOutline shape-ва избран от повикващия Unicode текст през текущия TrueType face, конвертира GDI записите за move, line, кубичен Bézier и close-path в нативни PDF пътеки с размер на шрифта, хоризонтално мащабиране, позиция на baseline и ротация, а после ги запълва при съществуващите clipping, цвят, blend-mode, alpha и soft-mask graphics state, без да вгражда текстови оператори

Version 2.563.0

Added

  • FlattenLoadedPageComplexGraphics разпознава mesh shading и сложни Pattern ресурси, оценява нарастващи raster резолюции спрямо ограничена high-resolution референция от 16 региона с luma-претеглена перцептивна метрика за грешка, запазва страниците със spot цветове и излъчва избрания резултат през безшевния ограничен CalRGB tile writer

Version 2.562.0

Changed

  • FlattenLoadedPageTransparency вече обработва source ICC, CIE, device, soft-mask, blend-space, rendering-intent и black-point-compensation цветове през споделения renderer, след което излъчва безшевни Flate-компресирани D65 CalRGB плочки под caller-контролирани бюджети за общ raster и пиксели на плочка, с peak-memory телеметрия

Version 2.561.0

Added

  • ScrubLoadedRedactionRemnants премахва Redact и file-attachment анотации, информация за документа, XMP и частни metadata, свързани и вградени файлове и всеки indirect шрифт, изображение, payload или друг обект, останал недостижим след redaction, след което уплътнява object номерата и налага пълно пренаписване, което не може да задържи байтове от incremental ревизии

Version 2.560.0

Changed

  • ApplyLoadedRedactions вече поставя even-odd clipping граница около цялото съдържание на страницата, така че пресичащите се текст, пътеки, изображения, pattern-и, inline изображения и Form XObjects се изрязват прецизно, докато директните текстови операнди и отделните TJ елементи се зануляват чрез glyph четириъгълници, а застъпващите се redaction правоъгълници се сливат консервативно

Version 2.559.0

Changed

  • Импортирането на страници вече преизползва еквивалентни indirect изображения, Form XObjects, Pattern-и, вградени шрифтови програми, Font речници и ExtGState речници между страници и source документи чрез канонични dependency-aware SHA-256 fingerprint-и, със статистика за hit, miss и записи в обхват на целия целеви документ

Version 2.558.0

Added

  • AnalyzeLoadedPageSemanticText и ExtractLoadedPageSemanticText изграждат стабилен ред на четене от glyph четириъгълници с повтарящи се колонови ивици, подравнени таблици с редове и клетки, нива на списъци, заглавия, captions на фигури и таблици и вертикални зони с пълна ширина, като ползват ограничено O(n log n) групиране вместо реда на потока

Version 2.557.0

Added

  • Извличането от заредени страници вече запазва multi-scalar /ToUnicode цели и връща записи за знаци с трансформирани четириъгълници, baselines, source клъстери и изрично членство в лигатурни компоненти, като съобщава дали шрифтовите ширини и вертикалните метрики правят геометрията точна

Version 2.556.0

Changed

  • Извличането на текст от заредени страници вече възстановява липсващи или непълни /ToUnicode mapping-и от вградени sfnt cmap формати 0, 4, 6 и 12, glyph имена от AGL-базирани /Encoding /Differences, коректно декодирани бинарни /CIDToGIDMap потоци и Adobe CID collection таблици, като същите fallback-и са налични и за reverse text replacement

Version 2.555.0

Changed

  • Повторното използване на shaping от страната на producer-а вече ползва hashed lookup, стабилни идентичности на шрифтовото съдържание, точна 64-битова feature mask, ключове по вертикалност, скрипт, език и посока, плюс context-bound word-slice записи, които могат да сглобят повтарящи се преобразования с еднаква дължина през променящи се text runs, като запазват ограничена LRU памет и подробна slice телеметрия

Version 2.554.0

Changed

  • Смесеният текст отдясно наляво вече разрешава сдвоените скоби от обхванатия и предхождащия strong скрипт, отразява скобите и често срещаните directional оператори само в RTL runs, запазва supplementary-plane surrogate двойки и клъстери от combining знаци при обръщането на LTR подреди и държи raw glyph-ID runs отделно от обработката на Unicode пунктуация

Version 2.553.0

Changed

  • Вертикалното писане вече извежда TrueType glyph началата от vmtx top side bearings и glyf граници, дава приоритет на vrt2 пред vert по цялото запазващ дължината GSUB run и ползва съпоставените Unicode vertical presentation glyph-и за пунктуация, докато запазва извлечения source текст

Version 2.552.0

Added

  • Регистрираните OpenType цветни шрифтове вече избират най-близкия ограничен sbix или CBDT/CBLC bitmap strike, безопасно разрешават sbix дублирани glyph записи, разпознават PNG, JPEG и TIFF ресурси, декодират PNG и JPEG нативно и позиционират всеки bitmap от strike ppem и baseline origin метриките му

Version 2.551.0

Changed

  • Регистрираните OpenType SVG цветни glyph-и вече рисуват базови пътеки, фигури, наследени плътни запълвания и щрихи, афинни трансформации и gzip-компресирани документи директно като PDF вектори, с ограничен parsing и fail-closed отхвърляне на скриптове, entities, външни ресурси, активни връзки, неподдържана opacity и прекален вход

Version 2.550.0

Changed

  • Регистрираните OpenType шрифтове вече парсват ограничени COLR v1 paint DAG-ове и рисуват наслоени плътни, линейни, радиални и sweep запълвания чрез glyph clips, афинни paint трансформации, преизползваеми цветни glyph-и, source-over подредба и PDF blend композити, докато циклични, прекалено обемни и out-of-range графики се отхвърлят fail-closed преди извеждането на страницата

Version 2.549.0

Added

  • BeginLoadedPageProgressiveRegionRender вече рендерира ограничен прозорец в user space чрез подновяеми operator slices, преизползва кеширани display lists, консервативно отхвърля несвързани paint обекти, докато запазва напредването на графиката и текста, размерува запазванията на паметта спрямо ROI-а и докладва броя видимите и отхвърлените paint обекти

Version 2.548.0

Changed

  • Overprint proofing-ът вече запазва целевите плаки, липсващи от DeviceGray, Separation и DeviceN боите, прилага точна DeviceCMYK /OPM 1 защита на нулевите компоненти, заменя изрично назованите process плаки и комбинира spot мастилата през техните tint трансформации и alternate цветови пространства

Version 2.547.0

Changed

  • Рендерингът на заредени страници вече обработва isolated и knockout transparency групи в ограничени плочки от 768 пиксела, запазва абсолютните device координати през вложени групи и tile-локални soft masks, декодира и токенизира всеки Form веднъж и излага броя групи, броя плочки, peak tile съхранението и приблизителното съхранение без плочки чрез GetLastTransparencyGroupTileStats

Version 2.546.0

Fixed

  • Luminosity soft masks вече разрешават и валидират цветовото пространство за blending на своята transparency група, извеждат колориметричното CIE Y за ICCBased и Lab съдържание, конвертират Separation и DeviceN paint през пълните alternate-space трансформации, прилагат точни backdrop-и по брой компоненти през vector, shading, mesh и image пътеки и преизползват компилираните маски само за съвпадащи трансформации и rendering intents

Version 2.545.0

Added

  • Рендерингът на заредени страници вече изпълнява Type 6, Type 10 и Type 16 threshold halftones с компактна периодична геометрия, точно 8-битово или big-endian 16-битово сравнение, независими Type 5 RGB screens и transfer overrides, ограничен 64 MiB кеш от компилирани screens и атомарен continuous-tone fallback за повредени или прекалено големи данни

Version 2.544.0

Added

  • Рендерингът на заредени страници вече изпълнява пълните /TR и /TR2 масиви с независими identity канали и оценява кешираните Type 0 sampled функции в едно до четири входни и изходни измерения, всички стандартни packed дълбочини на семпли, изрични encode и decode mapping-и, линейна интерполация, многомерна кубична интерполация и едномерни естествени кубични сплайни под бюджет от 64 MiB за кеша на функции

Version 2.543.0

Added

  • Рендерингът на заредени страници вече кешира декодирани и токенизирани Type 3 CharProc display lists по шрифт, glyph, линейна матрица и цветово състояние през 256-записов, 131,072-токенов LRU, запазва транслацията и пълната d0/d1 изпълнителна семантика и излага hit, miss, eviction, size и oversize-bypass телеметрия чрез GetLastType3GlyphCacheStats

Version 2.542.0

Added

  • Цветните и нецветните tiling pattern-и вече се рендерират с pattern матрици в координатите по подразбиране на родителя, всичките три ISO tiling типа, стъпки със знак, изолирани cell пътеки, консистентни базови оцветения за fill и stroke, трансформации на вложени ресурси, ограничени recursion и tile изпълнение, докато RegisterTilingPattern и THPDFTilingPatternBuilder излагат валидиран избор на матрица и tiling тип

Version 2.541.0

Added

  • Заредените JPEG и JPEG 2000 изображения вече могат да избират детерминистично качество на рекомпресия от ограничени encoding проби, като комбинират семплирана luma-претеглена перцептивна грешка с относителната цена в кодирани байтове чрез OptimizeLoadedImagesByVisualCost, включително изрични лимити за грешка и спестяване, проверки за отмяна, стабилен tie-breaking и подробна телеметрия на избора

Version 2.540.0

Added

  • Декодирането на JPEG 2000 региони вече може да възстановява независими пресичащи се codestream плочки конкурентно с per-worker codec състояние, детерминистична row-major композиция, проверки за отмяна, автоматични лимити за CPU и потребителски worker-и, fallback на бюджета за peak memory и decode телеметрия, изложена чрез JPEG2000ParallelTileDecoding, JPEG2000TileWorkerLimit и GetLastJPEG2000ParallelDecodeStats

Version 2.539.0

Added

  • Декодирането на JPEG 2000 вече поддържа валидиран директен достъп до codestream плочки, комбинирана реконструкция на source регион и resolution-of-interest със степен на двойката, бюджети за декодирания изход, заявки за резолюция през crash-isolated codec worker-и и автоматичен избор на renderer за заредени страници по видимите целеви пиксели чрез DecodeLoadedImageRegionAtResolution

Version 2.538.0

Added

  • Прогресивният рендеринг на заредени страници вече декодира подходящите DCTDecode изображения по един JPEG scan на ограничено продължение, публикува броячи за scan и изображение плюс отменяеми scan callbacks, прилага бюджети за изход и брой scan-ове и се връща към пълния път на изображението при несъвместимо paint състояние, изключено декодиране, codec изолация или повреден вход

Version 2.537.0

Added

  • Заредените CCITTFaxDecode изображения вече декодират T.4 и T.6 uncompressed extension режими, различават EOFB от неподдържани разширения, спазват EndOfLine, EndOfBlock и DamagedRowsBeforeError и възстановяват повредените Group 3 редове с ограничена EOL ресинхронизация и замяна на редове по спецификацията

Version 2.536.0

Added

  • Заявките за JBIG2 image региони вече изграждат ограничено dependency closure и декодират само регионите на страницата, пресичащи заявената плочка, композират изрязаните пиксели с декларираните оператори, прескачат независими off-window региони, запазват верижните global речници и излагат decode статистика чрез THPDFJBIG2Decoder.LoadRegionFromByteArray

Version 2.535.0

Added

  • Нативният Pascal JBIG2 път вече приема ограничени long-form referred-segment таблици с едно-, дву- и четирибайтови идентификатори, разрешава многонивови вериги от global речници, отхвърля невалидни зависимости и излага HPDFJBIG2SplitSymbolDictionaryGlobals за разделяне на потоци с запазени зависимости

Version 2.534.0

Added

  • Нативният Pascal JBIG2 декодер вече запазва и преизползва generic и refinement аритметичните probability контексти през зависимите symbol речници, включително верижни и fan-out препратки, с template-aware оразмеряване на контекста, deep-copy изолация и защити от повреден source

Version 2.533.0

Added

  • Нативният Pascal JBIG2 декодер вече обработва аритметичните и standard-Huffman refinement и aggregate символи в symbol речниците, плюс refinement инстанциите в текстови региони, със споделени refinement контексти, ограничени аритметични substream-и, адаптивни refinement шаблони и защити от повредени препратки

Version 2.532.0

Added

  • Зареждането на документи с голям отпечатък, рендерингът на страници, оптимизацията на потоци и паралелната оптимизация на изображения вече споделят fair process-wide scheduler за peak memory с конфигурируем байтов бюджет, FIFO и oversized admission, изчаквания с отчитане на отмяната, fast path без алокации при неконфликтен достъп, кумулативна статистика за натиск и per-operation телеметрия за резервации и изчаквания

Version 2.531.0

Changed

  • Временното spill съхранение вече ползва независимо компресирани блокове от 256 KiB, задържа некомпресируемите блокове без разширяване, групира записите през ограничена асинхронна опашка, поддържа произволно презаписване и resize и докладва логическа, физическа, блокова, batch и backpressure статистика

Version 2.530.0

Changed

  • Raw компресираните диапазони, декодираните изображения, компилираните display lists и рендерираните raster страници вече комбинират least-recently-used подредба с ограничен frequency sketch, като не позволяват еднопроходните сканирания да изместват утвърдените hot записи
  • AdaptiveAdmission може да възстанови чисто recency admission за всеки слой, а frequency admission-ите, отхвърлянията и aging циклите се излагат през cache статистиката

Version 2.529.0

Added

  • THPDFCacheAdmissionPolicy и SetCacheAdmissionPolicy предоставят независими граници по брой записи, общи байтове и на запис за raw компресирани диапазони, декодирани изображения, компилирани display lists и рендерирани raster страници
  • GetCacheAdmissionStatistics докладва occupancy, hits, misses, admissions, rejections и evictions за всеки слой, докато прекалено големите display lists и raster страници заобикалят задържането, без да провалят текущата операция

Version 2.528.0

Changed

  • Заредените документи вече intern-ват повтарящи се PDF имена, content-stream оператори и immutable низове до 64 байта в пул с обхват на документа, намалявайки дублираното string съхранение през парснатите обекти и content операциите
  • GetDocumentStringInternStatistics докладва заявки по категория, hits, misses, bypass-и, задържано съхранение и преизползвани байтове, докато твърдите тавани от 65,536 записа и 4 MiB държат враждебните документи ограничени

Version 2.527.0

Changed

  • Зареждането на PDF вече ползва задържан block arena за краткотрайни parser токени и буфери, намалявайки трафика към алокатора, докато постоянните документни обекти остават независимо притежавани
  • Ключовете на речниците се парсват директно, без конструиране на временни name обекти, а GetLastParserArenaStatistics докладва задържано съхранение, peak употреба, преизползване на алокации, token трафик и елиминиране на временни обекти

Version 2.526.0

Changed

  • HPDFTransferStream вече записва memory, mapped-file, lazy-file, adaptive-cache и range-cache source-и през storage-aware пътеки, без да алокира междинен буфер за целия поток
  • Сериализацията на нешифровани PDF потоци, декодираният изход без филтри, raw export на заредени изображения, материализацията на lazy потоци и разливането на временни потоци ползват директен transfer автоматично, с броячи в байтове за mapped-file и range-cache, налични за диагностика

Version 2.525.0

Changed

  • Prefetch-ът на random-access парсера вече расте адаптивно през 1, 2, 4 и 8 блока при устойчиво четене напред, остава ограничен от конфигурирания капацитет на кеша и се подтиска веднага след random или обратни seek-ове
  • AdaptiveReadAheadEnabled, MaxReadAheadBlocks и SequentialReadToleranceBytes излагат контрол на политиката, а range-cache статистиката докладва класификация на достъпа и текущи или peak read-ahead прозорци

Version 2.524.0

Added

  • THPDFCoalescingRandomAccessSource обединява съседни parser четения в конфигурируеми кеширани диапазони, налага ограничен least-recently-used байтов бюджет и излага статистика за source, cache и prefetch
  • LoadFromRandomAccessSource вече прилага range coalescing и асинхронен prefetch на следващия диапазон автоматично, докато foreground seek-овете отменят несвързана работа, а ReadAtCancellable позволява на remote транспортите да прекъсват in-flight заявки кооперативно

Version 2.523.0

Changed

  • Type 3 радиалните shadings вече се рендерират чрез error-bounded адаптивна Gouraud теселация вместо фиксирани плътно оцветени дискове с 48 страни
  • Границите на кръгове при High-DPI и трансформации ползват толеранс по хордата от 0.35 device пиксела, нелинейните цветови функции се делят адаптивно, а неиздължените вътрешности на start кръга остават неоцветени

Version 2.522.0

Fixed

  • Зареждането с парола при V=4 вече разрешава независимите StrF и StmF default-и заедно с директните или array-form Crypt override-и на ниво поток
  • Stream crypt параметрите могат да избират Identity, V2 или AESV2, а изразходваните filter записи се премахват, преди останалият stream decoder pipeline да се изпълни

Version 2.521.0

Added

  • Заредените DCTDecode, JPXDecode и JBIG2Decode изображения вече могат да се декодират в crash-isolated Win32 или Win64 worker процеси през ограничена споделена памет
  • CodecIsolationMode и контролите за worker път, timeout и лимит на паметта поддържат съвместимо автоматично разполагане или fail-closed обработка за недоверени документи, със структурирана телеметрия за статус, процес, exit code и време

Version 2.520.0

Added

  • THPDFDeterministicReplayLog записва ограничени подредени решения за cancellation checkpoint-и, наличност на random-access диапазони и boolean или integer callback резултати, със стабилен JSON export и import
  • Стриктният replay валидира идентичност, аргументи и последователност на събитията, докато възпроизвежда решенията за progressive зареждане, филтриране на анотации и отмяна на tile callbacks независимо от текущото външно състояние

Version 2.519.0

Added

  • BuildLoadedObjectDependencyGraph вече излага ограничени indirect-object възли и reference-slot ребра с точни object идентичности, пътеки, състояние на разрешаване, lifecycle състояние и Catalog достижимость
  • Object възлите докладват преносими оценки за shallow памет и dominator-базирани задържани байтове, така че споделените ресурси се приписват на най-близкия обект, който ги задържа изключително

Version 2.518.0

Added

  • Ограниченото cross-reference възстановяване вече излага структуриран поток от събития, обхващащ приемане и отхвърляне на кандидати, избрани xref секции, възстановени offset-и, провалени лимити и финални изходи
  • Всяко recovery събитие носи inclusive-exclusive source байтов диапазон, indirect-object идентичност, когато е приложимо, изрично ниво на увереност и ограничена диагностичка на английски, с конфигурируемо задържане и отчитане на изпуснати събития

Version 2.517.0

Added

  • Унифицираната operation телеметрия вече докладва CPU време на текущия thread, peak допълнителни живи Delphi алокации, семплиран process working set, process I/O байтови делти, cache misses и разширение на декодирани потоци редом до съществуващите метрики за изминало време и памет на компоненти
  • Decode отчетността вече разграничава кодиран вход, агрегатна filter работа и финални изходни байтове, с разширение, публикувано в промил, където 1000 означава 1x

Version 2.516.0

Added

  • Regression случаите с повредени PDF вече могат непрекъснато да се превалидират и минимизират отново под конфигурируеми лимити за опити и байтове, като най-малкият signature-еквивалентен вход се задържа чрез process-safe заключване и атомарна подмяна
  • Corpus PDF-ите ползват стабилни case ID-та по failure signature и детерминистични hotpdf.corpus.case.v1 sidecar-и, съдържащи content SHA-256 и броя байтове

Version 2.515.0

Added

  • Cross-engine regression пробите вече обхващат parse, render, text и save домейни с ограничени вградени HotPDF SHA-256 fingerprints, проверки за стабилност при повторни изпълнения, изолирани exception резултати, именувани engine-и, входни лимити и детерминистични versioned JSON отчети

Version 2.514.0

Added

  • Versioned flat C ABI вече зарежда PDF-и през 64-битови random-access callbacks директно в parser буфери и записва през retryable sequential write callbacks, без Delphi-управлявани типове да пресичат границата
  • HotPDFABI.dll доставя стабилни cdecl exports, opaque валидирани handle-и, фиксирани status кодове, изрични дължини в байтове, отмяна, прогрес, диагностика, Win32 и Win64 build автоматизация, import библиотеки и layout-проверения hotpdf_abi.h header

Version 2.513.0

Added

  • Валидаторите за PDF/UA-2, PDF/A-4 и PDF/X-6 вече могат да връщат един споделен machine-readable finding модел с profile, severity, стабилен rule ID, clause от стандарта, object път, object номер и zero-based позиция на страница
  • Подробните PDF/UA-2 repair findings разграничават приложени, неразрешени, върнати назад и провалени действия с броячи за repairs, докато ComplianceFindingsToJSON излъчва детерминистичен versioned JSON за CI и audit pipelines

Version 2.512.0

Added

  • Transactional repair за PDF/UA-2 вече възстановява липсващия alternate текст от съществуващ семантичен текст или tagged page съдържание, издига валидния език на документа за наследяване, затваря пропуски в heading нивата и съгласува Artifact structure ролите с marked-content таговете за producer и заредени документи
  • Repair опциите излагат изрични default-и и ограничени fallback политики, докато repair отчетът разграничава успешните alternate-text, езикови, heading и artifact промени от неразрешената семантика, изискваща преглед от автора

Version 2.511.0

Changed

  • Рекомпресията на заредени изображения и effective-DPI downsampling-ът вече конвертират цветовете на поддържаните ICCBased, CalGray и CalRGB входове към изричен калибриран RGB, докато неподдържаните калибрирани, Separation и DeviceN изображения остават непроменени и докладват решението си за запазване
  • Transparency flattening-ът вече излъчва калибриран RGB, рекурсивно открива spot оцветители през страницата и вложените ресурси и запазва страниците със Separation или DeviceN paint като vector съдържание със структурирана status диагностика
  • CalRGB рендерингът вече спазва реда на елементите на PDF матрицата и прилага правилната обратна XYZ-to-sRGB трансформация за vector и raster цветове

Version 2.510.0

Changed

  • ICC цветовите трансформации вече се преизползват през thread-safe ограничен LRU кеш от 64 MiB, ключован по пълното съдържание на source, proof и output профилите, ефективния rendering intent и настройката за black-point compensation, избягвайки повторен profile parsing и конструиране на трансформации през vector, image, page и паралелни рендеринг пътеки

Version 2.509.0

Changed

  • ICC рендерингът на заредени страници вече прилага и четирите PDF rendering intents и истинска black-point compensation през source, proof, output и sRGB трансформациите както за vector цветове, така и за image семпли, като platform цветовата услуга се запазва като compatibility fallback

Version 2.508.0

Changed

  • LZW енкодерът (TPDFLZWCompressor) получи Compress(Input, Parms) overload, който прилага forward PNG/TIFF predictor преди компресията, което го прави симетричен на Decompress(Input, Parms) пътя на декодера, така че LZW+Predictor потоци могат да се създават и в двете посоки
  • Content-stream интерпретаторът вече следи graphics оператора cm и snapshot-ва активния CTM върху всеки излъчен glyph (THPDFGlyphRecord.CTMA..CTMF), така че повикващите могат да пресметнат истинския user-space произход чрез CTM * Tm, когато трансформационни матрици предхождат текста. Glyph X/Y остават в text space (identity CTM е честият случай), така че съществуващото поведение не се променя
  • ReplaceLoadedPageText / ReplaceLoadedDocumentText вече обработват съвпадения, обхващащи два или повече последователни simple-string операнда (например (Hel) Tj (lo) Tj): start операндът получава пълния заместващ текст (кодиран през своя шрифт, запазвайки всяка несъвпаднала префиксна част), а всеки следващ операнд в обхвата на съвпадението се занулява. Дотогава такива cross-operand съвпадения се пропускаха мълчаливо като документирано ограничение; цялото single-operand replace поведение е непроменено

Version 2.507.0

Added

  • Добавена е селективна stream encryption: новият флаг THPDFStreamObject.SkipEncryption, спазван от encryption gateway-а на writer-а, държи отделен поток в plaintext дори когато шифроването в целия документ е активно (ISO 32000-1 7.6.4 selective crypt filter /Identity). Това е основата за смесени encrypted/plaintext потоци в един документ

Version 2.506.0

Added

  • Добавено е legacy RC2 PFX декриптиране: DecryptPKCS12EncryptedBytes вече диспетчиризира pbeWithSHA1And40BitRC2-CBC (OID 1.2.840.113549.1.12.1.6) и pbeWithSHA1And128BitRC2-CBC (1.2.840.113549.1.12.1.5), клонирайки 3DES CryptoAPI пътя с параметъра KP_EFFECTIVE_KEYLEN, зададен на 40 / 128, така че импортираният RC2 key material се чете с правилната ефективна сила вместо с пълната дължина
  • Добавено е burn-in redaction: ApplyLoadedRedactions минава през всяка /Subtype /Redact анотация, занулява текстовите string операнди под нея, чиито glyph-и попадат в /Rect на анотацията (байтовете стават интервали, така че текстът наистина изчезва от извличането, а не е просто покрит), прерисува непрозрачен правоъгълник върху всеки регион и връща броя занулявани операнди. Поддържа аргумент за диапазон от страници ('' = всички страници). Добавя и AddLoadedRedactAnnotation за създаване на /Redact анотации на заредена страница. Зануляването на TJ-array елементи и crop-ването на vector/image са извън обхвата за този кръг (single-string Tj / ' / " операнди се зануляват; засегнатите TJ низове се прескачат с fill-rectangle fallback)

Version 2.505.0

Changed

  • Текстовият интерпретатор вече извежда хоризонталното отместване на всеки glyph от истинската /Widths таблица на шрифта (PDF 1.7 9.6.3) чрез новия метод IHPDFFontResolver.Advance, вместо предишното плоско приближение 0.5 * fontSize. HPDFBuildFontDecoder чете /FirstChar, /LastChar и числовия масив /Widths за прости (non-CID) шрифтове; когато няма налична ширина, resolver-ът връща 0 и интерпретаторът запазва half-em fallback-а, така че поведението за шрифтове без ширини е непроменено. Това подобрява точността на X позициониране на glyph-ите за извличане на текст, откриване на колони и анализ на реда на четене

Version 2.504.0

Added

  • Добавен е SetLoadedAcroFormCalculationOrder за преизграждане на AcroForm /CO масива с ред на изчисленията в подредба от имена на полета, подадена от повикващия (полетата, които не се разрешават, се прескачат), така че веригата от изчисления може да се създаде изрично, а не само да се надгражда
  • Добавен е RegisterNChannelColorSpace — помощник за цветови пространства, вариант на DeviceN, който излъчва маркера /NChannel (PDF/X-6 / PDF 2.0) за цветови пространства, които може да включват process мастила сред оцветителите си
  • Добавен е SetStructureElementClass за запис на масива с имена на класове /C на structure елемента (PDF 1.7 14.9.2.2), сочещ към споделени attribute класове
  • Добавен е AddLoadedPagePieceInfo за запис на page-piece речник (PDF 1.7 14.5) под /PieceInfo/<Application> с /LastModified дата-печат и key/value двойки, подадени от повикващия

Version 2.503.0

Added

  • Търсенето на текст без значение на регистъра вече сгъва Unicode, а не само ASCII: споделеният glyph matcher (HPDFMatchGlyphs) заменя A-Z намаляването до малки букви с TCharacter.ToLower (Unicode Simple_Lowercase_Mapping), така че ударените латински (À-ý), гръцките (Α-Ω) и кирилските (А-Я) главни букви съвпадат с малкия си вариант в SearchLoadedPageText / SearchLoadedDocumentText. Build-овете преди XE2 запазват ASCII fallback-а
  • Добавен е inline-image callback към content-device абстракцията: IHPDFContentDevice.ProcessInlineImage се стреля за всеки BI/ID/EI блок, когато device-ът декларира cdcNeedImages, носейки нормализираното резюме за ширина / височина / цветово пространство / image mask, което flat tokenizer-ът вече е уловил на BI токена. Device-ите за извличане на текст, изброяване на пътеки и одит вече могат да отчитат inline изображенията, вместо да ги пропускат мълчаливо; page renderer-ът насочва callback-а към no-op, защото рисува inline изображенията през собствения си производствен цикъл

Fixed

  • Поправено е SaveLoadedDocument мълчаливо да изпуска PDF/A OutputIntent, добавен към зареден документ: AddPDFAOutputIntent пълнеше in-memory списъка с intent-и, но пътят за запис на зареден документ никога не го закачаше към каталога, така че изходът проваляше veraPDF заради липсващи /OutputIntents. Нова стъпка EnsureLoadedPDFAOutputIntents вече закача FOutputIntents върху /OutputIntents масива на заредения каталог и го маркира dirty преди записа, принуждавайки повторна сериализация с наличен intent

Version 2.502.1

Fixed

  • Поправено е изгладените стойности на AcroForm полета да се рендерираха като дебел stroke контур вместо като нормален плътен текст: EnsureLoadedFieldAppearanceStream вече излъчва изричен 0 Tr (fill) веднага след BT във всеки генериран widget appearance stream, така че text-rendering режимът е детерминистичен независимо от заобикалящото състояние на съдържанието на страницата. Преди това изтекъл 1 Tr (stroke) по graphics state се наследяваше от Form XObject-а, консумиран чрез Do, и рисуваше стойността на полето с червен 2-точков контур, изглеждащ bold и с изкривен цвят
  • Премахнат е legacy блок за reset на default състоянието в края на THPDFPage.CloseCanvas, който записваше 1 0 0 RG/rg + 1 Tr + 2 w директно в content stream на страницата след GStateRestore (т.е. извън всяка q/Q двойка) без path оператор, който да ги консумира. Този остатъчен graphics state се изтичаше във всичко, рисувано след това на страници, произведени при authoring, и беше източникът по веригата на симптома с дебелия контур по-горе; затварянето на canvas вече оставя content stream чист, защото q/Q около metafile replay-я вече изолира replay състоянието

Version 2.502.0

Added

  • Добавен е LZW енкодер (TPDFLZWCompressor), симетричен на съществуващия TPDFLZWDecompressor, така че потоци могат да се записват с LZW и PDF filter наборът вече е пълен в двете посоки; енкодерът отразява поставянето на Clear / EOI при декодера, растежа на кодове с променлива широчина и конвенцията EarlyChange, и преминава през декодера назад-напред, включително през 12-битовото насищане при пълен речник
  • Добавена е пълна поддръжка на CSS / X11 named-color в HTML парсера за цвят на текст, разширявайки разпознаваната палитра от legacy 16-те VGA цвята до пълния набор на CSS Color Module Level 4 (от aliceblue до yellowgreen, включително alias-ите gray/grey, aqua/cyan и fuchsia/magenta) чрез таблица с binary search
  • Добавено е създаване на Optional Content Membership Dictionary с AddLoadedOptionalContentMembership, изграждащо /Type /OCMD обект, чийто /OCGs списък и /P политика (AnyOn / AllOn / AnyOff / AllOff) захранват съществуващия evaluator EvaluateLoadedOCVisibility, така че сложни изрази за видимост на слоеве вече могат да се създават, а не само да се консумират
  • Добавена е entry точка за rich-text FreeText анотация AddLoadedFreeTextAnnotationRichText, която закача /RC XML фрагмента с rich content и опционалния /DS default стил към FreeText анотация (PDF 1.5 12.5.6.16), допълвайки field-level пътя /RV
  • Добавен е writer за catalog /RequirementsAddLoadedDocumentRequirement (ISO 32000-1 7.7.4), който добавя requirement речници с /S плюс key/value двойки от повикващия към /Requirements масива на каталога
  • Добавено е разпознаване на Type 16 halftone (threshold mask) в page renderer-а: /Width на маската управлява еквивалентна screening честота, така че страницата запазва halftone ритъм вместо операторът да се изпуска мълчаливо, с диагностична бележка за приближението

Changed

  • Разширен е ASN.1 BER/DER декодерът да приема high-tag-number long form (tag >= 31), BER indefinite-length формата за constructed възли (терминирани от маркера 00 00 End-of-Contents, с recursion-safe сканиране) и long-form дължини до 8-байтовия таван на X.690, така че third-party CMS пакети, ползващи тези форми, се парсват вместо да хвърлят; новите record полета IsIndefinite и ExtendedTagNumber записват коя форма е ползвал парснат възел
  • Изострени са fallback диагностиките на renderer-а: Type 1 function-based shading вече докладва конкретно съобщение вместо генеричното "unsupported shading type", а неподдържаните halftone типове назовават реалния номер на типа в диагностиката

Version 2.501.0

Added

  • Добавени са PDF 2.0 structure destinations и page-content връзки, генерирани от marked-content данни, включващи constant-time обратен lookup FindStructureElementForMCID, който разрешава двойката (page, MCID) обратно към притежаващия я StructElem през ParentTree на документа, локален AddStructureDestinationLink, който излъчва GoTo действие, носещо както задължителния page-coordinate /D fallback, така и PDF 2.0 масива /SD, назоваващ целевия StructElem по indirect reference, и remote AddGoToRStructureDestinationLink, чийто първи елемент на /SD е byte-string /ID на целевия елемент във външния файл, така че PDF 2.0 viewer-и скачат към structure съдържание, докато legacy viewer-ите се връщат към именуваната страница

Version 2.500.0

Added

  • Добавени са ограничена PDF/UA-2 валидация и transactional repair за пълни PDF 2.0 вериги от номерация и продължение на списъци, регулярни таблицни решетки и row групи, table-локални header асоциации и цикли, точни Ruby и Warichu child последователности, pronunciation подсказки за всеки елемент и подредени вградени PLS pronunciation речници, с нови authoring помощници, стабилни диагностики, semantic repair броячи и rollback за двусмислени structure дефекти

Version 2.499.0

Added

  • Добавени са генериране на PDF/X-6, PDF/X-6p и PDF/X-6n и ограничена валидация за PDF 2.0 документи, включително embedded, external, Catalog-level и page-level output intents; checksums на външни профили, ICC версии, подписи на цветови пространства и таблици с N оцветители; валидация на наследени page box-ове; ограничения за exchange-action, annotation-appearance, шрифт, form, graphics-state и ресурси; стабилни clause-aware диагностики и fail-closed валидация на генерирането

Version 2.498.0

Added

  • Добавени са ограничена, немутираща PDF/UA-2 валидация и transactional repair на namespace-и и structure атрибути за producer и заредени документи, включително канонична namespace регистрация, почистване на дублирани и невалидни namespace-и, откриване на role-map конфликти, repair на standard structure namespace, изрични custom attribute namespace-и, нормализация на ревизии, структурирани отчети, независими лимити за обекти и мутации и автоматичен rollback, когато валидацията все пак се проваля

Version 2.497.0

Added

  • Добавени са ограничено генериране на PDF/A-4, PDF/A-4e и PDF/A-4f и валидация на заредени документи с profile-специфични правила за анотации, действия, вградени файлове, metadata, output intent, шрифт, form и optional content; структурирани диагностики със стабилни кодове, clauses и object или page местоположения; fail-closed валидация на EndDoc; пропускане на trailer Info; задължително EmbeddedFiles name дърво за PDF/A-4f и пълни attachment графики

Version 2.496.0

Added

  • Разширен е ограниченият AcroForm JavaScript evaluator с типизирани boolean, number, string, null, undefined и array стойности; short-circuit логически, сравнителни, равностни, унарни и условни изрази; детерминистични date функции; string и array методи; запазена съвместимост на числови полета и изрични лимити за скрипт, statement, дълбочина, операция, аргумент, колекция, string и памет за стойности

Version 2.495.0

Added

  • Добавени са нативно CFF2 variable-font instancing и glyph subsetting с fvar и avar 1.0/2.0 разрешаване на координати, VariationStore blend оценка, рекурсивно изглаждане на subroutine-и, запазени multi-FD речници и hint данни, HVAR/VVAR/MVAR metric baking, ограничен fail-closed parsing и автоматична интеграция с RegisterUnicodeTTF

Version 2.494.0

Added

  • Добавени са вложени copy-on-write транзакции върху object графики с first-write indirect-root snapshot-и, in-place rollback, възстановяване на добавени обекти и object номера, ограничен temporary-file spill за големи потоци, автоматично следене на container мутации, изрична подготовка за raw запис и live статистика за паметта

Version 2.493.0

Added

  • Добавено е ограничено content-stream AST, запазващо токените, с all-byte lexemes, свързани operation и container възли, непресичащи се edit overlay-и, byte-exact no-op обръщания назад-напред, streamed сериализация и беззагубна целенасочена подмяна на текст

Version 2.492.0

Added

  • Добавено е ограничено windowed memory mapping за зареждане на големи локални PDF-и със споделен lazy-stream достъп, конфигурируеми threshold и LRU window геометрия, автоматичен stream fallback, cross-window четения, споделяне с атомарна подмяна и mapping диагностика

Version 2.491.0

Security

  • Паролите, извлечените file и object ключове, кешираните AES разписания, PKCS#12 plaintext на частните ключове, authenticated-decryption scratch и plaintext буферите за streaming от директни файлове вече се презаписват изрично на всеки път на успех и изключение

Version 2.490.0

Changed

  • Променено е отложеното Standard-security декриптиране да улавя ограничения raw encryption обект и trailer ID през авторитетния xref offset по време на зареждане, запазвайки точните бинарни key записи и елиминирайки по-късни четения на целия source за валидни документи

Version 2.489.0

Changed

  • Променено е зареждането с парола да възстановява RC4 и AES file ключовете от ограничени trailer, xref, document-ID и авторитетни encryption-dictionary диапазони, избягвайки заявки към целия source за валидни random-access документи, докато запазва compatibility fallback-а

Version 2.488.0

Added

  • Добавен е рендеринг на заредени страници за Shading Types 4 до 7 с byte-aligned mesh декодиране, преизползване на continuation ръбове, function-aware Gouraud цветове, ограничена адаптивна Coons и tensor-product теселация, batched триъгълни запълвания, clipping, фонове и бюджети за повреден вход

Version 2.487.0

Changed

  • Променени са PFX, external-signer и signature-provider работните процеси да копират с ограничени буфери от 256 KB, да stream-хешират кърпените байтови диапазони и да seek-патчат фиксирани по ширина /ByteRange и /Contents полета, включително подписване в същия поток без задържане на втори пълен PDF

Version 2.486.0

Added

  • Добавено е нативно standard-Huffman JBIG2 декодиране за SDHUFF symbol речници и SBHUFF текстови региони, включително всичките 15 таблици от Annex B, raw или MMR колективни bitmap-и, per-region symbol-ID таблици и ограничени защити от повреден вход

Version 2.485.0

Added

  • Добавени са RC4-128 и AES-128 шифрован запис на object streams и презареждане с парола с ограничено pre-parse възстановяване на ключове, правилно извеждане на ключа по object номер, lazy обработка на компресирани членове и без повторно четене на целия файл след успешно възстановяване на ключа

Version 2.484.0

Added

  • Добавени са transactional form-edit сесии и ограничени event действия, пълен field, annotation и status FDF обмен, детерминистични XFA specialised-widget fallbacks и разширено странициране, streaming валидация на вградени файлове, разширени Portfolio изгледи, сортиране, папки, навигация и schema редактиране, петмерни JSON operation бюджети, callback-базиран integration ABI и corpus минимизация, запазваща провалите, с differential regression проби

Version 2.483.0

Added

  • Добавени са стабилен пълен object-graph JSON export и валидиран patching, object-stream инспекция без материализация, ограничена linearisation валидация, канонични document идентификатори, извеждани от съдържанието, за възпроизводим изход, изрични политики за недостижими обекти, ограничен collated multi-source page assembly, независимо циклиращи overlay и underlay композиции, geometry-пълно изглаждане на ротация на страници и поддръжка за четене, запис и инвалидиране на page thumbnails

Version 2.482.0

Added

  • Добавени са content-aware externalisation на inline изображения, понаследено и appearance-safe почистване на ресурси, coalescing на content streams, канонична дедупликация на Form XObjects и вградени шрифтове, policy-контролирана JPEG и JPEG 2000 рекомпресия, exact-match споделяне на JBIG2 globals, colour-managed effective-DPI downsampling с soft-mask координация и адаптивен locality-aware object-stream packing

Version 2.481.0

Added

  • Добавени са преизползваеми page display lists и spatial индекси, ограничен tile и band рендеринг, детерминистичен паралелен page рендеринг, transparency flattening, диагностика за мастила и trapping, process и spot separation плаки, изпълними halftone и transfer функции и intent-aware source, proof и output ICC pipelines с black-point compensation

Version 2.480.0

Added

  • Добавен е standards-aware текстов и документен layout с Unicode line breaking и сричкопренасяне, оптимална композиция на абзаци, балансирани колони, странициране на бележки под и над линия, оразмеряване и странициране на таблици, изключване на float-ове, структурирани вложени списъци, keep групи и ограничен caching на shaped runs

Version 2.479.0

Added

  • Добавени са namespace-aware PDF/UA-2 structure авторинг и ограничена еднопроходна валидация за йерархия, атрибути, притежание на анотации, свързани файлове, заглавия, списъци, таблици, формули и MathML

Version 2.478.0

Added

  • Добавена е standards-based offline trust валидация с delta и indirect CRL-и, стриктна OCSP политика, X.509 ограничения за имена и certificate политики, algorithm политика по време на оценяване, детерминистична multi-signer и вложена countersignature проверка и структурирани JSON validation отчети

Version 2.477.0

Added

  • Добавено е AES-256 public-key шифроване с изрични RSA-OAEP hash политики, ECDH и X25519 или X448 key agreement, CMS countersignatures и incremental PAdES-LTA подновяване на timestamps, запазващо всяка по-ранна ревизия

Version 2.476.0

Added

  • Добавени са bounded-memory AESV4 шифроване на директни файлове и authenticated декриптиране плюс ISO/TS 32004:2024 standalone PDF MAC производство, проверка, диагностика, атомарен изход и preflight валидация

Version 2.475.0

Added

  • Добавени са ISO/TS 32003:2023 AESV4 password encryption и authenticated зареждане с AES-256-GCM, уникални 12-байтови IV-и, 16-байтови authentication tags, PDF 2.0 developer extensions, покритие на вложени низове, object-stream поддръжка и отхвърляне на подправяне

Version 2.474.1

Fixed

  • CMS подписването вече не се проваля при компилация, когато anonymous-method signer callback улавя record-а със sign опциите на Delphi Win32
  • Подписването със system сертификати вече не се проваля при компилация, когато digest callback-ът улавя record-а със sign опциите на Delphi Win32
  • E-Invoice демото вече се компилира, след като enumeration-ът с validation проблеми беше разширен с допълнителни PDF/A-3 attachment и XMP проверки

Version 2.474.0

Added

  • JSON processor за job конфигурация, поддържащ merge, split, optimise, encrypt и validate операции със структурирани резултати за всяка операция
  • C ABI с opaque handle-и за високостойностни документни операции, включително create, load, брой страници, save и изпълнение на jobs, за вграждане от други езици
  • Сравнение на документи с режими page-count, page-text, object-count и rendered-image, връщащо структуриран JSON отчет за разликите

Version 2.473.0

Added

  • Преизползваемите validation политики вече покриват WTPDF reuse, accessibility и валидирано приемане на декларации, излагат declaration claim metadata и source-aware грешки, изпълняват подредени партиди през ограничени worker и queue лимити и предоставят независими inspect, add-missing и synchronize режими за repair на XMP metadata

Version 2.472.0

Added

  • CMS верификацията вече поддържа Ed25519 и Ed448 чрез динамично избиран platform provider плюс ML-DSA-44, ML-DSA-65 и ML-DSA-87 зад изрично PDF 2.0 developer extension, а общ ограничен provider contract позволява callback, remote и PKCS#11 RSA подписване с retry, отмяна, key идентификатори и специфични за алгоритъма параметри

Version 2.471.0

Added

  • Рендерингът на заредени страници вече цели обща device абстракция за собствени bitmap-и, външни device контексти като принтери и enhanced metafiles, докато опционалният CMYK overprint proofing интерпретира /OP, /op и /OPM 1, за да визуализира комбинирани process мастила редом до съществуващия transparency-group knockout рендеринг

Version 2.470.0

Added

  • Variable OpenType шрифтовете вече излагат axis и named-instance metadata с валидиран per-axis избор и интеграция със static-instance provider, докато COLR и CPAL слоеве, SVG glyph документи и CBDT bitmap strikes могат да се инспектират и рендерират през нативни или подадени от повикващия rasterisation пътеки

Version 2.469.0

Added

  • TrueType и OpenType font subsetting вече може да преизползва валидирани content-addressed резултати от постоянен disk кеш с атомарни записи, възстановяване при повреди, access-based eviction по байтов бюджет, компактно запазване на CID mapping и наблюдаема статистика за hit, miss, write, rejection и eviction

Version 2.468.0

Added

  • Преизползваемите layout елементи вече излагат measurement без странични ефекти, собствени placed и overflow фрагменти за paragraph, row, container и custom странициране, плюс декларативни background, header, footer и foreground слоеве, прилагани в стабилна page-composition подредба

Version 2.467.0

Added

  • Linearized random-access source-ите вече докладват ограничена наличност на first page и main xref, заредените потоци могат да ползват детерминистична Flate рекомпресия с четири стратегии и висок коефициент, а независимите image потоци могат да се оптимизират конкурентно с caller-контролирани worker-и и commits в source ред

Version 2.466.0

Added

  • Заредените документи вече излагат clean, dirty, released и must-write object състояния, безопасно post-save освобождаване на object-stream кеша, xref free-list и generation валидация с ограничени детайли за засенчващи дефиниции, детерминистичен dictionary изход и запазващи съдържанието диагностични записвания в QDF стил

Version 2.465.0

Added

  • ASCII85 и ASCIIHex филтрите вече излагат ограничени stream декодери със стриктни end маркери, odd-nibble диагностика и запазен trailing вход; заредените документи могат да отварят zero-copy read-only source изрезки и да докладват per-filter pipeline статистика през preflight и stream оптимизация

Version 2.464.0

Added

  • Заредените форми могат безопасно да оценяват ограничени calculation и validation скриптове без активен JavaScript engine; RichMedia анотациите излагат named-asset metadata, byte извличане и целенасочена sanitisation; XFA flattening поддържа indexed, wildcard, class и descendant SOM binding-и плюс ограничени числови FormCalc функции; а XFDF annotation обръщанията назад-напред покриват всеки поддържан annotation subtype през едно симетрично mapping

Version 2.463.0

Added

  • RSA-PSS CMS подписването вече поддържа конфигурируем salt и internal, external или Windows CNG signer-и; PDF/X изходът валидира production условия, ICC компоненти и overprint контроли; заредените tagged страници излагат геометрична reading-order диагностика; а PDF Portfolio-ите могат да създават и инспектират collection schemas плюс per-file metadata

Version 2.462.0

Added

  • Заредените AcroForms вече оценяват /CO ред на изчисленията, регенерират multiline, quadded, auto-sized и comb appearances, разрешават normal, rollover и down annotation appearance състояния и изглаждат избраните полета само в страниците, които ги притежават; signature-aware изглаждането отказва нарушения на DocMDP или FieldMDP политики

Version 2.461.0

Added

  • Рендерингът на заредени страници вече прилага isolated и knockout transparency групи, alpha и luminosity soft masks с фонови цветове и transfer функции, пълни Type 3 CharProcs в текущия им resource scope, Form матрици с пълно възстановяване на graphics state и visible-region декодиране за изрязани изображения, включително нативно JPEG 2000 region разширяване; DecodeLoadedImageRegion излага точно правоъгълно raster декодиране на повикващите

Version 2.460.0

Added

  • Рендерингът на заредени страници вече кешира отделни optional-content и ICC цветово-intent състояния, предоставя ignore, bounded-report и strict fallback политики за прескачани оператори или обекти и публикува унифицирана телеметрия за изминало време, peak memory, декодирани байтове, cache hits, cache misses, брой обекти, успех и отмяна за зареждане, рендеринг, progressive slices и stream оптимизация

Version 2.459.0

Added

  • BeginLoadedPageProgressiveRender добавя подновяем page рендеринг с бюджети за изминало време и content оператори, частичен bitmap достъп, progress callbacks и изрични paused, completed и cancelled състояния; caller-owned THPDFCancellationToken инстанции вече кооперативно отменят зареждане на документи, синхронен и progressive рендеринг, stream оптимизация, preflight валидация, PFX подписване и Windows certificate-store подписване

Version 2.458.0

Added

  • ImmediateFlushLayout премества завършените потоци от съдържание на страници в съхранение на файлова основа за ограничена генерация на отчети; подредбата на абзаци вече поддържа ограничения keep-with-next, orphan и widow, първосилна bidi посока с явни отмяни, ограничена координатна диагностика, наследени размери на страница, семантични помощници /P и типизирани артефакти на страниране за колонтитули, долни колонтитули, водни знаци и номера на страници

Version 2.457.0

Added

  • SetFontFallbackChain и TextOutWithFallback добавят подреден, съобразен със скрипт избор на шрифт с проверки за Unicode скаларно покритие и постоянна диагностика на неразрешени знаци; вертикалният текст вече излъчва цели поредици Identity-V с метрики /DW2 и /W2, производни от OpenType таблиците vhea, vmtx и VORG, когато са налични

Version 2.456.0

Added

  • HPDFEncodePredictor добавя строго TIFF и фиксирано или адаптивно PNG предикторно кодиране за опаковани, 8-битови и 16-битови растерни редове; ExtractLoadedImageToStream избягва масиви от байтове с пълен размер за нативни или общо декодирани полезни товари на изображения; OptimizeLoadedStreams селективно рекомпресира поддържани филтърни семейства през буфери за изливане от памет към диск и заменя само потоци, които отговарят на положителен праг на спестяване

Version 2.455.0

Added

  • DecodeLoadedStreamToStream вече композира заредените PDF филтри в ограничен конвейер, чийто краен етап пише директно в поток на извикващия; DocumentDecodeBudgetBytes добавя таванна стойност по подразбиране от 1 GiB между независими вериги, докато защитите за брой филтри, дълбочина на влагане, циклични препратки и рекурсивни потоци разкриват структурирана диагностика на конвейера

Version 2.454.0

Added

  • Големите заредени потоци вече остават върху диапазони на изходния файл до промяна и изливат прекалено големи изменения във властвани временни файлове чрез LoadedStreamMemoryThreshold; компресираните членове на обектни потоци се индексират и материализират по номер на обект при първо използване; LoadFromRandomAccessSource добавя интеграция с HTTP диапазони и потребителско съхранение, с диагностика на потоци и кеш на обекти

Version 2.453.0

Changed

  • Инкременталните записи вече запазват постоянния ID на прикачен файл във всяка ревизия, завъртат само ID-а на модификация, не излъчват добавена ревизия, когато зареденият обектен граф е непроменен, и разкриват решения за сливане на хибридни препратки чрез GetLoadedXRefMergeInfo с явни броячи за предимство на xref потоци, припокриване на таблици и най-нова ревизия

Version 2.452.0

Added

  • Добавени са нативен изход PDF 2.0 плюс създаване на PDF/A-4, PDF/A-4e, PDF/A-4f и PDF/UA-2, с XMP идентификация, съобразена с ревизии, структурни роли за PDF 2.0, регистрация на пространства от имена чрез RegisterStructureNamespace и AddStructureElementNS, строга структурна валидация на PDF/UA-2 и неутрални към профила свързани файлове чрез AddPDFAssociatedFile

Version 2.451.0

Added

  • DetectFacturXInvoice вече разкрива декодирания MIME тип на основния прикачен файл и свързания URI на XMP пространство от имена, докато ValidateFacturXInvoice кръстосано проверява точния FileSpec, споделен от Catalog /AF и дървото от имена EmbeddedFiles, имената /F и /UF, XML MIME типа, XMP DocumentType и специфичното за профила пространство от имена Factur-X или ZUGFeRD чрез четири специализирани флага за проблеми

Version 2.450.0

Added

  • Резултатите от Preflight JSON, HTML и veraPDF вече носят стабилни именарени стойности ruleId плюс машинночетими локации с логичен обхват, път, PDF ключ и точен номер на обект, индекс на страница или байтово отместване, когато са налични; JSON отчетите също излъчват документираните ISO съпоставяния spec и остават валидни, когато масивите съдържат множество констатации

Version 2.449.0

Added

  • SanitiseLoadedDocument вече прилага политики само за JavaScript, за активно съдържание или за строги недоверени документи към зареден PDF, отчита премахнати действия и полезни товари, проваля се затворено за неизвестни типове действия, премахва недостижими обекти чрез ограничено безопасно спрямо цикли почти линейно обхождане, уплътнява номерата на живите обекти и атомарно заменя източника при запис на място

Version 2.448.0

Added

  • Рендиращият модул за заредени страници вече изпълнява цветни и безцветни повтарящи се шарки плюс аксиални и радиални шарки за засенчване за запълвания и щрихи, включително матрици на шарки, наследяване на нюанси, изрязване на пътеки, кеширано токенизиране на съдържание, вложено възстановяване на графичното състояние и ограничени броя recursion и плочки за враждебни ресурси

Version 2.447.0

Added

  • Добавена е конфигурируема таванна стойност DecodeBudgetBytes от 256 MiB за верига, която агрегира изхода от вложени етапи Flate, LZW, ASCIIHex, ASCII85, RunLength и предиктори на изображения, преди да достигнат паметта, с диагностика GetLastDecodeBudgetInfo и нула като изричен режим без ограничения

Version 2.446.0

Added

  • Добавено е LinearizeOutput по избор за бърз уеб преглед, което излъчва речника с параметри за линеаризация в първите 1024 байта, hint таблици за първа страница и споделени обекти, секции за страници, подредени по зависимости, и две таблици с кръстосани препратки за съвместимост, запазвайки директен файлов и поточен изход и надеждно откриване при презареждане

Version 2.445.0

Added

  • Заредените PDF файлове вече използват ограничено възстановяване на кръстосани препратки след повредени декларации startxref или неизползваеми xref данни, като първо преместват валидна таблица или поток и след това пресъздават валидираните отмествания на директни обекти с предимство на най-новото определение, филтриране на вложенообектни фалшиво положителни, конфигурируеми бюджети за сканиране и обекти, ограничени опити за xref котва, структурирана диагностика и записване с пълно пренаписване

Version 2.444.0

Added

  • AnalyzeLoadedSignatureRevisions вече класифицира всяка инкрементална ревизия след избран подпис като валидация с дълъг срок, попълване и подписване на формуляр, анотации или други промени, отчита променени и освободени обекти и имена на полета и оценява съответствието с DocMDP и FieldMDP независимо между традиционни, потокови, хибридни и компресиранообектни xref истории

Version 2.443.0

Added

  • VerifyLoadedSignatureWithTrust и HPDFValidateCMSCertificatePath вече изграждат пътища на сертификати на подписващия до потребителски предоставени доверени котви и проверяват подписи на сертификати, периоди на валидност, Basic Constraints, ограничения за дължина на пътя и Key Usage
  • Офлайн валидирането на отзоваване вече проверява OCSP и CRL подписи, авторитет на отговарящия, идентичност на сертификата, свежест на статуса и времена на отзоваване, като предпочита доказателства VRI за конкретен подпис пред DSS на ниво документ, доказателства от извикващия и CRL от CMS
  • THPDFSignatureInfo.CertificateValidation отчита доверие, дължина на пътя, доверена котва, време на оценка, статус и източник на отзоваване, време на отзоваване и проблеми с валидацията независимо от криптографското svValid

Version 2.442.0

Added

  • Проверката на заредени подписи вече криптографски валидира RFC 3161 клейма за време на документа спрямо /ByteRange на PDF и клейма за време на подписа спрямо родителската CMS стойност на подписа, докато THPDFSignatureInfo.Timestamp разкрива вида на клеймото, статуса, политиката, отпечатъка на съобщението, сериен номер, време на генериране, точност, подредба, nonce, TSA идентичност и детайли за сертификата на подписващия клеймото

Version 2.441.0

Added

  • Проверката на заредени подписи вече поддържа CMS RSA-PSS подписи със SHA-1, SHA-256, SHA-384 или SHA-512 и валидира явни параметри за хеш, MGF1 хеш, дължина на salt и trailer-field
  • THPDFSignatureInfo вече отчита SignedRevisionLength и UnsignedTrailingBytes, а svInvalidByteRange идентифицира структурно опасни диапазони на PDF подписи

Changed

  • Проверката на подписи вече възстановява позицията на потока на извикващия, сравнява чувствителни към сигурността байтови последователности без ранни изходи и отчита пълните параметри на алгоритъма RSA-PSS

Fixed

  • CMS проверката вече отхвърля припокриващи се, извънгранични, отрязани или двусмислени байтови диапазони и валидира пълния идентификатор на алгоритъм RSA PKCS#1 DigestInfo, вместо да приема всеки осембайтов низ с размер на дайджест

Version 2.440.0

Fixed

  • Регистрацията на Unicode шрифтове вече заделя пълния буфер за движение на глифове преди четенето на метриките на шрифта, което предотвратява нарушения на достъпа в работните процеси за OpenType формиране и подмножество на шрифтове
  • GetWideTextWidth вече интерпретира кешираните Unicode движения в em единици и прибягва до платформено измерване, когато метрика на глиф не е налична, възстановявайки правилно мащабирани ширини за пренасяне на думи и подредба
  • BeginIncrementalUpdate вече маркира заредените обекти като чисти преди проследяването на промените от извикващия, така че непроменените обекти не се пренаписват, а осиротелите речници за шифроване се освобождават правилно в добавената секция за кръстосани препратки

Version 2.439.0

Added

  • HPDFDecodePredictor и HPDFTryDecodePredictor предоставят ограничено декодиране за TIFF предвиждане от 1, 2, 4, 8 и 16 бита и за всичките пет PNG филтъра за редове, със строга валидация на редовете и приложими диагностични съобщения
  • TPDFLZWDecompressor добавя директен изход на поток, методи за многократно използване за декодиране без генериране на изключения, конфигурируеми ограничения за изхода и изисквания за терминатор на потока, както и статистика за ширина на код, речник, нулиране, разширяване и изход при всяко декодиране

Changed

  • LZW декодирането вече използва непрекъсната арена за фрази, поддържа и двата режима на PDF EarlyChange и двата реда на запълване на битове, обработва строго нулирания за изчистване и разширенията KwKwK и нараства геометрично в изхода на низове
  • Извличането на заредени изображения Flate и LZW вече зачита геометрията на предвиждането от DecodeParms и EarlyChange, използва безопасно при препълване оразмеряване на растера и споделя същата реализация на предвиждане като декодирането на xref потоци

Fixed

  • Декодирането на Flate с параметри за предвиждане вече чете от потока за декомпресиране вместо да копира компресираните входни байтове в етапа на предвиждане
  • Повредени LZW кодове, отрязани редове, невалидни тагове за PNG редове, невъзможна геометрия на предвиждане и прекомерно разширяване вече се провалят детерминистично, вместо да връщат частични или все още компресирани данни за изображения

Version 2.438.0

Fixed

  • THPDFViewer вече се компилира под Delphi XE2 до XE8, където WM_DPICHANGED отсъства от Winapi.Messages; константата за DPI съобщение за монитор вече е дефинирана локално за вериги от инструменти, по-стари от Delphi 10 Seattle, възстановявайки компилациите на TRIAL DCU библиотеките за RAD Studio XE2..XE8, които се прекъсваха с E2003 Undeclared identifier

Version 2.437.0

Changed

  • GetWideTextWidth вече измерва Unicode текст от кеш за ширини на движение по кодова точка, попълван веднъж от hmtx таблицата на шрифта, вместо обаждане CreateCompatibleDC + GetTextExtentPoint32W при всяко извикване -- 10-100 пъти по-бързо за пренасяне на думи, подравняване и измерване на клетки в таблици при дълги Unicode документи, с прозрачен резервен път към наследствения GDI път, когато няма регистриран Unicode шрифт

Version 2.436.0

Fixed

  • Вграденият шрифт /FontDescriptor /CapHeight вече използва реалната метрика otmsCapEmHeight на шрифта вместо хардкодирана константа, като прибягва до ~70% от изкачването за шрифтове, които отчитат нула

Version 2.435.0

Fixed

  • Вградените Unicode шрифтове вече запазват глифовете, които OpenType формирането произвежда (арабски презентационни форми, лигатури, контекстни алтернативи) при подмножество -- множеството FUnicodeExtraUsedGlyphs, записано от MarkUnicodeGlyphUsed / EnableShapingFeatureForSubset, се записваше, но никога не се консултираше от подмножеството, така че тези глифове попадаха в .notdef в изхода

Version 2.434.0

Added

  • THPDFWeightedCache добавя инспекция без промотиране, булево търсене, изрично премахване и прехвърляне на собственост, незабавно подрязване до бюджета, статистика за честота на попадения и жизнен цикъл, както и стрийминг SHA-256 ключове за съдържание

Changed

  • Големи подредени ToUnicode и CID CMaps вече използват логаритмично търсене на знаци и диапазони, запазват точно еднобайтови до четирибайтови кодови пространства, изолират споделени анализирани карти по корен на ресурса и нарастват геометрично в съхранението на парсъра
  • Постоянният кеш за рендерирани страници вече записва PNG и индексни данни атомарно, проследява давност на ниво страница, прилага намалени ограничения незабавно и възстановява остарели индекси, изоставени временни файлове, липсващи папки и неиндексирани папки на документи

Fixed

  • Анализът на CMap вече обработва правилно нечетни шестнадесетични полубайтове и отхвърля повредени шестнадесетични данни, невалидни или препълващи диапазони, отрицателни CID цели и неограничени изрични съпоставяния, докато детерминистично замества невалидни UTF-16 сурогатни последователности
  • Замяната в претегления кеш вече не освобождава обект, когато същата инстанция бъде повторно вмъкната под съществуващия си ключ, а повредените PNG записи в дисковия кеш се премахват след неуспешно декодиране вместо да провалят всяко по-късно търсене

Version 2.433.0

Added

  • Верификацията на заредените подписи вече поддържа ECDSA P-256, P-384 и P-521 CMS подписи със SHA-1, SHA-256, SHA-384 или SHA-512, включително избор на подписващ по issuer-and-serial и SubjectKeyIdentifier, строга DER валидация на подписа и разширена диагностика за алгоритъм и крива
  • Управлението на ICC цветове вече валидира ICC v2/v4 профили, извлича и проверява броя на компонентите, дедупликира регистрираните профили, преобразува ICCBased векторни цветове и сурови изображения проби в sRGB с поддръжка на rendering-intent и запазва цветовото пространство Alternate на PDF като контролиран резервен вариант

Version 2.432.0

Added

  • THPDFTableCell вече поддържа клетки с изображения (ImageIndex + ImageAspect мащабират регистрирано изображение до ширината на колоната с H/V подравняване) и HTML клетки (IsHTML рендира текста на клетката чрез TextOutHTML за вградено удебеляване/цветове/връзки/sub-sup маркиране), съответстващо на разнообразието от съдържание на клетки, което се очаква да носи експортът на мрежа

Version 2.431.0

Added

  • Нов механизъм за подредба и рендиране на THPDFTable (модул HPDFTable) подрежда таблици от декларирани ширини на колони и редове, с текст, подравняване, цвят и замествания на шрифт на ниво клетка, сливане чрез ColSpan / RowSpan, автоматично пренасяне на думи с измерени височини на редове, фонове за заглавна лента и райе, както и автоматично продължаване при прекъсване на страница, което повтаря заглавната лента на всяка страница -- всичко това използвайки съществуващите примитиви за изчертаване на THPDFPage, така че създателите вече не се налага да изчертават клетки ръчно с Rectangle и TextOut

Version 2.430.0

Changed

  • Обработката на потоци от съдържание и редактирането на заредени страници вече се мащабират по-ефективно при големи натоварвания с текст и пътища, запазват семантиката за Unicode от допълнителната равнина и PDF пътищата, инвалидират кешовете на страниците след мутации и завършват записите към потоци, които приемат частични буфери

Version 2.428.0

Added

  • THPDFPage.TextOutHTML получава претоварване за пренасяне на думи, което приема MaxWidth и пречупва дългите редове на границите на думите, плюс тагове на вградени хиперлинкове (<a href>) и долен/горен индекс (<sub>/<sup>); хиперлинковете се изчертават в синьо и подчертани и регистрират кликваема URI анотация

Version 2.427.0

Changed

  • Последователни текстови поредици, които споделят едни и същи шрифт и размер, вече не преизлъчват оператора Tf при всяко извикване, свивайки потоците от съдържание в документи, богати на шрифтове (таблици, абзаци), като все още ги преизлъчват след възстановяване на графичното състояние (Q), където PDF го изисква
  • Апроксимацията на елипса в THPDFPage вече използва стандартната константа капа на кубична Безие 0.5522847498, съответстваща на всяка друга реализация на елипса и кръг в модула и премахваща малкото зависимо от радиуса отклонение, което предишната апроксимация 11/20 произвеждаше

Version 2.426.0

Added

  • Визуализаторът вече предварително затопля кеша с рендерирани страници за страниците, съседни на току-що показаната, използвайки нишка на заден план при същия DPI, така че следващото прелистване да уцели кеша вместо да рендира синхронно отново; новото свойство PrefetchRadius контролира колко страници от всяка страна се предварително затоплят (0 го изключва)

Version 2.425.0

Added

  • Рендерерът на заредените страници вече декодира и изчертава вградените изображения (BI/ID/EI) вместо да ги прескача, разширявайки съкратените двойки ключ/стойност на вградено изображение и суровите байтове по време на токенизация и поставяйки резултата през същото CTM-отображение на единичен квадрат, използвано за XObject-и на изображения

Version 2.424.2

Changed

  • Дисковият кеш на рендираните страници вече събира всички файлове на страници в едно сканиране на директория и изваждапрепълващата се опашка в един проход, замествайки предишния цикъл на пресканиране-при-изваждане, който работеше в квадратично време спрямо броя страници на документ
  • Дедупликацията на изображения вече мемоизира SHA-256 на всеки съхранен поток от изображение и сравнява хешовете преди да обходи байтовете, така че добавянето на едно и също голямо изображение към много страници вече не преразчита всеки предишносте съхранен поток при всяко вмъкване

Version 2.424.1

Changed

  • Претегленият кеш на декодираните изображения и подмножество шрифтове вече разрешава търсенията чрез хеш-индекс и поддържа реда на последно използваните чрез базиран на индекси двойно свързан списък, превръщайки всяко Get, Put и повишение на актуалността от O(n) изместване на масив в O(1) работа, така че рендирането на големи многоизображения документи вече не се деградира, докато кешът се запълва

Version 2.424.0

Changed

  • CompressLoadedDocument вече зачита CompressionLevel, обработва изходните потоци в ограничени парчета, запазва оригиналния товар, когато компресията не го свива, безопасно освобождава заменените потоци и маркира трансформираните потокови обекти като мръсни, така че SaveLoadedDocument да персистира резултата, вместо да поеме пътя на копиране на непроменения файл.DecompressLoadedDocument използва същия потоков път, безопасен за собственост, премахва идентичностни /DecodeParms и оставя потоците на предиктор TIFF или PNG компресирани, докато етапът на предиктор може да бъде безопасно декодиран

Version 2.423.0

Added

  • THPDFPage.AddCertificationSignatureField и ConfigureCertificationSignature вече създават единствената сертификатна подпис DocMDP с всичките три нива на разрешение и съответстващата връзка Catalog /Perms /DocMDP, докато AttachSignatureFieldLock излъчва индиректни политики SigFieldLock и съответстващи референции FieldMDP за обхватите на полета All, Include или Exclude.THotPDF.GetLoadedSignaturePermissions извършва ограничена структурна инспекция на същия граф на разрешенията, включително изисквана прякота, коренова връзка, съгласуваност на политиките и диагностика, без да смесва структурата на политиката с криптографската валидност или съответствието с по-късни ревизии

Version 2.422.0

Added

  • Маркерите-заместители (placeholder tokens) за воден знак / горен колонтитул / долен колонтитул вече разрешават метаданни на документа: <%Author%> / <%Title%> / <%Subject%> / <%Keywords%> / <%Producer%> се заместват редом със съществуващите <%PageNo%> / <%TotPage%> / <%FileName%> / маркери за дата и час, когато на новата претоварена версия (overload) на HPDFReplaceWatermarkPlaceholders се подаде запис THPDFPlaceholderDocInfo. Старата 4-параметърна сигнатура остава за извикващи, които се нуждаят само от подмножеството страница / файл / дата и час

Version 2.421.0

Added

  • THPDFActionBuilder.GoToEmbeddedNamedDestination и GoToEmbeddedPage създават PDF 1.6 GoToE действия с валиден според стандарта родител, EmbeddedFiles name-tree, attachment-annotation и вложени /T целеви пътища, запазвайки именувани или изрични дестинации, незадължителни root file спецификации, NewWindow, верижно свързване на действия и ограничения за PDF/A/PDF/X
  • Инспекцията на заредени действия вече разпознава всички 18 подтипа действия от ISO 32000-1 и връща подредени, неизпълняващи се THPDFLoadedActionInfo снимки (snapshots) от източници catalog /OpenAction и /AA, page /AA, annotation /A и /AA, AcroForm field /AA и outline /A. Формите dictionary и array /Next запазват реда на изпълнение, докато malformed entries, shared nodes, cycles, excessive depth и excessive node counts спират безопасно с диагностика
  • Enums-те за annotation action и JavaScript trigger вече включват събития page-open /PO, page-close /PC, page-visible /PV и page-invisible /PI с необходимото договаряне на версия PDF 1.5

Version 2.420.0

Added

  • Етап 3 на content-stream device затваря цикъла на абстракцията: IHPDFContentDevice получава DrawXObject / DrawShading / ApplyExtGState за операторите Do / sh / gs, а споделеният интерпретатор вече ги диспечерица. Do е ограничен (gated) на cdcNeedImages, така че text/enum устройства прескачат тежкото декодиране на изображения; sh и gs се диспечерират безусловно. Пътят ExecuteViaDevice на renderer-а вече може да изрисува пълния набор от оператори (paths + colours + text + images + shading + ExtGState), наблюдаемо еквивалентен на наследения път HandleOperator. Вложената процедура ApplyExtGState беше повишена до метод на клас (DoApplyExtGState), за да я споделя пътят на устройството без дублиране; method-resolution клаузите насочват трите нови интерфейсни записа към Dev* помощници без сблъсък със съществуващите private помощници
  • Observer модел за document-content: събитието THotPDF.OnLoadedDocumentModified се задейства от InvalidateRenderedPageCache (PageIndex = -1, целия документ) и InvalidateRenderedPageCachePage (конкретна страница), така че прикачените viewers да се опресняват автоматично. THPDFViewer се абонира в SetDocument и се развързва при detach / opRemove, извиквайки RefreshDocument, когато е засегната текущата страница (или целия документ). Multi-view sync (няколко viewers върху един и същ THotPDF) вече работи без всяко извикващо лице да стартира RefreshDocument ръчно

Version 2.419.0

Added

  • Етап 1 на абстракцията на content-stream device: IHPDFContentDevice получава повърхност от text callbacks (BeginText / EndText / UpdateFont / UpdateCharSpace / UpdateWordSpace / UpdateHorizScale / UpdateLeading / UpdateRenderMode / UpdateRise / TextMove / TextSetMatrix / TextNewLine / ShowText / ShowTextArray), отразяваща машината за състояние на текста в PDF; споделеният диспечер HPDFInterpretContentStreamDevice вече препраща BT/ET/Tf/Tc/Tw/Tz/TL/Tr/Ts/Td/TD/Tm/T*/Tj/TJ/'/" към устройството, когато то декларира cdcNeedText
  • THPDFTextExtractDevice е конкретно устройство, което поддържа текстовите матрици и излъчва по един THPDFGlyphRecord на код на символ (декодиран чрез инжектиран IHPDFFontResolver) — наблюдаемо еквивалентен на изхода на HPDFInterpretTokens, но произведен през интерфейса на устройството, така че една и съща интерпретаторна примка управлява извличането на текст, изброяването на пътища и рендирането
  • Помощната функция HPDFExtractGlyphsViaDevice обвива text-extract устройството + споделения интерпретатор в едно извикване; съществуващите HPDFInterpretContentStream / HPDFInterpretTokens остават недокоснати за текущите извикващи
  • Етап 2 на абстракцията на content-stream device: THPDFPageRenderer вече имплементира IHPDFContentDevice, така че споделеният диспечер може да го управлява през същия абстрактен интерфейс. ExecuteViaDevice е опционалният (opt-in) вход за рендиране, управлявано от устройство; производственият път Execute запазва своя вграден ExecuteStream / HandleOperator dispatch, така че съществуващото поведение остава непроменено. Renderer-ът носи всяко парче състояние, от което callbacks се нуждаят (стек за graphics-state, кеш за шрифтове, GDI handles, четири paint bridges), и всеки метод на устройството е тънко делегиране, така че пътят, управляван от устройство, е наблюдаемо еквивалентен на наследения път

Version 2.418.0

Added

  • DecompressLoadedDocument е обратното на CompressLoadedDocument: обхожда всеки индиректен поток, носещ /Filter /FlateDecode (име или едноелементна форма на масив), инфлатира (inflates) payload-а обратно до сурови байтове, премахва записа /Filter и коригира /Length; потоците с други филтри (CCITT / DCT / JBIG2 / JPX / Crypt / RunLength) и вериги от множество филтри остават недокоснати, а повредените Flate payload-и се прескачат, вместо да се отхвърлят
  • EnumLoadedPageElements вече връща пълната геометрия на пътя за всеки елемент ekPath, а не само ограничителната кутия (bounding box): две нови полета PathPoints: array of THPDFPathPoint и PathIsCurve: array of Boolean са успоредни по индекс и носят контролните точки на всеки сегмент в потребителското пространство с флаг, различаващ кубичните bezier сегменти от линейните (ръбове m / l / re). Извикващите, които четат само bbox, са незасегнати; извличането на CAD чертежи, засичането на линии на таблици и потребителите на vector-replay вече могат да възстановят точните криви, които страницата е нарисувала
  • Новата единица HPDFContentDevice въвежда абстракцията на content-stream device (етап 0): интерфейс IHPDFContentDevice с базова имплементация TInterfacedObject (отразяваща доказания модел IHPDFFontResolver), споделен диспечер HPDFInterpretContentStreamDevice, който днес покрива подмножеството от оператори path / colour / state, и конкретно THPDFPathEnumDevice, което събира по един запис на всеки нарисуван път с пълна геометрия на точките. Това разрушава трипосочното дублиране между HPDFContentStream, HPDFPageRenderer.HandleOperator и HPDFCollectPathElements; етап 1 ще добави callbacks за text/image, а етап 2 ще мигрира renderer-а върху устройството

Changed

  • Обновен коментар в заглавката (header) на HPDFPageRenderer: бележката “TrueType/CFF glyph-outline rendering out of scope” беше остаряла — встроените glyph outlines са активни от v2.342.0 (DrawTextRun извиква THPDFEmbeddedTTF.DrawGlyph / THPDFEmbeddedCFF.DrawGlyph с реални квадратни/кубични bezier пътища; GDI TextOutW е само резерв (fallback) за непрожектирани символи). Покрити са също CID шрифтове чрез Identity-H + CIDToGIDMap

Version 2.417.0

Added

  • Five named loaded-document annotation helpers close the discovery gap where the existing ASubtype-parameterised helpers (AddLoadedHighlightAnnotation, AddLoadedSquareAnnotation, AddLoadedPolygonAnnotation) already produced these subtypes but callers had to know the secret: AddLoadedCircleAnnotation, AddLoadedUnderlineAnnotation, AddLoadedStrikeOutAnnotation, AddLoadedSquigglyAnnotation and AddLoadedPolylineAnnotation -- once landed, the XFDF interchange layer (which already recognises these subtype strings) picks them up for free
  • AddLoadedFileAttachmentAnnotation embeds an arbitrary file payload (PDF, image, office doc) as a FileAttachment annotation with the full three-object graph the spec requires: annotation dict / Filespec dict / EmbeddedFile stream with /Subtype MIME, /Params /Size and creation/modification dates; the new THPDFFileAttachmentIcon enum (faiPushPin / faiGraph / faiPaperclip / faiTag) selects the standard pin icon viewers render
  • THPDFFieldValidationOptions record + HPDFDefaultValidationOptions expose the full Adobe AF* parameter surface (Decimals / SeparatorStyle / NegativeStyle / CurrencySymbol / CurrencyBefore / RangeMin / RangeMax) that the Acrobat JS helpers accept; the existing ApplyLoadedFieldValidation(FieldIndex, Kind, DateFormat, Mask) signature is retained as a backward-compatible overload that forwards into the new record overload
  • ApplyFieldValidation and ApplyFieldCalculation bring the same Format+Keystroke+Validate / Calculate template to producer-mode fields (looked up by name) so newly-created forms get the same AF* scripts as loaded ones, without writing JavaScript by hand
  • CopyLoadedAnnotationsFromDocument deep-copies annotations from another loaded document directly PDF→PDF (no XFDF intermediary): reuses CopyObject to rebuild indirect references, streams and /AP appearances, rewrites /P to the destination page, optionally remaps /IRT reply chains via /NM, optionally clears /T author, and accepts a THPDFAnnotCopyFilterEvent callback for selective copy -- covers Widget/PrinterMark/TrapNet/Watermark/3D/Screen that the XFDF layer does not reach

Fixed

  • ApplyLoadedFieldValidation wrote the Format JavaScript under trigger key /X (annotation-exit), which Acrobat never fires for form fields -- the script was effectively dead. Corrected to /F so the format actually runs on field commit
  • ApplyLoadedFieldValidation emitted AFSpecial_FormatEx for the ArbitraryMask kind, a function that does not exist in the Adobe AF* set; only AFSpecial_KeystrokeEx(mask) is real, so the Format pass is dropped and enforcement happens at keystroke time as the spec intends
  • ApplyLoadedFieldValidation unconditionally appended AFRange_Validate(true,true,0,9999999) for numeric kinds, imposing a hidden 0..9999999 range the caller never asked for; range validation now only fires when the caller explicitly sets RangeMin or RangeMax in the options record
  • ApplyLoadedFieldValidation wrapped the ArbitraryMask in a JavaScript regex literal and emitted a hand-rolled validate script, but the mask is a literal format pattern ("AAA-9999"), not a regex; the validate pass is now removed and the keystroke mask carries the enforcement alone
  • ApplyLoadedFieldCalculation now prepends a Format+Keystroke number-formatting pair before the AFSimple_Calculate script so the aggregated result renders as a plain number, matching common PDF viewer behaviour (without it the Calculate value displays raw)

Version 2.416.0

Added

  • THPDFViewer now scrolls on hover-wheel without needing a click first: a thread-local WH_MOUSE hook (new HPDFMouseWheelHook unit, auto-installed from its initialization section) routes WM_MOUSEWHEEL to whichever THPDFViewer instance sits under the cursor, matching the behaviour of every native Windows PDF reader
  • THPDFViewer is now Per-Monitor DPI v2 aware: new HPDFPerMonitorDPI unit resolves user32!SetProcessDpiAwarenessContext (Win10 1703+, DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2) at runtime and falls back through shcore!SetProcessDpiAwareness (Win8.1+) and user32!SetProcessDPIAware (Vista+); the legacy HPDFEnablePerMonitorDPI is retained as an alias that forwards to the new layered helper
  • THPDFViewer.RenderAtPhysicalDPI published property (default True) makes the rendering DPI baseline track the monitor’s physical DPI via HPDFGetWindowDPI, so 100% zoom on a 144 DPI panel renders at native resolution; a new WMDpiChanged handler re-renders on cross-monitor moves; set False to preserve the historical 96-DPI logical baseline
  • Optional persistent disk tier for the rendered-page cache: setting THotPDF.RenderCacheFolder to a writable folder path persists every page rendered by RenderLoadedPageToBitmapCached as a PNG under <folder>\<SHA256-prefix-16>\<page>@<dpi>.png, so re-opening the same document later is instant; RenderCacheMaxDocuments (default 20) and RenderCacheMaxBytes (default 500 MB) bound the footprint with a true LRU eviction; the lookup order becomes in-memory → disk → rasterise, with disk hits back-filling the in-memory tier
  • THotPDF constructor now activates the highest available per-monitor DPI tier at first instantiation in runtime mode (skipped in csDesigning), so hosts that never call HPDFEnablePerMonitorDPI explicitly still get crisp rendering on high-DPI displays

Version 2.415.0

Added

  • HPDFParsePDFDate now honours the timezone suffix (+HH’mm, -HH’mm, or Z) and returns a UTC TDateTime; HPDFFormatPDFDate is the inverse formatter producing D:YYYYMMDDHHmmSS+00’00
  • GetLoadedExtGStateInfo reads LW / LC / LJ / ca / CA off a named ExtGState entry on a loaded page; GetLoadedShadingCount / GetLoadedShadingName and GetLoadedPatternCount / GetLoadedPatternName enumerate the /Shading and /Pattern resource sub-dictionaries
  • ReplaceLoadedPage swaps a page’s contents from a source document, SwitchLoadedPages exchanges two pages, ReverseLoadedPages flips page order in a range, ExtractLoadedPagesToPDF saves a page range as a standalone PDF, and GetLoadedPageInheritedBox resolves inherited page boxes through the page-tree parent chain
  • GetLoadedFileSpecInfo reads embedded-file metadata (name / description / MIME / size), GetLoadedEmbeddedFileMIME returns the /Subtype, GetLoadedEmbeddedFileChecksum returns the /Checksum digest, and THPDFNameTreeType + GetLoadedNameTreeRootCount provide a typed enumeration of all nine name-tree categories
  • HPDFEnablePerMonitorDPI dynamically enables per-monitor DPI awareness; THPDFBackgroundRenderer renders pages on a background thread with a request queue and cancellation; GetLoadedPageContentStreamCount reports whether /Contents is a single stream or an array; GetLoadedXMPValue extracts a namespace-qualified XMP property; and GetLoadedDocumentReport aggregates all diagnostic info into a JSON string

Version 2.414.0

Added

  • THPDFActionBuilder.URIWithIsMap creates a URI action with /IsMap true for server-side image-map tracking, where the previous URI builder only set the bare /URI string
  • AddLoadedCaretAnnotationEx adds an optional paragraph symbol (/Sy P) to caret annotations, the visual marker editors use for insert-tracking
  • GetLoadedAnnotationDA parses a FreeText annotation’s /DA string into font name, font size and RGB colour components, so a caller can inspect or clone the appearance without re-parsing the raw operator string

Version 2.413.2

Fixed

  • The C++Builder package now links without requiring crypt32.lib: HPDFWinCertSigner loads the CryptoAPI entry points (CertOpenStore, CertEnumCertificatesInStore, CryptAcquireCertificatePrivateKey, and the Crypt hash helpers) dynamically via LoadLibrary/GetProcAddress, matching the pattern already used by HPDFDoc.EnumerateSystemCertificates

Version 2.413.1

Fixed

  • Type1 and CFF font handling now preserves parser ownership across repeated stream checks and multi-font FontSets, returns stable glyph names and bounding boxes, keeps fractional font sizes and DPI scaling, and avoids composite-glyph and private-dictionary memory errors
  • The C++Builder AddDelPages, HugeFileBenchmark, and Security demos now compile for Win64, while page-operation and preflight examples release partially constructed objects safely

Version 2.413.0

Changed

  • The Delphi E-Invoice demo now validates required invoice fields, amount and VAT ranges, currency syntax, and embedded XML profile compatibility before writing output
  • The attach workflow now rejects identical source and output paths, reports the detected XML guideline, and combines container, PDF/A, XML profile, signature, visual consistency, Schematron, and external-report checks into one verdict

Fixed

  • E-Invoice generation and manual validation no longer report a successful result when an enabled validation layer finds issues
  • Loaded electronic-invoice summaries now read the invoice number, seller, and buyer from their correct XML aggregates, preventing false visible-text consistency findings

Version 2.412.0

Changed

  • All Delphi demos now resolve no-argument relative assets and outputs from their executable directory while preserving the caller working directory for command-line paths
  • Delphi command-line demos now provide stricter argument validation, failure exit codes, deterministic comparison inputs, and generated-document verification across page copying, text extraction, preflight, optimisation, inspection, and in-memory workflows

Fixed

  • Delphi demos no longer risk page-list overflow above 100 selected pages, create an extra blank page in the add-page workflow, close unrelated PDF viewer windows, or report failed preflight checks as successful
  • The E-Invoice attach workflow now rebuilds its current page correctly when a single-page source is converted, signed, and stripped of the temporary initial blank page

Version 2.411.0

Added

  • E-Invoice demo: new "Attach to existing PDF" mode converts an existing PDF to PDF/A-3, embeds a Factur-X/ZUGFeRD invoice XML as a document-level attachment, and optionally signs the result with a PFX certificate

Version 2.410.0

Added

  • Loaded AcroForm fields can now update flags, maximum length, text justification, per-widget rectangles, rotation, border colour, and visible or printable state, with widget enumeration for radio groups and other multi-widget fields

Fixed

  • Loaded field tooltip, border-width, and background-colour edits now mark the correct field or widget dictionaries dirty, apply visual properties to every widget, and invalidate only the affected page render cache

Version 2.409.0

Added

  • ActivateLoadedLinks turns bare HTTP, HTTPS, FTP, www., mailto:, and email text into positioned borderless URI annotations across a selected page range

Changed

  • Loaded link creation now persists reliably in incremental updates, while automatic activation snapshots existing links once per page, skips matching URI and rectangle pairs, and invalidates each changed page cache only once

Version 2.408.0

Added

  • Loaded annotations can now update their title, unique name, modification date, normalised rectangle, and standard solid, dashed, bevelled, inset, or underlined border style

Fixed

  • Loaded annotation edits now mark the annotation object dirty for incremental saves, while visual edits invalidate only the affected page's cached renders and retain other warm pages

Version 2.407.0

Added

  • THPDFViewerModel stores, clips, enumerates, removes, and clears persistent page-region highlights without modifying the PDF
  • THPDFViewer adds a highlight interaction mode with captured marquee dragging, rotation-aware PDF coordinate recovery, configurable colour, and an OnMarqueeSelect callback

Fixed

  • Viewer coordinate transforms now retain the actual render DPI below 12 and above 2400, keeping selections aligned at the 5% and 6400% zoom limits

Version 2.406.0

Added

  • THPDFViewerModel creates rotation-aware page thumbnails directly at a DPI selected for caller-supplied pixel bounds, avoiding full-size intermediate page bitmaps
  • Viewer-model page prefetch warms a centred neighbourhood asynchronously while limiting the scheduled pages to the rendered-page cache capacity

Version 2.405.0

Added

  • THPDFPageLayout now supports PDF 1.5 plTwoPageLeft and plTwoPageRight cover-spread layouts with automatic version negotiation and strict-version fallback

Fixed

  • BeginDoc now preserves the caller-selected page layout instead of always replacing it with plOneColumn

Version 2.404.0

Added

  • THPDFViewerModel creates rotation-aware snapshots of bounded PDF page regions without allocating a full-page bitmap

Version 2.403.0

Added

  • THPDFViewerModel converts points bidirectionally between PDF page space and rotation-aware Viewer coordinates at a caller-selected DPI

Version 2.402.0

Changed

  • Viewer zoom commands now use stable standard levels from 5% through 6400%, including reversible navigation around arbitrary custom values

Version 2.401.0

Added

  • THPDFViewer adds Ctrl+wheel zoom, vertical wheel scrolling, and Shift+wheel horizontal scrolling without rerendering for scroll-only input

Version 2.400.0

Added

  • THPDFViewer adds keyboard page navigation, scrolling, zoom shortcuts, and Actual Size, Fit Width, or Fit Page mode selection

Version 2.399.0

Added

  • THPDFViewer draws or prints the rotation-aware current view with deterministic aspect-preserving fit and centred placement

Version 2.398.0

Added

  • THPDFViewerModel creates caller-owned vector EMF snapshots of any loaded page or the current view, including non-destructive 90-degree view rotation

Version 2.397.0

Added

  • THPDFViewerModel saves rotation-aware page snapshots as BMP, JPEG, or PNG to files and caller-owned streams with configurable JPEG quality

Version 2.396.0

Added

  • THPDFViewer.ResetView restores Actual Size, clears view rotation and search highlights while preserving the current page, with matching reset and rotation actions and batched single-render updates

Version 2.395.0

Added

  • THPDFViewer and THPDFViewerModel add clockwise, counter-clockwise, and resettable view rotation that also applies to caller-owned page snapshots without changing the PDF page

Version 2.394.0

Added

  • THPDFViewerModel can create caller-owned page snapshots and save the current page as BMP without constructing a Viewer control

Version 2.393.0

Added

  • THPDFLoadedFormField now exposes field flags, MaxLen, page index, widget bounds, and common Required, NoExport, Multiline, and Password states
  • GetLoadedFormFieldMaxLength provides direct indexed access to loaded text-field length limits

Version 2.392.0

Added

  • SetDocumentAttachmentMetadata renames document-level embedded attachments and updates their descriptions before serialization

Version 2.391.0

Added

  • ExtractLoadedPagesTextToStream streams selected loaded-page text as UTF-8 with custom separators and optional BOM output
  • THPDFViewerModel adds form-field hit testing and deterministic keyboard navigation across page widgets
  • THPDFSignatureInfo.CertificateTimeValidity reports certificate-bound and signed-time validity classifications

Fixed

  • Loaded form fields without widget /P back-references can now be mapped through page annotation arrays

Version 2.390.0

Added

  • THPDFWatermarkTemplate.MakeCurve and THPDFPage.AddCurveWatermark add cubic Bezier curves to loaded composites and new-document authoring

Fixed

  • Loaded document metadata setters now mark the Info dictionary dirty so incremental saves persist title and author changes

Version 2.389.0

Added

  • InsertLoadedBlankPage inserts a blank page with caller-defined dimensions at an exact loaded-document position
  • ExtractLoadedPagesText aggregates text from a one-based page range with a caller-defined separator
  • GetLoadedFormFieldNameValuePairs and SetLoadedFormFieldNameValuePairs provide batch name=value form exchange through TStrings
  • CMapResourcePath supports explicit standard CMap deployment paths for services, plug-ins, and custom application layouts

Changed

  • The VCL viewer now draws search-hit rectangles and refreshes when the active hit changes on the current page, while linked outline controls follow viewer document changes
  • Page rendering now resolves inherited media boxes, rotation, and resources and correctly maps non-zero page origins at every right-angle rotation

Fixed

  • Form-name conflicts are rejected before page insertion or append begins when merge renaming is disabled, leaving the destination page count unchanged
  • Deleting loaded pages now detaches their AcroForm widget fields and removes empty field-tree branches instead of leaving references to deleted pages
  • Cursor-style search helpers and viewer-model misses no longer clear managed text-match records with raw memory operations
  • Automatic CMap discovery now passes the actual collection root to the text decoder

Version 2.388.0

Added

  • New DeletePages removes one-based page ranges from loaded PDFs, de-duplicates overlapping selections, reports progress, and rebuilds a valid page tree for saving
  • Page insertion and append merging now accept THPDFMergeOptions to copy recursive outlines, register imported AcroForm fields, and deterministically rename conflicting field names
  • New AddLoadedRadioButton creates a true parent radio field with child widgets, shared export values, and complete on/off appearance states
  • New SearchLoadedNext provides stateless page-local next-match search, while GetLoadedOutlineEntries returns complete recursive outline snapshots with parent and level data
  • New Windows certificate-store signing overloads select a current-user or local-machine certificate by SHA-1 thumbprint and sign through either CNG or legacy CSP private keys
  • New THPDFLoadedDocumentFacade exposes typed outline, form, annotation, font, and image collections with mutation and extraction helpers
  • New THPDFViewer, THPDFSearchPanel, THPDFOutlineViewer, viewer model, and viewer action classes add reusable VCL page display, navigation, zoom, search, and bookmark controls
  • New advanced printing, signature validation, page-thumbnail, loaded-image export, and typed loaded-document inspection demos cover the end-to-end workflows

Changed

  • Loaded-document printing now builds deterministic collated or uncollated physical page sequences, supports custom paper width and length, and reports printer paper codes, names, and sizes
  • System certificate enumeration now includes SHA-1 thumbprints, private-key availability, validity dates, and key-usage metadata

Fixed

  • Loaded text-search result growth no longer copies managed string records with raw memory moves, preventing invalid-pointer failures on Win64
  • Deleting loaded pages no longer frees shared page resources or leaves stale page-tree counts that reappear after save and reload

Version 2.387.0

Added

  • New PrefetchLoadedPages renders a page range into the rendered-page cache on a background worker thread, so a viewer turning pages gets instant warm-cache hits instead of waiting for each render
  • CancelLoadedPagePrefetch stops the worker and IsLoadedPagePrefetchActive reports its state; loading another document or destroying the component cancels an active prefetch automatically
  • Cached rendering and the prefetch worker are serialised internally, so RenderLoadedPageToBitmapCached stays safe to call while a prefetch is running

Version 2.386.0

Added

  • New FlattenLoadedAnnotations draws each annotation's normal appearance permanently into the page content at its rectangle and removes the annotation, so markup and form visuals survive in viewers that hide or cannot edit annotations
  • The pass follows appearance-state dictionaries through /AS, honours the appearance bounding box and matrix when fitting the rectangle, and can be limited to one annotation subtype or a page range

Version 2.385.0

Added

  • New RenderLoadedPageRegionToBitmap rasterises only a chosen user-space window of a page at the requested DPI, so very large pages can be rendered tile by tile in bounded memory at high resolutions instead of as one oversized bitmap
  • Tiles align exactly: the bitmap covers precisely the requested region, so adjacent tiles reassemble into the full page without seams

Version 2.384.0

Added

  • New GenerateLoadedPageThumbnails renders the selected pages of a loaded document and embeds them as JPEG page thumbnails, the previews shown in viewer page panels; the longest edge size and JPEG quality are configurable, and existing thumbnails are replaced in place
  • GetLoadedPageThumbnailSize reads back an embedded thumbnail's pixel dimensions, and ClearLoadedPageThumbnails removes thumbnails from the selected pages

Version 2.383.0

Added

  • EnumLoadedPageElements now reports vector path elements alongside text runs and images: each painted path yields an element with its user-space bounding box, the painting operator (stroke, fill, or both), the fill and stroke colours in force, and the segment count
  • The path walker follows q/Q nesting and cm transformations, so shapes drawn inside scaled or translated blocks report their true page coordinates

Version 2.382.0

Added

  • THPDFPrintOptions gains Duplex (simplex, long-edge, short-edge), PaperBin, and PrintQuality fields that are pushed into the printer device mode before the job starts; an explicit Orientation value is now applied as well
  • New HPDFGetInstalledPrinters lists the system printers, and HPDFGetPrinterCapabilities reports a printer's duplex and colour support, maximum copy count, paper bins (with the codes accepted by PaperBin), and supported resolutions

Version 2.381.0

Added

  • New CopyLoadedOutlinesFromDocument merges the complete bookmark tree of another loaded document into the current one, preserving titles, nesting, sibling order, and destination view parameters while remapping every destination page by a caller-supplied offset — the companion to page-append merges so combined documents keep both bookmark sets

Fixed

  • GetLoadedBookmarkPageIndex now finds bookmarks beyond the first top-level entry and inside nested levels; the previous lookup only matched later bookmarks by coincidence

Version 2.380.0

Added

  • New ImposeLoadedPagesNUp lays any page range onto grid sheets (any columns-by-rows arrangement, configurable sheet size and gutter) in reading order, scaling each page into its cell with optional aspect-ratio preservation
  • New ImposeLoadedPagesBooklet produces saddle-stitch booklet sheets: pages are padded to a multiple of four and paired in booklet order so double-sided printing and folding yields a correctly ordered booklet
  • Both imposition calls wrap the source pages as Form XObjects and append the finished sheets after the existing pages, returning the sheet count

Fixed

  • Loaded-page rendering now follows an indirect reference on the resources /XObject sub-dictionary; pages whose resources arrived as separate objects skipped their images and forms silently

Version 2.379.0

Added

  • SaveLoadedPagesAsImages gains two TIFF formats: ifTIFF writes one single-page TIFF file per page, and ifTIFFMulti aggregates the whole page range into one multi-page TIFF, unifying TIFF output with the existing BMP, JPEG, PNG, EMF, and WMF choices
  • Both TIFF paths honour the requested rendering DPI in the image resolution tags and use lossless Deflate compression

Version 2.378.0

Added

  • Loaded-page rendering now draws text rendering modes 1 (stroke) and 2 (fill then stroke) with real glyph outlines for both embedded fonts and system-font fallbacks, using the current stroke colour and line width; the clipping variants 4 to 7 paint like their base modes

Fixed

  • Twelve single-operand content operators (Tc, Tw, Tz, TL, Ts, Tr, w, J, j, M, ri, i) read their operand from the wrong token position and always applied zero; character and word spacing, horizontal scaling, leading, text rise, render mode, line width, caps, joins, and miter limit now take effect when rendering loaded pages

Version 2.377.0

Added

  • Loaded-page rendering now honours optional-content (layer) visibility: content inside BDC /OC marked sections and XObjects carrying an /OC entry is hidden when its layer is off, following the document's default configuration (/BaseState, /ON, /OFF)
  • Optional-content membership dictionaries evaluate their /P policy (AnyOn, AllOn, AnyOff, AllOff) over the member groups
  • New layer APIs on loaded documents: GetLoadedOptionalContentGroupCount, GetLoadedOptionalContentGroupName, GetLoadedOptionalContentGroupVisible, and SetLoadedOptionalContentGroupVisible to inspect and override layer states for rendering; overrides invalidate the rendered-page cache automatically

Version 2.376.1

Fixed

  • Loaded-page bitmap rendering now paints image XObjects: the Do, gs, and sh resource lookups previously missed their slash-prefixed operand names and skipped the object silently
  • The cm operator and Form XObject /Matrix values now concatenate in the correct order, so translate-plus-scale placement sequences (the standard image positioning idiom) land content at its intended page position

Version 2.376.0

Added

  • New RegisterExponentialFunction, RegisterStitchingFunction, and RegisterPostScriptFunction APIs create standalone Type 2, Type 3, and Type 4 function objects for use wherever a function reference is accepted (shadings, halftone spot and transfer functions, tint transforms)
  • RegisterPostScriptFunction validates the calculator program at registration time by trial evaluation, so malformed programs are rejected immediately instead of degrading silently in viewers
  • New RegisterSeparationFunc creates a Separation colour space with a caller-supplied tint-transform function object

Fixed

  • Rendering Type 2 (exponential) tint transforms with one- or three-component outputs no longer paints black; previously only four-component (CMYK) outputs decoded correctly
  • Rendering Type 3 (stitching) tint transforms now supports any number of sub-functions, applies the /Encode remapping, and accepts single-entry /Bounds arrays

Version 2.375.0

Added

  • Page rendering now evaluates Type 4 (PostScript calculator) tint-transform functions, so Separation and DeviceN colours and gradient shadings driven by calculator programs render their real colours instead of a grey placeholder
  • The calculator evaluator covers the complete ISO 32000-1 7.10.5 operator set: arithmetic, comparison, boolean and bitwise, stack manipulation, and if/ifelse conditionals

Fixed

  • Named colour-space selection (cs/CS operators) in loaded-page rendering now resolves resource names correctly; previously the lookup missed and the content fell back to the default colour space
  • Loaded-page rendering now follows indirect references to array-valued colour spaces such as /Separation and /DeviceN definitions stored as standalone objects

Version 2.374.0

Fixed

  • XFDF annotation import/export now preserves caret annotation default appearance data through the <defaultappearance> child and the PDF annotation DA entry

Version 2.373.0

Fixed

  • XFDF annotation import/export now preserves caret annotation fringe geometry through the fringe attribute and the PDF annotation RD entry

Version 2.372.0

Fixed

  • XFDF annotation import/export now preserves rubber stamp annotation rotation through the rotation attribute and the PDF annotation Rotate entry

Version 2.371.0

Fixed

  • XFDF annotation import/export now preserves text annotation reply relationships through inreplyto, replyType, and the PDF annotation IRT and RT entries

Version 2.370.0

Added

  • XFA numeric, date-time, and password fields with disabled horizontal scrolling now flatten to AcroForm text widgets with the PDF do-not-scroll flag

Version 2.369.0

Added

  • XFA text fields with disabled scroll policies now flatten to AcroForm text widgets with the PDF do-not-scroll flag

Version 2.368.0

Added

  • XFA text fields with multiLine="1" now flatten to AcroForm text widgets with the PDF multiline flag

Version 2.367.0

Added

  • XFA subform access restrictions now inherit into child widgets so generated AcroForm fields stay read-only when an ancestor is readOnly, protected, or nonInteractive

Version 2.366.0

Added

  • XFA choice-list flattening now maps commitOn="select" to the AcroForm commit-on-selection-change flag for generated choice fields

Version 2.365.0

Added

  • XFA choice-list flattening now maps open="always" lists to single-select AcroForm list boxes instead of drop-down combo boxes

Version 2.364.0

Added

  • XFA choice-list flattening now maps textEntry="1" combo lists to editable AcroForm combo boxes while preserving typed values outside the option list

Version 2.363.0

Added

  • XFA choice-list flattening now prefers <items save="1"> values when a field carries separate display and saved-value option lists

Version 2.362.0

Fixed

  • XFDF annotation import/export now preserves FreeText justification and tail attributes through the PDF annotation Q and IT entries
  • JBIG2 document defaults now match the documented scan-friendly settings for lossy level, isolated black-pixel cleanup and black-dot size

Version 2.361.0

Fixed

  • XFDF annotation import/export now preserves standard line leader and caption attributes, including leaderLength, leaderExtended, caption, leader-offset, caption-style, caption offset values and the import-side leaderExtend spelling used by compatible XFDF files

Version 2.360.0

Added

  • XFA flattening now suppresses output for fields and static draws concealed by presence="hidden", presence="invisible", or presence="inactive", including descendants of concealed containers

Version 2.359.0

Added

  • XFA flattening now maps field-level access="readOnly", access="protected", and access="nonInteractive" restrictions to the generated AcroForm read-only flag

Version 2.358.0

Added

  • XFA flattening now preserves <choiceList open="multiSelect"> semantics by setting the PDF multi-select flag on the generated AcroForm list box

Version 2.357.0

Added

  • XFA flattening now maps <ui><passwordEdit> fields to AcroForm text fields with the PDF password flag, preserving bound values while allowing readers to treat the field as password-style input

Version 2.356.0

Added

  • XFA flattening now honours explicit <bind match="none"> field bindings, so fields marked as unbound remain blank instead of taking same-name values from the XFA form or datasets packets

Version 2.355.0

Added

  • XFA flattening now honours simple explicit <bind match="dataRef" ref="..."> field bindings such as $record.customer.legalName, so ApplyXFAAsAcroForm and FlattenLoadedXFA preserve values stored under a different data node name before automatic same-name matching

Version 2.354.0

Fixed

  • XFDF annotation import/export now preserves link annotation BorderStyleAlt children through the PDF annotation Border array, including corner radii, width and dash pattern values

Version 2.353.0

Fixed

  • XFDF annotation import/export now preserves standard interior-color attributes for line, square, circle, polygon, polyline and redaction annotations through the PDF annotation IC color array

Version 2.352.0

Fixed

  • XFDF annotation import/export now preserves standard annotation border style and cloudy border effect attributes, including width, dashes, style and intensity

Version 2.351.0

Fixed

  • XFDF annotation import/export now preserves annotation rich text through <contents-richtext> and imports popup child geometry and open state into annotation Popup dictionaries

Version 2.350.0

Fixed

  • XFDF annotation import/export now preserves additional standard annotation attributes: text open and review state values, line endpoint styles, link and redaction coords, FreeText default style, default appearance and rotation, and square or circle fringe geometry

Version 2.349.0

Fixed

  • XFDF annotation import/export now follows ISO 19444-1 structures for lines, polygons, polylines and ink annotations: line exports include full start / end coordinate pairs, polygon and polyline data uses <vertices> child elements, ink data uses <inklist><gesture>, semicolon-separated coordinate pairs import correctly, and unsupported annotation subtypes no longer inflate the exported count

Version 2.348.0

Added

  • LoadedPageCount property, DuplicateLoadedPage, AddLoadedBlankPage, SetLoadedPageRotationValue and GetLoadedPageBoxRect round out the loaded-document page-operation API — duplicate pages, insert blank separators, set rotation and read any of the five page boxes in one call
  • GetLoadedEncryptionMethod returns the cipher name (RC4-40 / RC4-128 / AES-128 / AES-256), GetLoadedFileStructureInfo aggregates linearization / object-stream / xref-type in one call, LoadedSourceFileSize is a property, and SetLoadedPDFVersion updates the version
  • StampLoadedPageImage and StampLoadedPageImageFromFile embed a JPEG Image XObject (logo / signature image / QR code) onto a loaded page at a given rectangle, InsertLoadedText draws a single-line text run, and GetLoadedPageContentLength returns the decoded byte count
  • THPDFPrintOptions gains IgnoreHardMargin (offset printer hard margins so content is not clipped) and AutoRotate (landscape pages print landscape automatically)
  • SaveLoadedPagesAsImages gains BMPPixelFormat / BMPMonochrome (mono / 8-bit export) and JPEGScale (1 / 2 / 4 / 8 sub-sampled JPEG decode for fast thumbnails)
  • CompressLoadedDocument zlib-compresses every uncompressed stream in the loaded object graph and writes /Filter /FlateDecode, shrinking output size

Fixed

  • StampLoadedPageText and StampLoadedPageImage now transparently decompress FlateDecode content streams before appending operators — previously stamping onto a compressed /Contents silently corrupted the zlib payload and the appended text/image disappeared

Version 2.347.0

Added

  • AddLoadedOutline creates a new bookmark on a loaded PDF at any nesting level (ParentIndex = -1 for top-level), with a /Dest [page /XYZ x y zoom] target — the single highest-requested loaded-document feature, closing the gap that HotPDF could read/modify/delete bookmarks but never create them
  • SetLoadedOutlineDestination and SetLoadedOutlineURI rewrite an existing bookmark’s target page or switch it to a URI action
  • ResolveLoadedNamedDestination turns a named destination string into a zero-based page index, and AddLoadedNamedDestination registers a new anchor on the loaded document’s /Names /Dests tree
  • GetLoadedBookmarkPageIndex is a convenience lookup: pass a bookmark title, get back the page it points to

Version 2.346.0

Fixed

  • Image scaling quality now honours /Interpolate: HALFTONE stretch mode is used by default (smooth downscale) and COLORONCOLOR when the image explicitly sets /Interpolate false, so small raster images keep their hard edges where the author intended instead of always blurring

Version 2.345.0

Fixed

  • TJ array kerning adjustments are no longer discarded: the numeric elements between string runs advance the text matrix by -value × FontSize / 1000, so tightly-spaced titles and logo lettering from Word / Illustrator place glyphs at the intended offsets
  • Tw (word spacing) now also fires on the CID ideographic space (U+3000, code $3000), so justified Japanese / Chinese text gets its word spacing instead of only ASCII code 32
  • Font weight / italic detection now consults /FontDescriptor /Flags (bit 18 ForceBold) and /ItalicAngle in addition to the /BaseFont name, so subset-prefixed fonts whose name carries no -Bold suffix still render at the right weight

Version 2.344.0

Added

  • GetLoadedTrapped reads the /Trapped key from the Info dict (True/False/Unknown), where it was previously write-only — PDF/X preflight workflows can now round-trip the trap state
  • GetLoadedDocumentMetadataXML returns the raw XMP metadata stream bytes so PDF/A documents whose Info dict is absent can still expose dc:title / dc:creator / xmp:CreateDate
  • GetLoadedCollectionInfo reads the /Collection Name of a PDF Portfolio (EmbeddedFiles name tree still carries the file list)
  • GetLoadedOutlineChild descends one level into the bookmark tree, returning the /First child of a top-level outline entry, so nested chapter / sub-chapter bookmarks are no longer invisible
  • RotateLoadedPages rotates every page in a range by a given angle (accumulating onto existing /Rotate), the batch counterpart to per-page rotation
  • SetLoadedPageBoxForRange sets a page box (Media/Crop/Bleed/Trim/Art) for every page in a range in one call
  • GetLoadedViewerPreferences now also reads HideWindowUI and CenterWindow, matching the six keys the writer emits (previously only four came back)

Version 2.343.0

Fixed

  • The W n / W* n clip idiom now applies the clip: the n operator builds the pending path and calls SelectClipPath instead of discarding both the path and the pending clip, so rect / container clips written as re ... W n no longer leak their contents past the boundary
  • SetMiterLimit is now pushed to GDI before building the stroke pen, so sharp joins honour the PDF miter limit (default 4) instead of GDI’s default 10 — eliminating the long spikes on acute-angle joins
  • Type 3 glyphs declared with d0 (colour-permitting) now explicitly clear the colour-suppress flag, so a preceding d1 glyph no longer bleeds its colour suppression into a d0 glyph

Added

  • ri (rendering intent) and i (flatness) operators are now consumed and stored on the graphics state (RenderingIntent / Flatness fields), where they were previously silently skipped

Version 2.342.0

Added

  • Text rendering mode operator Tr is now consumed; mode 3 (invisible) skips painting the text run entirely, so the OCR / form-background hidden text layer no longer paints as overlapping garbage glyphs — the most common Tr case in real-world PDFs. Modes 1 / 2 (stroke) currently fall back to fill pending per-glyph outline support
  • Marked-content operators BMC / BDC / EMC and the DP / MP property variants now maintain a depth counter on the renderer, the prerequisite for a later round’s OCG / OCMD visibility evaluation; BX / EX compatibility operators maintain their own counter so the renderer knows it is inside a compatibility block

Version 2.341.0

Fixed

  • Bezier shorthand operators v and y are now handled by the page renderer, where they were previously silently skipped — rounded rectangles, circles and the curves produced by Illustrator / PowerPoint / InDesign render correctly instead of being truncated or dropped
  • DrawTextRun now honours Tz (horizontal text scaling), Tw (word spacing, applied to the space glyph) and Ts (text rise) so justified Word exports place glyphs at the right width, headings that are horizontally stretched/squeezed keep their length, and super/subscript text lifts off the baseline — previously those three text-state values were stored but never consumed

Version 2.340.0

Added

  • SearchLoadedPageTextWholeWord filters the substring matches produced by SearchLoadedPageText down to those that sit on word boundaries (the glyph before the match start and after the match end must not be a word character), providing whole-word matching without padding the search string with a trailing space
  • GetLoadedSearchHitRect collapses a match’s glyph range into a single bounding rectangle (user-space Left/Top/Right/Bottom, padded by a fraction of the font size), so a viewer can draw one highlight box per hit instead of walking the glyph array

Version 2.339.0

Added

  • ExtractLoadedPageTextColumns reconstructs multi-column text: glyphs are clustered into baselines by a Y tolerance, each row is sorted by X, and a row splits into separate columns (tab-separated) wherever the gap between consecutive glyphs exceeds a configurable multiple of the median glyph advance — the column-aware counterpart to ExtractLoadedPageTextLayout that previously declared column detection out of scope
  • THPDFPageElement now carries a BaselineRole (brNormal / brSuperscript / brSubscript) populated by EnumLoadedPageElements: a run whose font size is markedly smaller than the page median and whose Y origin sits above or below the dominant baseline is flagged

Version 2.338.0

Fixed

  • Image XObjects are now placed by transforming the unit square through the current CTM, instead of being stretched across the whole page bitmap — the previous StretchDraw(Rect(0,0,W,H)) misplaced every image on the page; images now land in the rectangle the content stream actually specifies

Added

  • /ImageMask stencil images are detected on the render side and painted with the current fill colour (PDF 8.9.6.1), where the renderer previously drew them as a plain greyscale bitmap

Version 2.337.0

Added

  • Render-side stroke style: the page renderer now honours the J (LineCap: butt/round/square), j (LineJoin: miter/round/bevel), M (MiterLimit) and d (LineDash array + phase) operators by building a geometric pen via ExtCreatePen instead of the previous fixed CreatePen(PS_SOLID, ...), so rounded joins, dashed borders and square end caps render correctly
  • Render-side gs (ExtGState) operator: the named ExtGState dictionary in /Resources/ExtGState is now consumed for LW / LC / LJ / ML / ca / CA and applied to the graphics state, where the renderer previously dropped the operator entirely
  • Graphics state extended with LineCap / LineJoin / MiterLimit / LineDash / DashPhase / FillOpacity / StrokeOpacity fields, all with PDF-default initial values

Fixed

  • Clip (W / W*) now sets the GDI polygon fill mode (ALTERNATE vs WINDING) before SelectClipPath, so even-odd and nonzero-winding clip intersections are no longer identical

Version 2.336.0

Security

  • The render-side /Indexed colour-space parser now clamps HiVal to the spec-mandated [0..255] range, closing a buffer-overread vector where a malformed HiVal let nComps × indexHigh overflow a 32-bit byte count and read past the lookup table

Added

  • AttachLoadedAnnotationMeasure writes a /Measure dictionary (PDF 1.7 §12.5.6.13) onto a Line or Polygon annotation, carrying the /NumberFormat array (unit label, decimal/fraction/round style, precision), the /Scale ratio and the /CYX isotropy factor — so a viewer can compute the real-world distance or area the shape spans

Version 2.335.0

Added

  • Render-side sh (shading) operator: axial (Type 2) and radial (Type 3) shadings are now painted instead of silently dropped, so PDFs whose backgrounds rely on Word/Excel-style gradients render their colour blend. The shading is discretised into bands along its axis and each band is filled with the colour the shading’s function evaluates to at that point

Version 2.334.0

Added

  • Render-side function-object evaluator HPDFEvalTintTransform now resolves Type 2 Exponential (C0 + xN·(C1-C0) with Domain/Range clamping), Type 0 Sampled (8/16/32-bit, Encode mapping, nearest-sample) and Type 3 Stitching (Bounds-selected sub-function recursion) — so Separation / DeviceN tint transforms and shading functions evaluate to real alternate-space colours instead of the v2.333.0 grey fallback. Type 4 PostScript calculators degrade gracefully
  • The page renderer now wires the colour-space unit’s indirect-ref resolver and decoded-stream reader to its document access at construction time, so tint-transform stream objects can be decoded through the same path as image XObjects

Version 2.333.0

Added

  • Render-side CIE-based colour spaces: CalGray, CalRGB (gamma + 3×3 matrix) and Lab (Lab→XYZ→sRGB with the 6/29 breakpoint cube) now resolve to real colours instead of degrading to black; the Bradford-adapted sRGB matrix is cached per white point so per-pixel work stays a single 3×3 multiply
  • Render-side ICCBased colour space resolves through its /Alternate (or an N-based DeviceRGB/Gray/CMYK guess when Alternate is absent), so pages carrying an ICC profile display correctly without an lcms dependency
  • Render-side Separation and DeviceN spot-colour spaces: the alternate space, tint-transform function reference and component count are parsed; the tint transform is wired through a pluggable evaluator so spot-colour pages are distinguishable from “colour not set” (full tint evaluation lands with the function engine)
  • Generic colour operators cs / CS / sc / SC / scn / SCN now handled by the page renderer, the prerequisite for every non-Device colour space to take effect on a loaded page
  • Unified colour resolution through HPDFResolveColor with the extended THPDFColorSpaceFamily and THPDFCIEParams records, replacing the per-space ad-hoc logic

Version 2.332.0

Added

  • RenderSignatureFieldAppearance paints a preset signature-field appearance template — border, light fill and up to four labelled text lines (“Digitally signed by <Name>”, “Reason: ”, “Location: ”, “Date: ”) — selected via a THPDFSignatureDisplayOptions set as a convenience wrapper around AttachSignatureFieldAppearance
  • EnumerateSystemCertificates walks a Windows certificate store (typical MY / ROOT / CA) via dynamically loaded Crypt32.dll and returns subject / issuer display names plus the raw DER for each certificate, the building block for a “pick a certificate / USB Key” signer UI

Security

  • Signature hash algorithm is SHA-256 by default with PAdES Seed Value DigestMethods already accepting SHA-256 / SHA-384 / SHA-512, so no SHA-1 signing path exists

Version 2.331.0

Added

  • RenderLoadedPageToDC draws one page straight into a caller-supplied device context (printer canvas, off-screen surface, custom TCanvas), removing the bitmap round-trip for print and high-DPI workflows
  • RenderLoadedPageToClipboard places a page on the clipboard either as a 24-bit bitmap or as an enhanced metafile (vector text), so paste-into-Word / paste-into-image-editor just works
  • PrintLoadedDocument with a THPDFPrintOptions record drives the VCL TPrinter through a page range, DPI, copies, collation, FitPage scaling and per-page render — the document library now ships its own print path instead of leaving every caller to wire one up

Version 2.330.0

Added

  • GetLoadedPageLabel reads back the /PageLabels /Nums range that covers a given page index, returning the style code, prefix and start number — the read counterpart to SetLoadedPageLabel, so labels a caller did not create itself can now be inspected and round-tripped
  • StitchLoadedPageSideBySideEx performs the side-by-side 2-up stitch with a configurable horizontal gutter and source-page scale factor, where the legacy StitchLoadedPageSideBySide was fixed to half width with no gap

Version 2.329.0

Added

  • AddLoadedRubberStampAnnotation with a THPDFRubberStampIcon enum covering all 14 standard stamp names (Approved, AsIs, Confidential, Departmental, Draft, Experimental, Expired, Final, ForComment, ForPublicRelease, NotApproved, NotForPublicRelease, Sold, TopSecret) so viewers render the familiar bitmaps without a custom appearance stream
  • SetLoadedAnnotationCloudyBorder turns a Square / Circle / Polygon annotation into a cloudy (cloud-burst) border by writing /BE /S /C /I plus the /IC interior colour array
  • SetLoadedLineAnnotationCaps sets the /LE line-end (arrowhead) styles for Line / Polyline annotations from the new THPDFLineEndStyle enum (None / OpenArrow / ClosedArrow / Butt / ROpenArrow / RClosedArrow / Slash / Diamond)

Version 2.328.0

Added

  • EnsureLoadedFieldAppearanceStream generates a /AP /N Form XObject for an existing AcroForm field from its /DA + /V + /Rect, so viewers that ignore /NeedAppearances still render the field value without a round-trip through Acrobat
  • ApplyLoadedFieldValidation attaches a Format / Keystroke / Validate script trio to a field using the Acrobat AF* helpers, covering Number, Percentage, Date, Time, Currency, ZipCode, SSN, Phone and ArbitraryMask input kinds — the caller no longer has to hand-write AFNumber_Format / AFDate_FormatEx / AFRange_Validate JavaScript
  • ApplyLoadedFieldCalculation attaches an AFSimple_Calculate script so a field aggregates the values of a named source field set via Sum / Average / Product / Minimum / Maximum

Version 2.327.0

Added

  • Visual search-and-replace SearchAndRedactReplaceLoaded: for every hit of the needle it masks the match rectangle with a chosen colour (or skips the mask with HPDF_NO_MASK) and stamps the replacement text on top, complementing the byte-level ReplaceLoadedPageText when the original font lacks a reverse char-code table or the replacement needs a different font
  • Region text extraction GetLoadedPageTextInRegion concatenates every glyph whose origin falls inside a user-space rectangle, with newlines between baselines — the building block for “copy text from this box” UI flows
  • Cursor-style SearchLoadedFirst returns the first match as a single THPDFTextMatch, so callers can walk hits without managing a whole match array

Version 2.326.0

Added

  • Document-wide MeasurementUnit property (muPoints / muPixels / muInches / muMM / muCentimeters / muTwips) so every high-level authoring coordinate is converted to PDF points through ToPDFUnit / FromPDFUnit
  • Placeholder substitution in watermark text: <%PageNo%>, <%TotPage%>, <%FileName%>, <%ShortDate%>, <%LongDate%>, <%ShortTime%>, <%LongTime%> are resolved per page when stamping, so “Page X of Y” and dated stamps are one call
  • AddTextWatermarkEx page method that combines placeholder substitution, unit-aware coordinates and a unified THPDFWatermarkBase record (angle, opacity, position presets)
  • Shape-watermark page helpers AddRectangleWatermark, AddEllipseWatermark, AddLineWatermark and AddPolygonWatermark, each wrapping the path primitives in a q/Q graphics-state pair with registered fill/stroke alpha
  • Unified THPDFWatermarkTemplate record with MakeText / MakeRectangle / MakeEllipse / MakeLine / MakePolygon factories plus a THPDFWatermarkTemplateArray composite type
  • Loaded-document watermarking: StampLoadedPageText and StampLoadedPagesText append a transparent, rotated text run to existing pages, honouring the MeasurementUnit and the same placeholder set; StampLoadedPagesComposite applies a whole template array (text + shapes) to a page range
  • Z-order control on loaded-document stamps: Underlay = True prepends the watermark stream before the existing /Contents via the array form, so the watermark renders behind the page content
  • EnumLoadedPageElements returns text runs (glyphs aggregated by baseline + font) and image XObject placements as THPDFPageElement records with bounding boxes
  • SaveLoadedPagesAsImages multi-format export: BMP / JPEG / PNG raster plus EMF / WMF vector, one file per page, with configurable DPI, file-name prefix and JPEG quality
  • GetLoadedPageMetafile vector render of one page to a TMetafile via the new THPDFPageRenderer.ExecuteToDC path, keeping text and vector paths scalable for print, clipboard and merge workflows

Version 2.325.3

Fixed

  • Aggregating batch preflight reports no longer overflows the total-bytes count when a single input file is over 2 GB

Version 2.325.2

Fixed

  • Saving a document over 2 GB with object streams enabled (UseObjectStreams) no longer writes a corrupted cross-reference stream; the object offsets and cross-reference stream position, previously narrowed to a 32-bit integer, are now carried as 64-bit values through the whole write

Version 2.325.1

Fixed

  • Four recovery-only scans used when a damaged PDF cannot be parsed normally — object-stream decompression, object-stream discovery, and two reference-repair passes — no longer read a file over 2 GB into a truncated buffer; each now skips that fallback on such a file instead of scanning corrupted data

Version 2.325.0

Added

  • EMF/WMF import now renders EMR_GRADIENTFILL rectangle gradients (GRADIENT_FILL_RECT_H / GRADIENT_FILL_RECT_V) as PDF Type 2 axial shading patterns, mapping each TRIVERTEX colour pair to an RegisterAxialGradient call and filling the rectangle with the resulting pattern; previously this record was a documented no-op, now Word/Excel/PowerPoint gradient rectangles in EMFs render with the correct left-to-right or top-to-bottom colour blend

Version 2.324.0

Added

  • EMF/WMF import now parses EMR_GDICOMMENT comments, distinguishing Adobe PDF passthrough markers (0x416F4650 = "AoFP", MS-EMF §2.3.3) from other comment types. When the Adobe marker is present the comment payload is scanned for the pdfmark keyword and surfaced via debug logging so users can identify which EMF producers emit PostScript pdfmark fragments; other comment types remain no-ops. Both HotPDF and llPDFLib previously carried only an empty stub for this record

Version 2.323.0

Added

  • EMF/WMF import now explicitly recognises EMR_GRADIENTFILL as a documented no-op (PDF Type 2/3 shading patterns could express gradient fills but viewer rendering is inconsistent and GDI's per-pixel Gouraud interpolation does not map cleanly); previously this record was silently dropped without a case-table entry

Version 2.322.0

Changed

  • PFX-based signing now routes inputs of 64 MB or larger through a streaming chunked signer (HPDFCMSSignPDFStreamChunked) that scans for the /ByteRange + /Contents placeholders in 256 KB rolling reads, digests the two byte-range windows via HPDFCMSSHA256StreamRanges, then copies the input stream to the output stream while patching the placeholder bytes in flight, so peak memory stays bounded by the 256 KB buffer instead of the entire file size; smaller inputs keep the fast in-memory Pos() + Move() path unchanged

Version 2.321.0

Added

  • Optional-content group usage dictionaries: SetOptionalContentGroupUsage attaches a /Usage entry to a registered OCG (PDF 1.7 §8.11.4.4 Table 100) so viewers auto-show/hide layers by context. Categories View / Print / Export write <Category>State = ON/OFF; Zoom writes a real-pair Min; Language / Creator write string values
  • Outline subtree copy: THPDFDocOutlineObject.CopySubtree deep-clones the entire child subtree of a node under a new parent, propagating Title / Color / Bold / Italic / Opened while minting fresh object numbers and new destinations
  • Outline topology helpers IsDescendant (cycle-safe predicate used by MoveTo) and MoveTo (re-parent a node, detaching from its old sibling chain and re-attaching as the last child of the new parent, with full /Prev / /Next / /First / /Last / /Count maintenance on every affected ancestor)

Version 2.320.0

Added

  • Nested optional-content /Order tree: BeginOptionalContentOrderGroup / AddLayerToOptionalContentOrder / EndOptionalContentOrderGroup build a labelled, arbitrarily nested presentation tree (PDF 1.7 §8.11.4.3 /Order) so the layers panel can show hierarchical groupings like "Background [Lines Fills Images]" instead of the historical flat list. When none of the new helpers are called the previous flat /Order mirroring /OCGs is preserved byte-for-byte

Version 2.319.1

Fixed

  • Loading a PDF whose embedded JBIG2 image uses the standard Huffman coding option (rather than the more common MQ arithmetic coding) no longer fails outright: the loader now retries with the alternate decoding engine before giving up, so such images load successfully regardless of which decoding engine is preferred

Version 2.319.0

Changed

  • EMF/WMF import now applies a centralised InPath gate at the ExecuteRecord entry: while a path bracket is open (BeginPath seen, EndPath/AbortPath not yet reached) only path-construction records (line/curve/polygon/move/close/end/abort plus the coordinate-system and DC-state records) reach their handlers; text and bitmap records that previously leaked into the open path are now dropped centrally, mirroring llPDFLib's entry-point guard and eliminating a class of malformed-PDF bugs from stray records inside a path bracket

Version 2.318.0

Added

  • Optional-content radio-button groups: new RegisterOptionalContentRadioGroup declares mutually exclusive layer sets whose members turn each other off (PDF 1.7 §8.11.4.3 /RBGroups); typical use is single-choice layer panels like "Draft / Review / Final"

Version 2.317.0

Added

  • THPDFDocOutlineObject.InsertBefore / InsertAfter splice a new sibling into the existing outline doubly-linked list at an arbitrary position, complementing the existing AddChild (append) and AddChildFirst (prepend) helpers so outline trees can be built in any order without detaching and re-attaching nodes
  • EMF/WMF import now explicitly recognises the ICM/palette family (EMR_SETBRUSHORGEX, EMR_SELECTPALETTE, EMR_SETCOLORADJUSTMENT, EMR_SETICMMODE, EMR_CREATECOLORSPACE, EMR_SETCOLORSPACE, EMR_DELETECOLORSPACE, EMR_GDICOMMENT) and the no-PDF-mapping family (EMR_FRAMERGN, EMR_INVERTRGN, EMR_PAINTRGN, EMR_FLATTENPATH, EMR_WIDENPATH, EMR_SETMETARGN, EMR_OFFSETCLIPRGN, EMR_PLGBLT, EMR_POLYTEXTOUTA, EMR_POLYTEXTOUTW), forwarding to the GDI reference DC where applicable without emitting to the PDF content stream; previously these records were silently dropped, now they are documented and kept consistent with the GDI side

Version 2.316.0

Added

  • New JBIG2Benchmark demo generates four PDFs from the same three-page synthetic scan, one per THPDFJBIG2Options configuration (per-image lossless, per-image LossyLevel=5, cross-page accumulated globals, rectangle symbol extraction), printing each output size so the trade-offs between the v2.310.0 scan-friendly defaults, the v2.314.0 cross-page accumulator, and the extraction modes can be compared directly

Version 2.315.0

Changed

  • The cross-page accumulated JBIG2 dictionary now auto-batches: once the running glyph-width total crosses 131071 pixels the current dictionary is frozen, emitted as one /JBIG2Globals stream, and the accumulator is reset, so the next batch starts a fresh globals stream. Mirrors llPDFLib's TotalWidth-based spilling and keeps individual globals streams at a size readers handle efficiently on very large scan runs

Version 2.314.0

Added

  • Cross-page accumulated JBIG2 symbol dictionary: opt in with THPDFJBIG2Options.AccumulateGlobalsAcrossPages := True (alongside the existing UseSymbolDictionary + UseGlobalSegments + native fallback switches) and consecutive 1-bit icJBIG2 images share one growing in-memory symbol dictionary and one /JBIG2Globals indirect stream, instead of each image emitting its own dictionary. New THPDFJBIG2SymbolDictionary holds the persistent glyph set with the same lossy / lossless matching the per-image encoder uses; new smoke_jbig2_accum_decode verifies two pages of different glyph layouts share a single globals object reference and decode back to the source pixels bit-for-bit

Version 2.313.0

Added

  • JBIG2 global-segment streams produced by the native symbol-dictionary encoder are now content-addressed at the document level via THPDFJBIG2GlobalsPool, so images that yield byte-identical globals share one /JBIG2Globals indirect stream instead of each emitting their own; new smoke_jbig2_globals_multi smoke covers three pages of identical glyphs collapsing onto a single shared globals stream

Version 2.312.0

Added

  • EMF/WMF import now covers EMR_SCALEVIEWPORTEXTEX, EMR_SCALEWINDOWEXTEX, EMR_EXCLUDECLIPRECT, EMR_CREATEDIBPATTERNBRUSHPT, EMR_SETMITERLIMIT, EMR_SETTEXTJUSTIFICATION, and EMR_SETROP2, closing the seven-record gap with llPDFLib so EMF streams emitted by older GDI toolchains no longer silently drop those records; SETMITERLIMIT and SETROP2 take effect immediately, while the others store state for a later render-side hookup without perturbing current coordinate or clip output

Version 2.311.0

Added

  • HPDFCMSSHA256StreamRanges now digests the two PDF /ByteRange windows straight from a TStream in 256 KB chunks, so multi-GB signed PDFs can be hashed without first copying the whole file into an AnsiString; closes the gap with llPDFLib's stream-based CalcHash, which the existing in-memory HPDFCMSSHA256ByteRanges could not match for very large inputs

Version 2.310.0

Changed

  • THPDFJBIG2Options now defaults to scan-friendly settings (LossyLevel = 5, RemoveIsolatedBlackPixels = True, BlackDotSize = 3) so 1-bit scanned images compress much smaller out of the box; set LossyLevel = 0 or Lossless = True to restore strict lossless matching

Performance

  • xref table growth is now geometric (small documents +N, larger documents +25%) instead of reallocating the dynamic array on every indirect object, removing the O(n²) cost that dominated loading and building large PDFs with many objects

Version 2.309.4

Added

  • Added THPDFDocOutlineObject.AddChildFirst so generated outline nodes can prepend a child item before existing siblings while preserving the saved outline order

Version 2.309.3

Added

  • Added pmUseOC to THPDFPageMode so generated documents can request the optional-content layers panel with catalog /PageMode /UseOC

Version 2.309.2

Added

  • Added title-string overloads for THPDFPage.AddTextAnnotation so generated text annotations can write the PDF /T title or author entry while preserving the existing icon, color, and open-state arguments

Version 2.309.1

Fixed

  • Clearing THotPDF.OutputStream by assigning nil now restores normal FileName output instead of leaving the document in stream-output mode

Version 2.309.0

Fixed

  • EMF/WMF import now honors EMR_EXTSELECTCLIPRGN region modes for copy, intersect, and exclude clipping while keeping EMR_SETWORLDTRANSFORM, EMR_MODIFYWORLDTRANSFORM, and EMR_SETPIXELV covered by non-GUI regression tests

Version 2.308.0

Added

  • FastReport add-on design-time registration now ships as frxHotPDFDesign, placing TfrxHotPDFExport on the FastReport VCL palette while keeping the existing runtime unit and Register entry point available for compatibility

Version 2.307.0

Added

  • SignPDFWithPFX now parses legacy PKCS#12 PBE-SHA1-3DES encrypted PFX files in addition to PBES2 AES-256-CBC profiles

Version 2.306.0

Changed

  • Repeated calls that add the same encoded image now reuse the existing PDF image XObject while preserving distinct output for different JPEG quality settings and mask relationships

Version 2.305.0

Added

  • TfrxHotPDFExport.PageRange now lets FastReport exports opt in to one-based page filtering such as 1,3-5 while reusing HotPDF's shared page-range parser

Version 2.304.0

Fixed

  • XFA-to-AcroForm table flattening now lets all-growable single auto columns inherit the table content width, so fields without their own w still receive a measurable width and preserve row spacing

Version 2.303.0

Fixed

  • XFA-to-AcroForm table flattening now lets growable text cells inherit fixed columnWidths values when they omit their own w, so row heights are measured and following rows stay separated

Version 2.302.0

Fixed

  • XFA-to-AcroForm flattening now measures growable text fields inside nested layout="tb" and wrapped layout="lr-tb" flows, and table rows now keep growable text-cell height when positioning following fields

Version 2.301.0

Fixed

  • XFA-to-AcroForm flattening now keeps text fields in layout="tb" and layout="lr-tb" flow containers when they omit an explicit h height, measuring their wrapped content height instead of skipping them as unsupported growable layout

Version 2.300.0

Fixed

  • THotPDF.ExtractObjectFromStream now returns the parsed dictionary for materialized object-stream members and no longer fabricates raw-data diagnostic keys when callers inspect loaded PDF 1.5+ object streams

Version 2.299.0

Added

  • THotPDF.DecompressAllObjectStreams is now public and forces loaded PDFs that used object streams to save with compact objects materialized as normal indirect objects instead of copying the source object-stream layout

Version 2.298.0

Fixed

  • AcroForm field creation now rejects duplicate root field names for both new documents and loaded-document editing while preserving the valid shared-parent workflow for radio button groups

Version 2.297.0

Added

  • TDBGridHotPDFExportOptions and the TDBGridHotPDFExport component now expose PDFACompliance and PDFXCompliance so DBGrid table exports can opt in to the same HotPDF standards-conformance gates used by direct document generation

Version 2.296.0

Added

  • TQRHotPDFExportFilter and TdxHotPDFExportOptions now expose PDFACompliance and PDFXCompliance so QuickReport and DevExpress exports can opt in to the same HotPDF standards-conformance gates used by direct document generation

Version 2.295.0

Added

  • TfrxHotPDFExport and TppHotPDFDevice now expose PDFACompliance and PDFXCompliance so report exports can opt in to the same HotPDF standards-conformance gates used by direct document generation

Version 2.294.0

Added

  • Form XObject and tiling pattern canvas builders now let callers compose reusable resources through typed drawing helpers before registering them for page reuse
  • THPDFExtGStateOptions now lets one ExtGState combine transparency, blend mode, line width, line cap, line join, and miter limit settings

Version 2.293.0

Added

  • Native JBIG2 encoding now supports symbol-dictionary compression with optional shared global dictionaries, rectangle and image-only extraction modes, lossy pixel-difference guards, and PDF/A fallback to CCITT where JBIG2 is not permitted
  • EMF/WMF rendering now handles TransparentBlt and MaskBlt bitmap records through PDF image mask and transparency paths
  • FastReport and ReportBuilder native export modes now cover more object-level output, including styled memo/rich text, barcode, picture, vector shape, line, clipping, frame, dash, and URL annotation paths
  • The HugeFileBenchmark demos now report working-set and peak-working-set metrics, support an opt-in memory limit, and keep generated work files separate from report output
  • The Delphi PDFOptimize demo now documents producer-side compression choices for content streams, object streams, JPEG quality, CCITT, and JBIG2 output

Fixed

  • Demo coverage checks now include English-baseline demo READMEs, map consolidated C++Builder samples to their actual files, and keep GUI demos disabled by default in routine test runs

Version 2.292.32

Added

  • EMF/WMF hatch brushes now map to PDF tiling patterns so imported CAD drawings and reports can preserve hatch texture instead of flattening those fills to solid color

Fixed

  • Loaded-document dictionary edits now mark objects dirty so SaveLoadedDocument rewrites changed PDFs instead of copying the original source after outline and object-tree edits
  • Loaded outline removal now relinks sibling bookmarks, and non-rotated underline and strikeout text decorations now emit filled rectangle operators

Version 2.292.31

Added

  • THPDFEmfOptions.ShowNullBrush now lets EMF/WMF rendering expose null-brush fills for diagnostic and CAD-style import workflows while preserving unfilled null brushes by default

Version 2.292.30

Added

  • THPDFEmfOptions.CanvasOver now lets page Canvas replay place existing PDF content above the parsed Canvas metafile while the default keeps the current Canvas-on-top order

Version 2.292.29

Added

  • THPDFEmfOptions.Redraw now lets EMF/WMF callers keep the default temporary redraw path or opt out and parse the original metafile directly

Version 2.292.28

Added

  • THPDFEmfOptions.UseFrame now lets EMF/WMF rendering clip imported output to the EMF header frame for metafiles that rely on declared frame bounds

Version 2.292.27

Added

  • THPDFEmfOptions.ShowNullPen now lets EMF/WMF rendering expose null-pen outlines for diagnostic and CAD-style import workflows while preserving invisible null pens by default

Version 2.292.26

Added

  • THotPDF.SetFormFieldTooltip now lets applications assign AcroForm /TU field hints by field name for widgets created through the existing Add... field methods

Version 2.292.25

Fixed

  • TfrxHotPDFExport native-object mode now preserves TfrxPictureView clipping and frame rendering when picture views are written directly as HotPDF image XObjects

Version 2.292.24

Added

  • TfrxHotPDFExport native-object mode now maps supported horizontal one-dimensional FastReport barcode views directly to HotPDF barcode operators, while keeping human-readable text, checksum generation, supplemental text, rotation, colored bars, and unsupported symbologies on the existing fallback path

Version 2.292.23

Added

  • TppHotPDFDevice native draw-command mode now maps supported one-dimensional ReportBuilder barcode draw commands directly to HotPDF barcode operators, while preserving the enhanced-metafile fallback for commands that need human-readable text, add-on codes, check-digit calculation, colored bars, rotation, or unsupported postal symbologies

Version 2.292.22

Fixed

  • Automatic PDF viewer launch can now be suppressed in non-interactive runs with HOTPDF_SUPPRESS_AUTO_LAUNCH=1, and the bundled test and smoke runners enable that guard by default so non-GUI regression runs do not open viewer windows

Version 2.292.21

Added

  • THPDFPage.ShowMetafileEx now has a per-call THPDFEmfOptions overload, letting callers override EMF/WMF rendering settings for one metafile draw while preserving document-level defaults