Примітки до випусків PDFlibPas
Історія випусків
« Назад до індексу документації
Історія версій для видимих користувачу функцій PDFlibPas, виправлень, покращень PDF, змін сумісності та змін документації
Останній випуск
- Найновіша версія: v3.75.6; Дата випуску: 2026-06-23
Version 3.333.0
Added
- Інспекція інкрементних редакцій. Підпис покриває байти редакції, у яку її записано, а все додане згодом є окремим оновленням, чиї дані вирішують, чи залишається підпис чинною для документа в його поточному вигляді.
GetDocumentRevisionCount,GetDocumentRevisionStartіGetDocumentRevisionEndрозташовують ці редакції, аGetSignatureRevisionIndexвказує, на якій із них підпис завершується GetDocumentRevisionKindповідомляє, що зробило оновлення, як найістотніше з об'єктів, яких воно торкнулося: облікові дані, матеріал перевірки, мітку часу документа, підпис, поле форми, анотацію чи вміст документа. Тому додавання матеріалу перевірки для довготривалої перевірки більше не виглядає як редагування документаGetDocumentRevisionChangesперераховує кожен об'єкт, який оновлення додало, змінило чи видалило, разом із тим, чим є кожен із них, а для зміненого словника — які ключі фактично відрізняютьсяGetDocumentRevisionsCompleteповідомляє, чи вдалося відновити всю історію. Ланцюг, який розірваний, циклічний чи довший, ніж простежить засіб читання, залишає найстаріші оновлення непоміченими, і тоді лічильники є нижньою межею, а не відповіддю- Об'єкт, раніша версія якого не може бути прочитана чи тіло потоку якого ніколи не порівнювалося, повідомляється як невизначений, а не як безпечний: оновлення, що переписує сторінку, але залишає її словник недоторканим, не приймається за перепакування
Version 3.332.0
Added
ApplyPAdESLongTermValidationпідвищує вже підписаний PDF до PAdES-B-LT за один виклик. Він будує шлях сертифікатів підписанта з самої підпису, збирає матеріал OCSP і CRL для кожної ланки через адреси, названі сертифікатами, і записує сертифікати та дані про відкликання у сховище безпеки документа з записом VRI для підпису в межах одного інкрементного оновлення.ApplyPAdESLongTermValidationToStreamзаписує результат у потік замість файлу- Поведінку можна налаштувати через маску параметрів
PADES_LTV_*: чи писати запис VRI, чи опитувати OCSP-відповідачі, чи відкатуватися до CRL, чи переходити за адресами видавців для завершення шляху та чи пропускати відкликання для самовиданого кореня - Порожнє ім'я поля обробляє кожну підпис у одну редакцію; іменоване поле обробляє лише вказану
GetPAdESLTVCertificateCount,GetPAdESLTVCRLCount,GetPAdESLTVOCSPCountіGetPAdESLTVErrorповідомляють, що зібрав останній виклик і чому він передчасно зупинився, тому частковий результат через недосяжного відповідача видно, а не прихований- Матеріал, ідентичний уже підготовленому, записується один раз і посилається кожною підпису, якій він потрібен, а підпис без читабельного сертифіката повідомляється, а не видається за успішне підвищення
Version 3.331.0
Added
- Підпис містить власний шлях сертифікації, тому матеріал, необхідний профілю довготривалої перевірки, можна прочитати лише з підписаного файлу.
GetSignatureSignerCertificateDER,GetSignatureEmbeddedCertificateCountіGetSignatureEmbeddedCertificateDERповертають сертифікати, які вбудовує підпис, аGetSignatureCertificateChainLengthіGetSignatureCertificateChainDERупорядковують їх у шлях від підписанта назовні GetSignatureContentsHashHexповертає ключ, за яким адресуєтся записAddPAdESDSSVRI, обчислений із самої підпису- Сертифікат підписанта зіставляється незалежно від того, чи ідентифікує підпис його за видавцем і серійним номером, чи за ідентифікатором ключа суб'єкта, а шлях зупиняється на останньому видавці, якого підпис фактично містить, замість того, щоб удавати повноту
Fixed
- Засіб читання DER відхиляє оголошену довжину елемента, що перевищує дані, замість того, щоб дозволити майже максимальному значенню переповнити перевірку меж, а обхід розширень сертифіката більше не читає за кінцем усіченого чи занадто довгого сертифіката. Обидва шляхи досяжні зі спеціально складеного документа, тому вказані методи доступу залишаються безпечними на ненадійних вхідних даних
- Методи доступу до підпису читають документ через спільний дескриптор, тому вони відповідають, поки засіб перевірки чи перегляду вже відкрив файл, замість того, щоб завершуватися помилкою, ніби підпис відсутня
Version 3.330.0
Added
- OCSP status requests.
BuildOCSPRequestencodes an RFC 6960 request for a certificate and its issuer,FetchOCSPResponseposts it to the responder and returns the reply, andAddPAdESDSSOCSPFromCertificatesdoes both and files the result in the document security store - The responder address is optional: when it is omitted, the one the certificate itself names is used, so a caller that has the certificate chain needs no further configuration
- A certificate pair that does not actually belong together is refused before anything is sent, instead of producing the "unknown" answer such a request earns from the responder and which reads like a revocation problem
- Only a successful response is stored; a responder that answered
tryLaterorunauthorizedis reported throughGetTimeStampErrorrather than filed as if it were a status answer
Version 3.329.0
Fixed
- Reusing one result array across successive enumeration calls no longer leaks the strings held in the array slots that a later call does not fill. This affected the documented "call once for the count, resize, call again" pattern whenever a later call returned fewer items than the array could hold, and the stranded text accumulated for the lifetime of the process
- Affected entry points include
EnumPageContentStates,EnumPageContentStatesEx,EnumAttachments,EnumDocumentFonts,EnumPageElements,EnumNamedDestinations,EnumSignatures,EnumFormFields,GetFormValues,GetTextInAreaEx, and the text-search, form-field-action and certificate enumeration calls
Changed
- The result-array parameter of those calls is now passed as
varrather thanout. Existing Delphi and C++Builder code compiles and links unchanged; the only visible difference is that array slots past the returned count keep whatever they held before instead of being silently blanked
Version 3.328.0
Added
- Certificates now tell the library where their status can be checked:
GetCertificateOCSPURLs,GetCertificateIssuerURLsandGetCertificateCRLURLsread the responder, issuing-certificate and CRL addresses out of a certificate, so assembling long-term validation material no longer requires knowing where a given authority publishes FetchRevocationMaterialdownloads material from those addresses, andAddPAdESDSSCRLFromURLandAddPAdESDSSCertificateFromURLdownload and file it in the document security store in one step- Addresses that name no fetchable resource, such as a directory name or a mail address, are skipped rather than reported as something that can be downloaded
Version 3.327.0
Added
- A built-in RFC 3161 time-stamp client.
SetTimeStampServerandSetTimeStampOptionsconfigure the authority, hash algorithm, requested policy, nonce use and timeout;FetchTimeStampTokenreturns a TimeStampToken for any digest ApplyPAdESSignatureTimeStampcompletes a PAdES-B-T signature in one call: it hashes the signature value, obtains the token from the configured authority and attaches it as the signature time-stamp attribute, replacing the previous three-step exchange the caller had to wire up itself- When a nonce is used the token is checked to carry the same value back, so a replayed or substituted response is rejected instead of being embedded in the document
GetTimeStampStatusandGetTimeStampErrorreport the authority's own status and failure text, so a refused request explains itself
Version 3.326.0
Added
- The PDFium renderer now writes the same image formats the GDI+ and Cairo renderers write.
RenderPageToFile,RenderPageToStreamandRenderPagesToFilesaccept BMP (option 0), JPEG (1), PNG (5), GIF (6), TIFF (7) and G4 TIFF (10) afterSelectRenderer(3), instead of accepting BMP alone - The JPEG quality set through
SetJPEGQualityand the active TIFF compression settings now apply to PDFium output as well, so switching renderers no longer changes the encoding of the file that is produced
Fixed
- Requesting PNG or any other non-BMP format from the PDFium renderer used to return 0 and leave an empty file behind. Applications that offered a renderer choice silently produced unreadable output whenever PDFium was the selected engine
- Asking the PDFium renderer for a metafile format it cannot produce (WMF, EMF, EPS, EMF+, HTML5) now reports which formats are available through
LastRenderErrorinstead of naming BMP as the only option
Version 3.324.0
Changed
- The PDFium renderer now feeds the document to the engine through a streaming data source instead of one resident buffer. Rendering and printing previously serialised the document and then copied it again into a string, so every page cost twice the document size in memory; the copy is gone and PDFium reads only the blocks it needs
- Rendering a page range to files parses the document once for the whole batch instead of once per page, so a long range no longer re-reads the entire file for every image it writes
- Older PDFium builds that do not export the streaming entry point keep working unchanged through the in-memory path
Fixed
- The renderer smoke test located the optional PDFium and Cairo libraries one directory too high and silently skipped both engines; it now finds them and exercises the real rendering paths
Version 3.323.0
Added
CreateValidationReportіSaveValidationReportформують структурований звіт про перевірку відповідності PDF/A та PDF/UA-1 у форматі XML або JSON. Кожна знахідка містить ідентифікатор правила, стандарт, якому воно належить, коротку назву правила, пункт ISO, який воно забезпечує, рівень серйозності та кількість залучених об'єктів, а звіт завершується підсумками «пройдено/не пройдено» за кожним стандартом і за документом загалом- Стандарт, який не було запитано, відображається як
not-checked, а не як мовчазне проходження, тому частковий прогін неможливо сплутати з чистим результатом - Збіркові конвеєри тепер можуть спиратися на ідентифікатор правила або пункт ISO замість зіставлення підрядків у тексті: сімейство звітів preflight спершу будує звіт для людини і перетворює цей текст на JSON, HTML або CSV, тоді як звіт про перевірку збирається безпосередньо з вихідних даних перевірок і зберігає машинно-читані поля без змін
Version 3.322.0
Added
- Довідник тепер документує чотири зовнішньо оголошені публічні типи, що використовуються в усьому інтерфейсі
TPDFlib, для яких раніше не було окремої сторінки:TPDFlibProgressEvent,TPDFlibLogger,TPDFlibCertificateInfoіTPDFlibWatermarkBase, що завершує охоплення публічних типів подій, логера, результату-переліку та водяних знаків
Version 3.321.0
Added
CheckDocumentPolicyоцінює декларативні внутрішні правила видуFonts.NotEmbedded = 0,Security.Encrypted = noабоDocument.Pages <= 500щодо документа і повідомляє про кожне правило про проходження або збій із фактичним значенням, перетворюючи контроль прийому документів для видавництв, архівів і друкарень на конфігурацію замість рукописного коду перевірки
Version 3.320.1
Fixed
- Малювання тексту в режимі PDF/A без попереднього завантаження шрифту більше не викликає збій: PDF/A вимагає вбудовування кожної шрифтової програми, тому неявний перехід на вбудований шрифт відхилявся і не залишав обраного шрифту, а
DrawTextта інші текстові виклики завершувалися аварійно замість малювання - Шлях неявного шрифту тепер підбирає реальний шрифт, придатний для вбудовування, доки активний режим PDF/A, тому текст, намальований без явного виклику
AddTrueTypeFont, вбудовується і залишається відповідним стандарту; прямий викликAddStandardFontусе одно відхиляється в режимі PDF/A - На вузлах, де неможливо підібрати шрифт для вбудовування, малювання відкочується на вбудовані метрики замість збою і повідомляє про порушення відповідності через
LastErrorCode605, тож файл можна перехопити до публікації як відповідний
Version 3.320.0
Added
GetDocumentFeatureReportповертає структурований звіт про властивості за один виклик — метадані документа, кількості сторінок та об'єктів, стан шифрування, інвентарні списки шрифтів і зображень, розмітка та закладки, поля форм, підписи, вкладення та побайтовий розподіл за категоріями — замість десятків окремих запитів, які каталогізаторському або приймальному конвеєру раніше доводилося збирати вручну
Version 3.319.0
Added
SetCollectionView,AddCollectionField,SetCollectionSortіSetCollectionItemValueбудують PDF-портфелі поверх наявних вкладень, тому набір вбудованих файлів постає як портфель, що переглядається, із власними стовпцями, порядком сортування та значеннями для кожного файла замість простого списку вкладеньGetCollectionViewіGetCollectionFieldCountповідомляють режим подання та кількість оголошених стовпців завантаженого портфеля
Version 3.318.1
Fixed
- Опція 12 видобуття тексту (ігнорувати повернутий текст) тепер відкидає повернуті фрагменти незалежно від напрямку повороту: чверть оберту за годинниковою стрілкою та чверть оберту проти годинникової стрілки раніше оброблялися по-різному, тому бічні нотатки на полях відкидалися в одному напрямку і поверталися в іншому
- Та сама опція зберігає похилий текст, який лише зсунуто, наприклад синтетичний курсив, а допуск тепер масштабується з розміром тексту і трансформацією сторінки, тому великі похилі заголовки більше не відкидаються як повернуті
Version 3.318.0
Added
DecodeAllStreamsрозгортає стиснені потоки документа на місці, тому збереження дає копію, чиї потоки вмісту, метадані та структуру можна читати безпосередньо інструментами порівняння, експертного аналізу та супроводу; зображення, потоки з передбаченням і потоки перехресних посилань зберігають своє кодування, а потоки об'єктів спершу матеріалізуються, так що нічого не втрачається
Version 3.317.0
Added
SetTrappedіGetTrappedоголошують і зчитують стан трепінгу документа, необхідний для PDF/X, записуючи його як ім'я/Trapped, як передбачає специфікація, а не як текстовий рядокSetOutputIntentSubtypeіGetOutputIntentSubtypeпереозначують підтип вихідного профілю, тому завантажений кольоровий профіль може описувати друкарську умовуGTS_PDFXзамість архівної умовиGTS_PDFA1, яку створюють режими PDF/A
Version 3.316.0
Added
SetEncryptEmbeddedFilesOnlyіGetEncryptEmbeddedFilesOnlyобмежують AES-шифрування вбудованими файлами: документ відкривається і відображається в будь-якому переглядачі без запиту пароля, тоді як вкладення залишаються зашифрованими — стандартна домовленість для рахунків-фактур, медичних карт і матеріалів справ, у яких титульні сторінки відкриті, а вміст — ні
Version 3.315.0
Added
- Опція 18 видобуття тексту повертає фрагменти, намальовані під кутом 90, 180 або 270 градусів, у горизонтальну систему читання і групує кожну чверть оберту окремо, тому повернуті нотатки на полях, заголовки таблиць і підписи осей діаграм видобуваються як читабельні рядки, а не перемішуються з прямим текстом або відкидаються
Fixed
DASetTextExtractionOptionsприймає опцію 16 (видалення переносів) і опцію 17 (розбиття слів за міжсимвольними проміжками) замість того, щоб їх відхиляти, а шлях прямого доступу тепер передає видобувачу опції 15, 16 і 17, тому видалення ліній підкреслення, розшифровка переносів і розбиття за проміжками застосовуються до дескрипторів файлів так само, як і до завантаженого документа
Version 3.314.0
Added
GetFontHasToUnicodeповідомляє, чи містить обраний шрифт відображення Unicode, а інвентарний список шрифтів отримує відповідне полеHasToUnicodeдля кожного шрифту та підсумокNoToUnicodeCount, тому документи можна перевіряти на наявність безпечних для видобутку та придатних для PDF/A-*u або PDF/UA шрифтів перед обробкою
Version 3.313.0
Added
SetPDFAModeотримує режим 8 для PDF/A-2u (ISO 19005-2 Level U) — рівень відповідності, який оголошує відображення тексту в Unicode, не дозволяючи вбудованих файлів, що завершує сімейство PDF/A-2 поряд із наявними режимами 2b і 2a
Version 3.312.0
Added
GetObjectByPathіGetObjectByPathCountзчитують будь-який вузол дерева об'єктів через вирази-шляхи видуRoot/Pages/Kids[0]/MediaBox[2]абоpages[0]/Type— типи, скалярні значення, серіалізовані форми та лічильники елементів за один виклик, замінюючи рукописний обхід об'єктів для вибірки метаданих, точкових перевірок відповідності та діагностичних процедур супроводу
Version 3.311.0
Added
SetBlackPointCompensationоголошує компенсацію чорної точки (ON, OFF або Default) для наступного малювання через графічний стан/UseBlackPtCompз PDF 2.0, дозволяючи кольоропробі та пробному відображенню зафіксувати темні ICC-перетворення, які раніше залежали від переглядача; версію документа підвищується автоматично, а режими PDF/A відхиляють цей стан
Version 3.310.0
Added
SetCompressionLevelіGetCompressionLevelвідкривають рівень deflate для кожного стиснення, виконуваного бібліотекою: 0 зберігає стандартний рушій із прискоренням SIMD, 1 віддає пріоритет пропускній спроможності, а 9 мінімізує розмір архівівRecompressStreamsповторно стискає deflate кожен потік зі звичайним FlateDecode обраного документа на поточному рівні і зберігає менший варіант кодування для кожного потоку, зменшуючи розміри документів, спочатку збережених із швидким налаштуванням стиснення, не зачіпаючи їхній вміст
Version 3.309.0
Added
SetObjectStreamModeіGetObjectStreamModeдодають трипозиційне керування потоками об'єктів: вимкнути, генерувати (за замовчуванням) або зберегти, де «зберегти» утримує оригінальне стиснене групування завантаженого файла'й записує контейнери дослівно, роблячи перетворення наявних файлів PDF 1.5+ дешевшими, оскільки нічого не розпаковується й не перегруповується
Changed
- У режимі збереження елементи, змінені з моменту завантаження, підвищуються до об'єктів верхнього рівня, щоб їхні зміни були збережені, а будь-який залишковий стиснений елемент автоматично обирає форму бінарного потоку перехресних посилань
Version 3.308.0
Added
CheckDocumentStructureвиконує перевірку структурного здоров'я одним викликом: кожен об'єкт і потік пропускаються через свій декодер, звичайні Flate-потоки строго звіряються з zlib-маркером кінця, щоб виявляти усічені дані, а звіт позначає відсутні трейлери, нерозв'язні каталоги та сторінки, непідтримувані обробники шифрування і файли, відновлені побайтовим скануванням, із виведенням за кожним об'єктом та підсумковим рядком
Version 3.307.0
Fixed
- Пошкоджені документи, що використовують потоки перехресних посилань, тепер успішно відновлюються: первинна реконструкція відновлює елементи стиснених потоків об'єктів, а за повної відсутності ключового слова trailer будь-де у файлі синтезує трейлер із найновішого доступного каталога документа, тому неправильне зміщення startxref більше не робить такі файли невідкриваними
Version 3.306.0
Added
ExportDocumentDataзаписує інформаційні ключі документа, усе дерево закладок і діапазони міток сторінок як редагований звичайний текст у класичному рядковому форматі dump_dataImportDocumentDataзастосовує той самий формат у зворотному напрямку — інформаційні ключі оновлюються, дерево закладок перебудовується з рівнями вкладеності та цільовими сторінками, а діапазони міток сторінок замінюються — що дозволяє масове редагування закладок і міграцію метаданих між документами одним викликом у кожному напрямку
Version 3.305.0
Added
AuditDocumentSpaceрозбиває використання байтів у документі за категоріями — зображення, шрифтові програми та словники, потоки вмісту, форм XObjects, потоки об'єктів, вбудовані файли, метадані, дерево структури, анотації, дерево сторінок та інше — із кількістю об'єктів, підсумками за байтами та відсотками, відповідаючи, чому файл має такий розмір і яка оптимізація окупається найкраще
Version 3.304.0
Added
StructTreeItemCount,GetStructTreeItemTextіGetStructTreeItemIntPropertyзчитують дерево структури розміченого документа як плоский список елементів у порядку обходу в глибину — типи елементів (вихідні та через role-map), альтернативний і фактичний текст, мова, заголовки, ідентифікатори розміченого вмісту, номери сторінок та батьківські/дочірні зв'язки
Changed
- Зчитувач дерева структури захищений від пошкоджених документів: цикли посилань, номери об'єктів поза межами діапазону та дерева з вкладеністю понад 64 рівні відсікаються замість зациклення
Version 3.303.1
Fixed
- Напівпрозорі підкладки-штампи, створювані
StampTextіStampImage, більше не пропускатимуть свою прозорість у вихідний вміст сторінки — стан прозорості тепер обмежено самим штампом, тому сторінка зберігає повну непрозорість
Version 3.303.0
Added
OverlayDocumentPagesнакладає сторінки іншого відкритого документа на сторінки обраного документа — по одній вихідній сторінці на кожну цільову сторінку, поверх або під наявним вмістом — фірмові бланки, безперервні фони сторінок і скановані шаблони форм за один виклик- Вичерпання джерела налаштовується: зупинка, циклічний перебір сторінок джерела або повтор останньої сторінки джерела; додаткова опція запобігає збільшенню штампа понад його природний розмір
Changed
- Штампи документа підганяються під CropBox цільової сторінки і розміщуються прямо на сторінках, що містять запис
/Rotate, а кожна вихідна сторінка імпортується один раз як спільний Form XObject, тому шаблони, що повторюються, ніколи не дублюють свої ресурси
Version 3.302.0
Fixed
- Паролі AES-256 тепер обробляються за допомогою SASLprep (RFC 4013) перед хешуванням, тому паролі, які містять не-ASCII пробіли, м'які дефіси, символи сумісності чи комбінуючі послідовності, коректно відкриваються в Acrobat та інших переглядачах, що відповідають стандарту
- Під час відкриття документів AES-256 спершу випробовується стандартний підготовлений пароль із відкатом до застарілої байтової форми, тому файли, записані ранішими версіями з не-ASCII паролями, продовжують відкриватися
Added
- Код помилки 604 повідомляє про відхилення пароля AES-256 процедурою SASLprep через наявність заборонених кодових точок або порушення двонаправлених правил
Version 3.301.0
Added
SplitDocumentToFilesрозрізає обраний документ на пакет вихідних файлів із фіксованою кількістю сторінок у кожному, використовуючи замінник імені файла%p
Changed
- Пакетне розрізання аналізує вихідний документ один раз і копіює кожен фрагмент із тієї самої структури в пам'яті, замінюючи повторний повний розбір, який цикл над
ExtractFilePagesвиконує для кожного діапазону
Version 3.300.0
Added
CollateDocumentsоб'єднує сторінки з кількох відкритих документів в обраний документ почергово, забираючи налаштовувану кількість сторінок з кожного джерела за раунд (A1, B1, A2, B2, …)CollateDocumentsExприймає список діапазонів сторінок для кожного джерела, де спадні діапазони виду3-1обертають джерело, тому прямі та перевернуті зворотні проходи сканера зливаються в порядок читання за один виклик
Changed
- Злиття з чергуванням імпортують кожне джерело через єдину карту об'єктів і чергують сторінки переупорядкуванням, тому шрифти і зображення, спільні всередині джерела, записуються лише один раз незалежно від розміру групи
Version 3.299.0
Added
SetDeterministicDocumentIDіGetDeterministicDocumentIDперемикають файловий ідентифікатор трейлера на відтворюване значення, тому однакові вхідні дані дають ідентичні вихідні байти для кешування збірок, зберігання за вмістом і побайтового порівняння регресійSetDocumentIDSeedзадає явне початкове значення для відтворюваного ідентифікатора файла; без нього ідентифікатор виводиться з метаданих документа, заголовка версії та кількості сторінок
Changed
- Відтворювані ідентифікатори файла оновлюються лише під час повних збережень; інкрементальні оновлення та зашифровані документи зберігають наявний ідентифікатор, тому підписи та захищені паролем файли продовжують відкриватися коректно
Version 3.298.0
Added
AddLinkToArticleThreadіSetOutlineArticleThreadз'єднують хотспоти сторінки та закладки з ниткою статті або бусиною за допомогою стандартних дій ThreadAddActionNextArticleThreadіPDF_ACTION_BUILDER_THREADдодають дії Thread до ланцюгових, форми, сторінкових та документових робочих процесів дій
Changed
- Цілі дій Thread використовують стабільні непрямі посилання на нитку та бусину і відхиляють недійсні індекси без зміни цільового контейнера
- Конструктори дій поля форми відхиляють додаткові дії, доки активний режим PDF/A, зберігаючи заборону PDF/A на словники
/AAполів та віджетів
Version 3.297.0
Added
- Довідник з плоского DLL
DLтепер документує кожну точку входу ANSI з суфіксомA(char), додаючи 353 довідкові сторінки, що віддзеркалюють аналоги в Unicode з точними сигнатурами DelphiPAnsiCharта Cconst char * - Перебудовано
BufferUtilities,DirectAccessFunctionalityтаMiscellaneousFunctionsяк чисті індексні сторінки груп функцій на основі спільної схеми категорій, виправлено пошкоджену розмітку, невірно позначені розділи та відсутні індикатори - Індекс навігації та спільний пошуковий індекс тепер охоплюють всю поверхню DLL як для викликів Unicode, так і для ANSI
Fixed
- Видалено застарілий запис
SetLogger, що не мав відповідного символу у вихідному коді; задокументованою властивістю єLogger
Version 3.296.0
Added
AddAlternateImage,AlternateImageCount,GetAlternateImageInfoтаRemoveAlternateImageзабезпечують типізоване створення та перевірку варіантів зображень для екрана та друку- Альтернативні зображення можна пов'язувати з групою додаткового вмісту або словником членства, при цьому один варіант для кожного базового зображення можна обрати як типовий варіант для друку
Changed
- Вбудований рендерер тепер обирає альтернативні зображення додаткового вмісту, коли базове зображення приховано, і враховує типовий варіант для друку при виведенні на принтер
FindImagesтепер реєструє альтернативні XObject зображень, доступні з ресурсів сторінки, щоб імпортовані варіанти отримували придатні дескриптори зображень
Version 3.295.0
Added
AddArticleThreadстворює сумісні зі стандартами нитки статей для навігації з типізованими метаданими, впорядкованими прямокутниками сторінок, циклічними посиланнями намистин та масивами намистин для кожної сторінкиArticleThreadCount,GetArticleThreadInfoтаGetArticleThreadBeadперевіряють створені або імпортовані нитки статей з обмеженим обходом пошкоджених циклів посилань
Changed
DeletePagesтепер видаляє нитки статей, що втрачають усі намистини, і відновлює циклічні посилання вцілілих ниток- Відстеження видалених сторінок тепер зберігає стабільні непрямі посилання на сторінки, тому очищення змісту та статей не може зсунутися при переміщенні курсора дерева сторінок
Version 3.294.0
Added
SearchTextBatchвиконує пошук за кількома текстовими запитами, поки витяг кожної сторінки перебуває в пам'яті, і повертає вихідний індекс запиту з нульовою базою з кожним збігомSearchTextBatchEachзабезпечує такий самий однопрохідний пошук через потоковий зворотний виклик зі звітами про прогрес та скасуванням
Changed
- Пошук за одним запитом та пакетний текстовий пошук тепер використовують спільне ядро зіставлення, зберігаючи семантику чутливості до регістру, цілих слів та діапазону сторінок, уникаючи при цьому повторного витягу сторінок, згортання тексту та обчислення геометрії збігів
Version 3.293.1
Fixed
- Растеризація меш-шейдингу більше не викликає помилку компіляції в жодній версії Delphi, усуваючи
E2089 Invalid typecastпри наведенні дійсних чисел до плаваючої точки у модулі рендерингу GDI+ - Паралельний пакетний рендеринг сторінок тепер компілюється в Delphi XE5 та XE6, де
System.Threadingнедоступний; старіші інструменти відкочуються до послідовного шляху рендерингу, як і в системах, відмінних від Windows - Визначення можливостей принтера більше не викликає помилку несумісних типів у застарілих версіях Delphi за рахунок узгодження виклику
SetPrinterз рештою коду друку - Перелічень сховища сертифікатів тепер збирається в RAD Studio 10.3 Rio, де раніше відбувався збій з внутрішньою помилкою компілятора під час оптимізації підпрограми переліку
Version 3.293.0
Added
- Словники членства додаткового вмісту тепер можна створювати, оновлювати та перелічувати з політиками сумісності
AnyOn,AllOn,AnyOffтаAllOff - Вкладені вирази видимості
/VEдля PDF 1.6 підтримуютьAnd,OrтаNotчерез компактний префіксний запис, спільний для Delphi та C++Builder
Changed
- Області додаткового вмісту, потоки вмісту, захоплені сторінки, зображення, поля форм та анотації тепер приймають або дескриптор групи, або дескриптор членства
- При рендерингу дійсні вирази
/VEобчислюються першими, з відкатом до/OCGsта/Pдля некоректних або непідтримуваних виразів
Fixed
- Вкладений додатковий вміст більше не може робити вміст видимим, коли охоплююча група або членство приховані
- Словники членства без дієвих груп додаткового вмісту тепер залишають видимість без змін, як вимагає специфікація PDF
Version 3.292.0
Added
EnumAttachmentsтепер повідомляє дати створення та зміни, шістнадцяткові контрольні суми, зв'язки асоційованих файлів та номери об'єктів специфікації файлу як для вкладень документа, так і для вкладень-анотаційValidateAttachmentChecksumза запитом звіряє корисне навантаження вкладення зі збереженою контрольною сумою, а нові вбудовувані файли тепер автоматично отримують метадані контрольної суми
Fixed
SetEmbeddedFileAFRelationshipтепер приймає ті самі індекси вбудованих файлів з базою 1, що й решта API вкладень, включно з документами з одним вкладенням
Version 3.291.0
Added
DeduplicateResourcesтепер об'єднує точні дублікати потоків зображень, Form, візерунків, шейдингу, функцій, профілів ICC, програм шрифтів, CMap, CharProc Type 3, вбудовуваних файлів, метаданих та PostScript по всьому завантаженому документу- Дедуплікація ресурсів надає незалежні прапорці типів, аналіз пробного запуску, необов'язковий збір об'єктів-сиріт та детальну статистику хешування, порівняння, корисного навантаження, посилань та за категоріями
Changed
- Виявлення дублікатів канонізує повні словники потоків незалежно від порядку ключів, хешує кожне корисне навантаження-кандидат один раз з SHA-256 та побайтово підтверджує збіжні кошики перед перенаправленням посилань
- Групи точної еквівалентності зберігають найменший номер об'єкта та покоління для детермінованого виводу, тоді як некоректні цикли прямих об'єктів та семантичні відмінності словників залишаються не об'єднаними
Version 3.290.0
Changed
PurgeUnusedResourcesтепер обчислює транзитивне замикання залежностей за мозаїчними візерунками, гліфами Type 3, станами зовнішнього вигляду анотацій, групами м'якої маски ExtGState, зображеннями, шейдингами та вкладеними цветовими просторами- Параметри очищення за замовчуванням тепер включають аналіз залежностей візерунків, Type 3, зовнішнього вигляду, м'якої маски та зображень з незалежними прапорцями для викликів, яким потрібне вужче сканування
- Вкладені програмні потоки та записи залежностей кешуються, області спільних ресурсів приватизуються перед обрізанням, а некоректні цикли обмежуються захистом активних потоків та глибини
Fixed
- Ресурси сторінок, що використовуються лише через цветові простори зображень, бази Indexed, альтернативи Separation або DeviceN, базові простори Pattern, альтернативи ICCBased або словники шейдингу, більше не видаляються як невикористані
- Ресурси, що використовуються лише CharProc Type 3, комірками мозаїчних візерунків, зовнішніми виглядами анотацій або групами м'якої маски прозорості, більше не видаляються з власної або унаслідуваної області
Version 3.289.0
Added
PurgeUnusedResourcesтепер видаляє іменовані ресурси сторінок, на які не посилаються вибрані шари вмісту, і може повертати детальну статистику за категоріями- Очищення ресурсів тепер підтримує діапазони сторінок, звіти пробного запуску, прогрес та скасування, рекурсивний аналіз Form XObject, видалення застарілих ProcSet та необов'язковий збір об'єктів-сиріт
Changed
- Аналіз ресурсів тепер дотримується чутливості до регістру імен PDF, унаслідуваним ресурсам Form, користувацьким цветовим просторам вбудованих зображень та всіх семи стандартних категорій ресурсів
- Програми Form, що повторюються, кешуються, набори використаних ресурсів використовують відсортований пошук, а записи словника видаляються в порядку спадання для передбачуваної продуктивності на великих документах
Fixed
- Видалення записів словника тепер анулює індекси ключів великих словників, тому подальші пошуки не можуть повертати застарілі записи
- Некоректні потоки та невідомі оператори за замовчуванням зберігають свою повну область ресурсів, а спільні або унаслідувані словники ресурсів клонуються перед мутацією
Version 3.288.0
Added
- Цифрові підписи тепер можуть випромінювати повні структури сертифікації DocMDP та блокування полів FieldMDP зі звітами про структурні дозволи для кожного обраного підпису
- Мітки часу документа RFC 3161, мітки часу підпису, впровадження токенів PAdES-B-T, перевірка ланцюга сертифікатів, свідчення OCSP та матеріал перевірки DSS або VRI тепер мають повні робочі процеси створення та перевірки
- Анотації RichMedia тепер підтримують вбудовувані активи, налаштування активації та деактивації, зовнішній вигляд плакатів, перелік, витяг та видалення
- Друк плакатів тепер підтримує векторний макет сторінок, мітки перекриття та обрізки, розміщення з урахуванням жорстких полів та багаторазові плани мозаїки
- Теговані таблиці тепер випромінюють семантичну структуру Table, TR, TH та TD зі стабільними ідентифікаторами, асоціаціями заголовків, об'єднаннями, повторюваними заголовками та декорацією у вигляді артефактів
- Переглядач тепер надає редагування AcroForm з клавіатурним доступом для полів тексту, вибору, прапорців, перемикачів та кнопок, передаючи дії ведучому застосунку
Changed
- Функціональний шейдинг Type 1 та меш-шейдинг з Type 4 по Type 7 тепер рендеряться через нативне обчислення функцій та обмежену тесселяцію мешу
- Рендеринг кольору ICCBased тепер розділяє кешовані перетворення для зображень та шейдингів, зберігаючи калібровану поведінку цветового простору
- Інкрементні збереження тепер послідовно перебудовують потоки об'єктів та потоки перехресних посилань, а обрані підписи перевіряються щодо власної підписаної редакції
Fixed
- Запити міток часу підпису SHA-1 тепер хешують значення підпису підписувача з SHA-1 замість відкату до SHA-256
- Відхилені заміни блокування полів більше не відкидають раніше дійсну конфігурацію блокування полів
- Радіо-віджети з дубльованими іменами станів зовнішнього вигляду тепер зберігають обраний віджет та залишають споріднені віджети вимкненими
Version 3.287.0
Changed
- Словники вбудованих зображень тепер дотримуються меж коментарів, роздільників, літералів, шістнадцяткових значень, масивів та словників PDF з обмеженим вкладенням
- Корисні навантаження вбудованих зображень тепер використовують усвідомлене щодо формату завершення для даних raw, DCT, ASCII85, ASCIIHex, RunLength та Flate
- Виявлення корисного навантаження Flate тепер виконує один обмежений inflate від зсуву потоку вмісту з точним обліком стиснених байтів, тоді як ланцюгові фільтри без втрат використовують спільний кінцевий стелю виводу
- Потоки ASCII85, ASCIIHex, LZW, predictor, кольорових профілів та допоміжних зображень тепер забезпечують обмежений проміжний вивід без надмірних тимчасових виділень
Fixed
- Некоректні або усічені вбудовані зображення більше не читають за межами вихідних даних, не зациклюються на незавершених значеннях та не зберігають застарілий стан при повторному використанні декодера
- Упаковані рядки зображень тепер обчислюють біти компонентів перед округленням до байтів, запобігаючи невірним довжинам для низькобітових зображень RGB та багаторядкових зображень
- Colorові простори ресурсів тепер зберігають свої оригінальні імена, виводячи кількості компонентів Lab, непрямих ICCBased та DeviceN та декодуючи потоки палітри Indexed у суворих межах
- Межі вбудованих зображень тепер однорідно відхиляють недійсні розміри, бітові глибини, непідтримувані фільтри, небезпечні ланцюги фільтрів, стиснені потоки та неоднозначні кінцеві маркери
- Рендеринг кольору Indexed тепер перевіряє кожен доступ до палітри та відхиляє усічені дані пошуку замість читання за межами декодованої таблиці
- Передбачувачі PNG з 10 по 15 тепер коректно декодуються для потоків Flate та LZW, відхиляють недійсні фільтри рядків та перевіряють усі розміри рядків та станів перед виділенням пам'яті
- Корисні навантаження JPEG та JPEG 2000 тепер перевіряють свої закодовані розміри, компоненти, точність, структуру маркерів, довжини боксів та обсяг декодованого сховища перед виділенням зображення
- Перевірка вбудованих зображень тепер обмежує зберігання як упакованих, так і розгорнутих растрових даних та обмежує профілі ICC, глобальні дані JBIG2 та параметри термінального фільтра
- Двійкові корисні навантаження фільтра, що містять вбудований текст кінцевого маркера, тепер продовжуються до першого кандидата, що проходить обмежену перевірку формату
Version 3.286.0
Changed
- Content stream tokenization now follows PDF whitespace, comment, delimiter, literal string, hexadecimal string, and name boundaries
- Text splitting and resource replacement now use geometrically grown output buffers for linear processing of large content streams
- Reusable content stream processors now reset derived output and parser state before every
Processcall
Fixed
- Malformed or truncated literal and hexadecimal strings no longer read beyond the source buffer or emit an extra empty token
- Resource replacement now preserves case-sensitive PDF name semantics, accepts optional leading slashes, and updates duplicate mappings deterministically
- XObject and shading operands at the beginning of a stream are now excluded from text output, while unmatched restore operators no longer cancel later saved graphics states
Version 3.285.0
Changed
- LZW encoding now uses constant-time dictionary lookup and buffered stream writes, while decoding uses compact prefix and suffix tables with geometric output growth
- Flate predictor decoding now processes rows directly in the output buffer and supports packed, 8-bit, and 16-bit TIFF samples with arbitrary colour counts
- Stored Deflate streams now write into an exact pre-sized result, and zlib wrappers release temporary buffers safely when compression or decompression fails
Fixed
- LZW code-width changes now follow PDF
EarlyChangesemantics across 9-bit through 12-bit codes, including dictionary resets andEarlyChange=0 - LZW decoding now rejects invalid future codes and truncated bit streams without reading beyond the source buffer
- PNG predictors now use the ceiling byte width of a pixel, preserve previous decoded rows, and safely pad a partial final row
- TIFF predictor decoding now handles 1-bit, 2-bit, 4-bit, 8-bit, and 16-bit components consistently in both LZW and Flate paths
Version 3.284.0
Changed
- Buffer searches now scan fixed 64 KiB blocks, use byte lookup tables for set membership, and preserve the caller's position across every search path
- Unicode, Latin-1, hexadecimal digest, and ARC4 conversions now reserve bounded output once instead of repeatedly growing strings or temporary arrays
- ASCII85 encoding now reads input streams in 32 KiB blocks, while decoding uses exact integer arithmetic and writes directly into a pre-sized output buffer
- MD5 string hashing now avoids a temporary memory stream, digest comparison examines every byte, and ARC4 key scheduling no longer allocates an expanded key array
Fixed
DistanceToAnyBytenow returns the correct offset beyond its first block instead of rereading the same prefix and overcounting skipped bytes- Stream-backed buffer reads now honour the actual byte count returned by custom streams, shrinking results and advancing positions only by bytes received
- Buffer length reductions now clamp the current position, and nil pointer or stream sources behave as empty inputs instead of exposing invalid memory
- Latin-1 decoding now maps the complete byte range 0x00-0xFF instead of replacing bytes 0x7F-0xFF
- ASCII85 decoding now preserves the valid maximum 32-bit group
s8W-!and stops at the first end marker without floating-point boundary loss
Version 3.283.0
Added
TPDFlibSignatureVerifiercan now enumerate signature fields and CMS signers, open files, streams, or strings, and verify a selected field and signer by index or field name- Detailed verification reports now separate cryptographic integrity from signed-revision coverage, current-file coverage, later revisions, strict Contents-gap validation, and native crypto errors
Changed
- Detached CMS validation now streams both ByteRange segments through Windows CryptoAPI in bounded chunks instead of materialising the complete PDF in memory
- Signature fields under nested AcroForm Kids arrays and inherited
/FT /Sigentries are now enumerated with fully qualified names, and direct signature value dictionaries are supported
Fixed
- ByteRange validation now rejects overflow, overlap, truncation, a gap that is not exactly the selected hexadecimal
/Contentstoken, and a signed revision that does not end at its own%%EOF - Certificate lookup no longer falls back to an unrelated embedded certificate when the selected CMS signer identifier has no exact issuer-and-serial match
- Incremental updates that use cross-reference streams now include the cross-reference stream object's own type 1 entry, preventing strict PDF validators from reporting a missing self entry after signing
Version 3.282.1
Changed
- Full saves now rebuild imported object streams from the live object graph, preserve private trailer roots, and retain free-object generations without reusing structural object numbers
- Cross-reference streams now size their offset fields for large files, preallocate their payload, include their own entry, and preserve trailer extension keys
Fixed
- Object-stream packing now writes real
/ObjStmcontainers and type 2 member entries instead of only switching to an xref stream - Garbage collection no longer writes missing object numbers as in-use entries at offset zero and now emits a linked free-object chain in both plaintext and stream cross-references
- Loaded packed PDFs can now be saved repeatedly with packing enabled or disabled without retaining stale object streams, losing live members, or requiring cross-reference repair
Version 3.282.0
Added
- Imported ICCBased colours now use the embedded ICC profile across vector painting, function and mesh shadings, indexed palettes, raw bitmap, CCITT and JBIG2 images, CMYK JPEG images, and JPEG 2000 images
Changed
- ICC transforms now use a bounded Windows Color System lookup table with multilinear interpolation, replacing the temporary PNG round trip used during image rendering
- The renderer now honours content-stream and graphics-state rendering intents, ICCBased
/Range, image/Decode, and original-domain colour-key masks while validating profile channel counts against the PDF colour-space dictionary - Repeated uses of the same profile and rendering intent now share one lookup table across vector colours, patterns, shadings, and images
Fixed
- Encrypted ICC profile streams are now decrypted only while decoded and restored afterward, and embedded profiles are no longer compressed twice while writing image output
Version 3.281.0
Added
- The built-in GDI+ renderer now paints imported PDF function-based shadings and free-form, lattice, Coons, and tensor mesh shadings (types 1 and 4-7), including transparency and clipping
- Shading dictionaries now support component Function arrays, calibrated Lab, CalGray, and CalRGB spaces, Separation and DeviceN tint transforms, PatternType 2 Background fills, and BBox clipping across the GDI+ and Cairo renderers
Changed
- Type 1 shading functions now use bounded adaptive colour sampling with additional quarter-cell probes for higher narrow-feature accuracy and lower work on constant or smooth regions
- PatternType 2 matrices around mesh shadings are now composed exactly once in both GDI+ and Cairo, preserving translated, scaled, and rotated pattern placement
- Mesh colour components are now interpolated in their source colour space before Function evaluation and conversion to RGB, preserving nonlinear functions, DeviceCMYK gradients, and the correct ordering for managed colour transforms
- Coons and tensor surfaces now use bounded device-pixel error subdivision for smoother high-curvature output at large render sizes
- Encrypted shading and Function streams are decoded through the document crypt callbacks, and Type 5 vertex records honour their required byte alignment
Version 3.280.1
Fixed
MergeFileList/MergeFileListFast/MergeFileListStrictleaked aTSmartPDFReader/TSmartPDFDocumentpair (and everything they own) when a non-PDF file appeared in the merge list: the reader and document were constructed before thetryblock that frees them, so a parse failure on the malformed file's content orphaned the already-constructed reader instead of being cleaned up by the surrounding exception handler; construction now happens inside the protectingtryin both the single-file and multi-file prescan paths- Mesh shading parsing (
TPLMeshShading.Parse, shading types 1 and 4-7) leaked the decoded/Functionobject on every parse - every early-exit path and the normal completion skipped freeing it; the function is now released in afinallyblock regardless of howParseexits TPDFlibSignDoc.Closenow nils its smart-reader/document/info fields after freeing them, and the exception paths inOpen,OpenStreamandOpenStringnow release any partially-constructed smart objects instead of only clearing the stream reference, preventing a leak when opening a signing target fails partway through
Version 3.280.0
Added
- Error category enumeration
TPDFlibErrorCategory(ecSuccess/ecStructure/ecSave/ecCrypto/ecGeneric/ecCompliance/ecAcroForm) layered on top of the existing numericLastErrorCodetaxonomy, so callers can classify failures without memorising code ranges; exposed viaTPDFlib.LastErrorCategory,TPDFlib.ErrorCategory(Code)andTPDFlib.ErrorMessage(Code) - Form-field error codes 701-704 (field not found, field read-only, no AcroForm, invalid value) with human-readable messages, letting callers distinguish "field is locked" from "no such field" instead of receiving a single generic failure
SetFormFieldValueForcedforce-write variant that bypasses the read-only guard, used internally bySetFormValues(SkipReadOnly=False)so bulk imports can still overwrite locked fields when the caller explicitly opts out
Changed
SetFormFieldValuenow setsLastErrorCodeto 701/702/703 on failure (field not found / read-only / no AcroForm) instead of returning 0 silently;LastErrorCategoryis a non-consuming read so callers can inspect the category before retrieving the numeric code
Version 3.279.0
Added
ReplacePageRangesreplaces visual page content from another open document without changing the target page count or target page object identities, preserving bookmarks, links, annotations, and form widgets already attached to those pages
Changed
- Cross-document page copying no longer creates and removes an extra placeholder page before importing the requested range
Version 3.278.0
Added
PrintPagesAdvancedapplies copies, collation, duplex, orientation, color, quality, paper-size and input-bin settings to arbitraryPrintPagesrange expressions while retaining one printer profile and one print job
Changed
- Advanced print settings are validated before the job starts, positive print-quality values above the four named presets are applied as DPI, and paper or input-bin identifiers may use the full positive range supported by the corresponding
DEVMODEfields
Fixed
- Damaged cross-reference recovery now dispatches its bounded block reads through the traditional
TStream.Readoverride on Win64, preserving instrumentation and custom-stream behavior while retaining 64 KiB sequential I/O
Version 3.277.0
Changed
- Damaged cross-reference recovery now scans source data in 64 KiB sequential blocks instead of seeking once for every matching character, keeping auxiliary memory bounded while scaling to large PDF files and non-memory streams
- Recovery validates complete indirect-object tokens, skips object-like data inside comments, strings, and streams, confirms stream endings with a following
endobjtoken, preserves headers split across read boundaries, and selects the last valid trailer dictionary
Fixed
- Trailer reconstruction now supports nested dictionaries and delimiter text inside literal strings and is no longer truncated to the first 2048 bytes or the first apparent
>>pair
Version 3.276.0
Added
ActivateWebLinksandActivateWebLinksExscan existing page text once per page and create non-duplicate URI link annotations for HTTP, HTTPS,www., FTP,mailto:, and bare email targets with selectable detection and border options- Generated links use matched-character geometry, precise quadrilaterals for rotated or skewed text when permitted, PDF/A print flags, progress and cancellation support, and selected-page restoration; tagged PDF and PDF/UA documents are protected from incomplete structure-tree updates
Changed
SetAutoCreateWebLinksnow uses the same boundary-aware detector and target normalization when creating links for newly drawn text, addingwww., FTP, and bare email support
Fixed
- Updating annotation
/Contents, name, date, title, or subject properties no longer overwrites the subtype of an existing action dictionary, so URI and other actions remain valid after annotation metadata changes
Version 3.275.0
Added
ExtractPageRangeText,SavePageRangeTextToStream, andSavePageRangeTextToFileextract a parsed page range in one traversal with caller-defined page separators; stream and file output writes UTF-8 data incrementally so large documents do not require a complete document-sized text bufferSetPageBoxRangeandRemovePageBoxRangeapply page-boundary changes across the standard page-range syntax while preserving the caller's selected pageSetPageTransitionRangeandSetPageTransitionRangeExapply legacy or extended presentation transitions to page ranges with per-page progress and cancellation supportGeneratePageThumbnailsrenders requested pages directly into reusable memory and attaches their/Thumbimages without intermediate files or nested progress operations
Version 3.274.0
Fixed
- GDI+ rendering of axial shading patterns now honours the PDF
/Extendarray:SetupGDIPlusPatternpassesWrapModeClampwhen either end is extended (matching the Cairo backend) instead of always usingWrapModeTile, so end colours paint the area outside the gradient axis correctly
Added
- The scroll-hint bubble (
"Page N / M") shown while dragging the vertical scrollbar now auto-hides after 3 seconds of inactivity via aWM_TIMERhandler, so it no longer lingers until a separate scroll event dismisses it ZoomInStep/ZoomOutStepnow snap ontoActualSize(100%),FitWidthandFitPagepercentages when they fall between the current zoom and the next preset on the 14-step ladder, matching the behaviour of professional PDF viewers- The viewer disk page cache writes a build-version marker (
cache.version) and wipes the whole cache root when the library version changes, so a build upgrade never reuses stale bitmaps rendered by an older code path
Version 3.273.1
Fixed
- Object-stream container and xref-stream objects created during save were leaked because they bypassed
TPDFStructure.AddObjectregistration; both call sites now use theNewStreamWithDictownership-tracking factory, eliminating theTPDFStreamleak reported by the test runner underReportMemoryLeaksOnShutdown - Cross-reference stream
/Sizewas off by one: it must be one past the highest object number in the whole file, and the xref stream is itself an indirect object numberedMaxObj+1, so/Sizeis nowMaxObj+2
Changed
- Peephole content-stream optimiser now also removes identity text-matrix operators (
1 0 0 1 0 0 Tm), covering bothcmandTmwith the same six-operand identity check - Mark-sweep GC preserves object 1 (the
/Linearizedparameter dictionary) when the source document was loaded linearized, since that dictionary is never referenced from/Rootbut must survive
Version 3.273.0
Added
- Object-stream packing on save (
TPDFDocument.PackObjectsIntoStreams) collects eligible non-stream indirect objects, serialises them into PDF 1.5 object streams (/Type /ObjStm) with Flate compression, and emits a binary cross-reference stream (/Type /XRef) carrying type-0, type-1 and type-2 entries, reducing the size of saved files 10-40% on object-dense documents TPDFlibSaveOptions.PackObjectStreamsflag plusTPDFlib.SetPackObjectStreams/GetPackObjectStreamsAPI; defaults to enabled, auto-gated by PDF version (1.5+ activates packing and xref streams, 1.4 and below keep the traditional plaintext xref for compatibility), andTPDFlib.GetLastSaveUsedObjectStreamsreports whether the last save actually packed
Version 3.272.0
Added
- Mark-sweep garbage collection of unreferenced indirect objects (
TPDFDocument.GarbageCollectUnusedObjects) walks the object graph from the trailer roots (/Root,/Info,/Encrypt) and removes every indirect object that is not reachable, stopping the file-size growth that accumulates when pages are deleted and their font, content and XObject resources become orphans TPDFlibSaveOptions.GarbageCollectflag plusTPDFlib.SetGarbageCollect/GetGarbageCollectAPI let callers opt in to GC during a full save (defaults to off for backward compatibility), andTPDFlib.GarbageCollectObjectsruns GC immediately and returns the number of orphaned objects removed
Version 3.271.0
Added
- Peephole content-stream optimiser (
TPDFContentPeepholeOptimizer) rewrites a parsed page content stream before Flate compression, removing semantically redundant PDF operators: identitycmmatrices, emptyq/Qpairs, emptyBT/ETobjects, no-op paths terminated bynwith no clip, duplicate graphics-state setters (colour, line width, cap/join, dash, text state), and deadnafter a painting operator - all transforms are output-equivalent so visible page output is unchanged TPDFlibSaveOptions.OptimizeContentStreamsflag and matchingTPDFlib.SetOptimizeContentStreams/GetOptimizeContentStreamsAPI let callers opt in or out of the peephole rewrite duringCompressContent/CompressPage; enabled by default
Changed
TPDFDocument.CompressPagenow forwards the optimisation flag to the page tree so the peephole pass runs insideTPDFPageTree.Compressbefore the existing Flate compression, stacking operator-level reduction on top of byte-level compression
Version 3.270.0
Added
- New
PLParseDefaultAppearancedecodes a/DAdefault-appearance byte string (ISO 32000-2 12.7.4.3) into the font resource name, font size and fill colour, covering therg,kandGcolour operators so form-field and annotation appearance generators can paint text with the author-intended styling
Changed
- Page content-stream assembly (
TPDFRenderer.GetContents) now concatenates multi-part/Contentsarrays through aTStringBuilderinstead of repeatedResult := Result + chunk, removing the O(n^2) string growth that penalised pages with many content-stream parts
Version 3.269.0
Added
- New
BeginMarkedContent/EndMarkedContentwrite inline marked-content sequences with accessibility properties (/Alt,/ActualText,/Lang,/E) directly in the BDC property list per ISO 32000-2 14.9.2–14.9.5, so screen readers and accessibility tooling can read substitute text without a structure-tree entry - Annotation reader exposes
GetAnnotEffectiveBorderimplementing the Errata #287 precedence (border style dict/BSwins over the legacy/Borderarray) and resolving width, style and dash pattern into one call - Signature documents expose
GetSignatureSeedValueto read the seed-value dictionary (/SV, ISO 32000-2 12.7.5.5 Tables 236–237): required filter, allowed SubFilters and allowed digest methods, so a signer can honour the constraints the author embedded GetSignatureFieldLockreads the/LockFieldMDP seed dictionary (Table 238): action (/All,/Include,/Exclude) and the affected field names that must be locked at sign time
Version 3.268.0
Added
- New
PLParsePDFDateparses ISO 32000-2 7.9.4 date strings (D:YYYYMMDDHHmmSSOHH'mm') into a localTDateTime, honouring the mandatoryD:prefix, the field-dependency ladder (each field only when all preceding fields are present) and the UT offset (+/-/Zwith optional apostrophe-minute), returning the local equivalent of the documented instant - Text-string decoding (
PLDecodeTextString) now recognises the PDF 2.0 UTF-8 BOM (EF BB BF) per 7.9.2.2.1, so UTF-8-authored metadata decodes correctly instead of being misread as PDFDocEncoding - File specifications expose
GetFileNamehonouring the PDF 2.0 precedence (Path > UF > F) per Errata #444, plusGetEmbeddedFileStreamandGetRelatedFilesaccessors for the/EFand/RFdictionaries - Annotation readers expose appearance-precedence helpers
GetAnnotNormalAppearance,GetAnnotDefaultAppearanceandGetAnnotOffStateAppearanceimplementing the Errata #23/#34/#42/#170 rules (AP/N is authoritative; DA is the byte-string fallback; Off state lives under the nameOff) - PDF/UA validation reports a new code 10045 when a non-standard structure type fails to terminate at a standard type through the role-map chain (ISO 14289-1:2014 7.1), with cycle protection to a depth of 8
- PDF/A and PDF/UA font audits now validate that embedded CIDFontType2 fonts carry a
/CIDToGIDMapwhose value is either the nameIdentityor a stream, not merely present (ISO 32000-1 9.7.4)
Changed
- Name-tree lookup (
NameTreeLookup) now binary-searches the sortedNamesarray per ISO 32000-2 7.9.6 before falling back to a linear scan, turning large EmbeddedFiles/JavaScript/Dests lookups from O(n) into O(log n) on conformant files - PDF/UA standard-structure-type set expanded with PDF 2.0 additions (
Artifact,DocumentFragment,FENote,MarkedContent,Title) so the role-map no-remap and chain-termination checks recognise the full tag vocabulary
Version 3.267.0
Added
EnumPageContentStatesExcan recursively enumerate Form XObject instructions with configurable depth, cycle protection and depth-first execution ordering- Content snapshots now expose invocation-tree identity, containing stream and parent XObject information, resource-scope identity, Form traversal status and descendant counts
- Standalone content trackers can register scoped fonts and initialise isolated Form execution state with matrix concatenation and bounding-box clipping
Changed
- Recursive content tracing selects each Form resource dictionary independently, inherits invoking resources for compatible legacy Forms, preserves inherited font identity and caches decoded Form programs across repeated invocations
Version 3.266.0
Added
- Text runs returned by
GetTextRunsnow carry the glyph origin (OriginX/OriginY) and the full text matrix components (Tm11/Tm12/Tm21/Tm22/TmDX/TmDY) captured by replaying BT, Td, TD, Tm and T* alongside the show operators, so consumers can locate glyphs without a separate text-funnel pass - Mesh shading decoding now routes Lab, CalRGB and CalGray colour spaces through the colour manager instead of falling through to black, producing correct fills for non-DeviceRGB free-form and coons patches
- Redaction now emits a real
/Subtype /Redactannotation with/Rect,/ICinterior colour and optional overlay text alongside the existing content removal, so redaction-aware viewers mark the sanitized region - Library operations emit structured log records at load and save boundaries through the previously dormant
Logger, with ISO-8601 UTC timestamps and a cachedTStreamWriterfile sink that no longer reopens the log file on every line - New
Tests.Memoryfixture guards create/draw/save/free andNewDocumentcycles against heap regression, and the console test runner now enablesReportMemoryLeaksOnShutdown - EMF interpretation now counts unknown or private records via the
UnknownRecordCountproperty so silent metafile gaps are observable
Changed
- Dictionary key lookup (
TPDFDictionary.FindIndexByKeyName) builds a lazy open-addressing hash index for dictionaries with more than 16 entries, turning the linear scan that dominated renderer Resources/ColorSpace/Font/ExtGState lookups into an O(1) probe - sRGB gamma conversion (
XYZ2RGB) uses a shared 4096-entry lookup table instead of threePower(x, 1/2.4)calls per pixel, and Lab-to-XYZ cubing now uses direct multiplies; both are the dominant per-pixel cost when decoding Lab or ICC-based images - Page lookup (
TPDFPageTree.GetPage) returns the cached page dictionary on repeat access instead of re-walking the page tree every call - Content-stream operator dispatch (
ContentOperatorFromName) buckets the 73 operators by first byte, cutting the per-token linear scan to a short residual compare - PDF/A colour-space audit now recurses into the base or alternate space of Indexed, Separation, DeviceN and ICCBased up to a depth of 8, so a hidden DeviceCMYK tint transform or bare Lab name is flagged rather than passing silently
- Shaped-font finalize now walks the used-glyph set recorded at draw time instead of scanning all 65536 glyph slots four times per save
- String escape routines (literal-string, XFDF, stamp and variable token expansion) build output through
TStringBuilderor two-pass allocation, removing O(n^2) concatenation from save and form-export hot paths - AES stream encrypt/decrypt reuse their chunk buffer across loop iterations instead of reallocating per block
- Composite-glyph parsing in the TrueType parser grows the components array geometrically instead of one element at a time
- Mesh shading
ReadBitsreads the minimum covering bytes in one pass andWriteBitspre-sizes the output buffer, eliminating per-bit reallocation - Painter circle control point uses a precomputed kappa constant and arc squaring uses
Sqrinstead ofPower
Fixed
- Fixed a non-Windows compile break in
PDFlibParallelwhere the stub body signature forPDFlibRenderPagesParalleldid not match the interface declaration
Version 3.265.0
Added
- Added 59 C++Builder console demos to align the C++Builder demo suite with Delphi, bringing the total from 33 to 92 demos covering the same API surfaces
- Added Demo/C++Builder/index.html expansion from 35 to 92 entries with Navigation, Color & ICC, Barcode & media, and Structure & compliance sections
Fixed
- Fixed all 33 existing C++Builder cbproj files that were missing 20 library units (PDFlibMeshShading, PDFlibGraphics, PDFlibWindows, PDFlibParallel, PDFlibLogger, PDFlibMail, PDFlibViewer, etc) from their DelphiCompile list, which prevented every C++Builder demo from compiling
Version 3.264.0
Added
- Content graphics-state snapshots now resolve
Dooperands as image, form or PostScript XObjects and report their resource names, object numbers and transformed bounds - Form snapshots expose the original
/Matrixand/BBoxtogether with resource, group, transparency-group and reference-form indicators - Standalone content trackers can pre-register XObject streams through
RegisterXObject
Changed
- Page content-state enumeration now precompiles selected-page XObject resources and calculates invocation bounds from all four transformed corners
Version 3.263.0
Added
- Content graphics-state snapshots now expose current path bounds, current point, path complexity, pending clipping rules and effective clipping bounds
- Standalone content trackers can initialise an explicit clipping boundary through
SetInitialClipBounds
Changed
- Page content-state enumeration now follows delayed
WandW*clipping, exact transformed cubic extrema,q/Qclipping restoration and selected-pageCropBoxboundaries
Version 3.262.0
Added
- Content graphics-state snapshots now report font writing mode, exact per-instruction text displacement and whether font metrics were resolved
- Standalone content trackers can provide font measurements through
OnMeasureText
Changed
- Page content-state enumeration now advances text matrices for
Tj,TJ,'and"using simple or composite font metrics, horizontal scaling, spacing and vertical writing rules
Version 3.261.0
Added
- Content graphics-state tracing can now resolve page
ExtGStateresources, including transparency, blending, overprint, soft masks, device controls and embedded font references TPDFContentStateTrackercan pre-register external graphics-state dictionaries for standalone content-program analysis
Changed
- External graphics-state parameters now apply cumulatively and participate in complete
q/Qsave and restore snapshots
Version 3.260.0
Added
- Added single-pass effective graphics-state tracing for structured content programs and complete selected pages
- Snapshots expose CTM, text matrices, line style, dash pattern, colours, text state and graphics-state stack depth before or after each instruction
Changed
- Image placement enumeration now maps all four unit-square corners, producing correct bounds under rotation and shear
Version 3.259.0
Added
- Added typed time, special-pattern and arbitrary-mask helpers for interactive form fields
- Added range validation with independently optional zero-safe bounds
- Added sum, average, product, minimum and maximum field calculations with automatic calculation-order registration
Security
- Generated JavaScript string values now escape quotes, backslashes, control characters and JavaScript line separators
Version 3.258.0
Added
- Added typed
SetOCGStateaction creation for form-field events, existing actions and action chains - Optional-content actions preserve left-to-right state changes, repeated groups and the optional radio-button relationship preference
Changed
- Optional-content action enumeration now returns canonical group handles that round-trip through the writer APIs
Version 3.257.0
Added
- Added complete explicit remote-destination writing with zero-based pages, all standard fit types, nullable XYZ values and tri-state window preferences
- Added complete launch-action writing for portable files, Windows parameters, default directories and open or print operations
- Existing action handles can now update these payloads or append them to action chains without container-specific duplicate APIs
Security
- Remote go-to and launch action builders now reject PDF/A mode before modifying an action chain
Version 3.256.0
Added
- Remote go-to action inspection now reports named and explicit destinations, zero-based target pages, fit types, coordinates and zoom values
- Launch action inspection now reports Windows application parameters, default directories and open or print operations
- Action information distinguishes an absent
/NewWindowpreference from an explicit false value and identifies array-based targets
Version 3.255.0
Added
- Added typed builders for remote named-destination and external application launch actions
- URI action builders now support coordinate-map requests through the standard
/IsMapflag - The new action kinds work across lifecycle, form-field and chained-action APIs through the existing extended builder interface
Version 3.254.0
Added
- Added 14 Delphi API-coverage demos for library surfaces that had no dedicated demo: OutlineBuilder, NamedDestinations, DocumentActions, EmbeddedFiles, LinearizeDemo, BarcodeGallery, XfaFields, TaggedPDF, OutputIntent, HtmlTextFlow, RichMediaAnnotations, MailSendDemo, TextBlockExtraction, and PadesDssDemo
- Added a Navigation section, Color & ICC section, Barcode & media section, and Structure & compliance section to the Delphi demo index, bringing the total from 56 to 92 listed demos
- Added Readme.en-us.html guides for the 20 demos that previously shipped without one
Changed
- Applied the project Formatter.config across all Delphi demo sources so operator spacing, indentation, and keyword casing follow one style, and set NewLineBeforeThen to False so If...Then stays on a single line
- Hardened error handling across the classic GUI demos: SaveToFile return values are now consistently checked, TPDFlib and secondary object lifetimes are always protected by try/finally, and failure messages include LastErrorCode
Fixed
- Fixed inverted SaveToFile polarity in ImageToPdf that treated success as failure, and stopped AddTrueTypeSubsettedFont from opening a stale file when the save failed
- Fixed resource leaks in CreateWithImageToStream, DoInTheStream, CanvasText, ExtractText, ExtractImage, PdfDecrypt, PdfEncrypt, and PdfPermission where TPDFlib, TStream, TBitmap, TOpenDialog, or TStringList instances could escape on an exception path
- Removed dead code in AddFormattedTitle (unused RectParts allocation, redundant try/except around StrToFloatDef) and MultiFunction (overwritten SetTextSize call)
Version 3.253.0
Added
- Added typed action details for thread, sound, movie, optional-content, rendition, transition and 3D-view actions
- Added reusable action-handle lookup and ordered optional-content state enumeration
- Added complete PDF transition records covering replacement, Fly, Push, Cover, Uncover and Fade styles
Fixed
- Wipe and Glitter transitions now store their direction in
/Di, read page display duration from the page dictionary and clear both transition and timing entries - Standard pre-PDF-1.5 transition styles no longer force a PDF 1.5 output version
Version 3.252.0
Added
- Added single-pass form-field action discovery with typed action details across primary, widget and field triggers
- Added complete calculation-order enumeration, per-field lookup and removal for interactive forms
- Extended bulk form-field snapshots with calculation order and action count
Changed
- Widget lifecycle triggers now support page-open, page-close, page-visible and page-hidden actions with the required PDF 1.5 version handling
Version 3.251.0
Added
- Added single-pass named-destination enumeration across legacy catalog entries and modern name trees with resolved page and view parameters
- Added named-destination removal, complete push-button captions, button text positioning and form-field mapping names
- Extended bulk form-field snapshots with mapping names, button captions and button text position
Fixed
- Name-tree editing now supports direct destination values and uses unambiguous multi-node index encoding
Version 3.250.0
Added
- Added single-pass form field snapshots with field identity, type, page, flags, values and Choice state
- Added typed Choice-field flag queries plus validated selected-index and top-visible-index accessors
Fixed
- Single-selection Choice fields no longer retain a multi-selection
/Iarray, and switching from multi-select to single-select now replaces the old/Varray with a string value
Version 3.249.0
Added
- Added one-pass stateful text search traversal so applications can iterate cached hits without extracting pages twice
- Added bulk form value export and name-based application with optional read-only field protection
Version 3.248.0
Added
- Added retained Viewer selections with page-space geometry, extracted text, enumeration, clearing and a vetoable marquee event
- Added exact current-viewport bitmap capture and file output including persistent overlays
Version 3.247.0
Added
- Added independent Viewer controls for user form editing and annotation activation
- Added configurable foreground colour for text and choice form editors
Version 3.246.0
Added
- Added typed line ending styles, shape interior colours, link highlight modes, FreeText alignment, Text annotation open state and Caret symbols
- Annotation setters validate compatible subtypes and automatically raise the minimum PDF version where required
Version 3.245.1
Fixed
- Corrected FastReport export page sizing and memo layout so A4 reports retain their intended scale, text stays within memo bounds and unconfigured memo frames remain hidden
Version 3.245.0
Added
- Added
OnPasswordso applications can supply another password after an encrypted document rejects the initial credential - Password retries now work consistently for file, stream and string loads, expose the next attempt number and allow the handler to cancel
Security
- Password callbacks are limited to sixteen total attempts and every retry uses a fresh parser and decryption state
Version 3.244.0
Added
- Added
SetXMPPropertyExfor safely writing scalar properties in caller-defined XMP namespaces - Custom XMP values are escaped through the XML DOM, repeated writes replace the matching namespace property and invalid or reserved XML names are rejected
Version 3.243.0
Added
- Added typed document lifecycle actions for before close, before save, after save, before print and after print triggers
- Added typed page open and close actions with shared support for URI, named, JavaScript, form and destination action builders
- Added action inspection and removal methods for every document and page lifecycle trigger
Version 3.242.0
Added
- Added
SaveChangesto append changes to the originally loaded file and automatically reload the updated xref chain for repeated incremental saves SaveChangesvalidates the reload password before writing and preserves the selected public document handle after reload
Changed
AppendToFilenow rejects a target whose current length differs from the loaded source, preventing stale incremental offsets from being appended to an externally changed file
Version 3.241.0
Added
- Added
GetLastOutlineandGetLastChildOutlinefor direct access to the tail of a bookmark list - Added
GetOutlineChildCountandGetOutlineSiblingIndexfor lightweight bookmark tree inspection without allocating a full tree snapshot
Version 3.240.0
Added
- Added
SaveAllAttachmentsExwith overwrite, skip and automatic rename conflict policies plus a per-attachment naming callback - Attachment exports now reduce requested names to safe leaf names and protect Windows reserved device names
Fixed
- Fixed
SaveAllAttachmentsreturning without writing files because its attachment snapshot was counted but not allocated and populated
Version 3.239.0
Added
- Added
OnPageMouseDown,OnPageMouseMoveandOnPageMouseUpso Viewer hosts receive one-based page numbers and top-down PDF point coordinates independent of zoom, scrolling and view rotation - Added
RegionAtClientPoint,ActiveRegionandOnActiveRegionChangeto distinguish links, non-link annotations and form fields as the pointer enters or leaves them - Added
CreatePDFlibViewerDefaultPopupMenuandInstallPDFlibViewerDefaultPopupMenu, which compose the existing Viewer action classes into a ready context menu for copy, zoom, fit, rotate, navigation, save and print
Version 3.238.0
Added
- Added
OnOperationProgresswith typed operation kind, lifecycle phase, current and total units, percentage and detail text while preserving the classicOnProgresspercentage callback - Load, save, search, merge and page-render file, stream and string entry points now report starting and terminal phases; operations with intermediate progress also report
opRunning - Setting
CancelduringopStartingoropRunningactivates the existingAbortstate, providing one cancellation path for old and new callers
Fixed
LoadFromFilenow preserves error code 404 for a wrong password instead of overwriting it with the generic load error 401 after cleanup
Version 3.237.0
Added
- Added
SearchTextEachandTPDFlibSearchHitEventto emit every text hit immediately without allocating or sizing a result array SearchTextandSearchTextEachnow report page progress throughOnProgressand honour bothAbortand callback cancellation; callback cancellation uses the existing abort state untilResetAbort- The Viewer search panel and search-highlight layer now consume the streaming API in one pass, removing their former 256-row and 512-highlight limits
Fixed
- Whole-word search now continues past an earlier substring occurrence in the same text block to find a later correctly bounded match
Version 3.236.0
Added
- Added
GetPrinterCapabilitiesto capture a live printer-driver snapshot without starting a print job - The typed
TPDFlibPrinterCapabilitiesresult includes paper IDs, names and millimetre dimensions, input-bin IDs and names, duplex, colour, landscape and collation support, the printer port and the maximum driver-reported copy count - Drivers that omit paper or bin metadata still return the remaining capabilities with empty arrays, while invalid printer names return a fully cleared snapshot
Version 3.235.0
Added
- Added
SendDocumentByMailfor saving the loaded document to a temporary PDF and delivering it as an SMTP attachment through the built-in Windows CDO provider - Added the reference-counted
IPDFlibMailProviderextension point so applications can supply another transport, support non-Windows hosts and test mail workflows without network access - Each send uses an isolated temporary directory, sanitises the attachment display name and removes both the PDF and its directory after the provider returns;
GetLastMailErrorreports validation, save, transport and platform failures
Version 3.234.0
Added
- Added variable placeholders to stamp, header and footer text:
<%PageNo%>,<%TotalPages%>,<%ShortDate%>,<%LongDate%>,<%ShortTime%>and<%LongTime%>expand per page alongside the classic &-tokens - Any custom
<%name%>placeholder resolves through the newOnCalcVariableevent, which receives the name and the page number and supplies the replacement - running numbers, batch codes and client fields stamp without pre-processing the text; without a handler unknown placeholders stay verbatim
Version 3.233.0
Added
- Added superscript/subscript detection to text extraction: the new
GetTextBlockVAlignreports each extracted text block's baseline classification (0 = baseline, 1 = superscript, 2 = subscript) relative to its visual line, so chemical formulas, exponents and footnote markers can be recognised - A block classifies as super-/subscript when it is markedly smaller than the line's dominant text and its vertical centre sits above/below the dominant centre within one text height
Version 3.232.0
Added
- Added character-level word splitting to text extraction:
SetTextExtractionOptions(17, 1)re-splits show-text runs that carry no space characters into words wherever a per-character advance step is much wider than the run's median glyph advance - documents that paint whole lines as a single operator with kerning gaps standing in for spaces now extract as separate words inGetPageTextmodes 7 and 9-11 - The advance arrays stay aligned with the widened text, so block quads and per-character width outputs remain consistent
Version 3.231.0
Added
- Added layout-preserving fixed-grid text export:
GetPageText(11)maps the page geometry onto a monospace character grid - rows cluster by baseline, every block lands at its column computed from the average character width, and shorter cells pad with real spaces - so tables and forms keep their visual alignment in plain-text viewers, terminals and diffs without relying on tab stops - The reference page for
GetPageTextnow documents the reading-order (9), tab-separated table (10) and fixed-grid (11) modes
Version 3.230.0
Added
- Added dehyphenation to text extraction:
SetTextExtractionOptions(16, 1)re-joins words hyphenated across line breaks ("inter-" at a line end followed by "national" becomes "international") in the line-oriented outputs ofGetPageTextmodes 7 and 9 - The heuristic only merges when a letter precedes the hyphen and a lowercase letter starts the next line, so numeric ranges, proper nouns and sentence-initial capitals keep their hyphens
Version 3.229.0
Added
- Added the
OnBeforeSnapshotevent to theTPDFlibViewercontrol: it fires before a snapshot drag is captured with the dragged region, and setting Handled cancels the default clipboard capture so applications can process the region themselves - Exposed
PrefetchEnabled: the background pre-render worker can now be switched off and on at run time (the worker stops immediately and restarts on the open document) - Exposed
DiskCacheMaxDocuments: the number of documents the cross-session disk page cache keeps before pruning is now tunable (default 10)
Version 3.228.0
Added
- Added precise navigation to the
TPDFlibViewercontrol:GoToPagePointjumps to a page and scrolls a given page point to the top-left of the viewport, so link destinations and search hits land exactly in view - Added programmatic scroll control:
ScrollBypixel stepping, read/writeHScrollPos/VScrollPosproperties (ideal for synchronising two side-by-side viewers over the same document), andGetScrollPosForPagereporting each page's scroll anchor in continuous mode - Added public coordinate bridges
ClientPointToPageandPageRectToClientRectconverting between client pixels and page user space through zoom, rotation and scroll; the internal hit-testing now shares the exact geometry of the paint path and also works on unparented (headless) controls
Version 3.227.0
Added
- Added view-state events to the
TPDFlibViewercontrol:OnZoomChangefires on every effective-zoom move (explicit zoom, preset steps, fit-mode recomputation on resize, rotation or DPI change) andOnHScroll/OnVScrollfollow the scroll position, so toolbars and status displays stay in sync without polling - Dragging the vertical scrollbar thumb now shows a floating "Page N / M" bubble that previews the page the view will land on - a big help in long documents; the
ScrollHintEnabledproperty (on by default) turns it off
Version 3.226.0
Added
- Completed the fill-and-save loop in the
TPDFlibViewercontrol:SaveToFileandSaveToStreamwrite the displayed document - committed form edits included - back to disk or a stream (any open in-place editor commits first) - Multiline text fields now edit in a proper multi-line memo: Enter inserts a line break, Ctrl+Enter commits, Escape cancels; single-line fields keep the plain Enter-commits behaviour
- Tab and Shift+Tab cycle the in-place editor through the document's editable text and choice fields, following each field's page;
FocusNextFormFieldexposes the same navigation programmatically
Version 3.225.0
Added
- Added preset-ladder zooming to the
TPDFlibViewercontrol:ZoomInStepandZoomOutStepsnap the zoom to the standard preset sequence (1, 5, 10, 25, 50, 75, 100, 150, 200, 400, 800, 1600, 2400, 3200 percent), starting from the zoom currently in effect so fit modes step naturally; the toolbar zoom actions now use the same ladder - Ctrl+mouse wheel now zooms along the preset ladder while a plain wheel keeps scrolling
- Added keyboard shortcuts: Ctrl+'+'/'-' step the zoom, Ctrl+1/2/3 switch to actual size, fit width and fit page, and Shift+Up/Down jump to the first and last page
Version 3.224.0
Added
- Added
CreateSelfSignedCertificatewith Delphi, DLL and ActiveX entry points: generates a self-signed RSA certificate (SHA-256 signature, configurable subject, validity and key length) and exports it with its private key to a password-protected PFX file, ready forSignFileand the sign-process APIs - so signing workflows can be built and tested without an external certificate authority - The certificate is created in a throwaway key container that is deleted after the export; only the PFX keeps the key material. Self-signed certificates are meant for testing and internal documents - viewers flag them as untrusted unless installed explicitly
Version 3.223.0
Added
- Added
TPDFlibShapeWatermarkto the composable watermark layer: rectangles, circles, ellipses, polygons, Bezier curve chains and straight lines stamp onto a page range with fill and stroke colours, line width and opacity, through the sameApplyWatermarkentry point as text and image watermarks - Rectangle, circle and ellipse shapes size themselves from Width/Height; polygon, curve and line shapes take their geometry from
SetPoints(local X,Y pairs), so the nine-point Position grid and custom placement apply to every shape kind; degenerate geometry (too few points) is rejected
Version 3.222.0
Added
- Added
AddLinkToEmbeddedPDFwith Delphi, DLL and ActiveX entry points: a page hotspot that opens a PDF embedded in the current document (by its EmbeddedFiles name) and jumps to a chosen page there, using the standard embedded go-to (/GoToE) action of ISO 32000-1 §12.6.4.4 with an optional new-window request; the document version rises to PDF 1.6 automatically GetAnnotActionInfoand its outline/form-field siblings now recognise embedded go-to actions, reporting the newakGoToEkind together with the embedded target name, the parent/child target relationship, the optional file specification and the /NewWindow flag
Version 3.221.0
Added
- Added
SetSignProcessAppearanceTextwith Delphi, DLL and ActiveX entry points: digital signatures can now show an automatically generated visible text appearance composed of the signer name, reason, location and signing date, with optional descriptive labels ("Signed by:", "Reason:", ...) selected through a bit mask - The text block lays out inside the signature field rectangle in Helvetica with a configurable colour; font size 0 auto-fits the lines to the field. A field image set through
SetSignProcessFieldImageFromFilekeeps precedence, and document time-stamp processes ignore the text appearance
Version 3.220.0
Added
- Added interactive form filling to the
TPDFlibViewercontrol: clicking a checkbox or radio button toggles it, and clicking a text or choice field opens an in-place editor over the field (Enter commits, Escape cancels, leaving the editor commits); read-only fields are left alone and the changed page re-renders automatically - Every write fires the new
OnFormFieldValueChangedevent, andHighlightFormFieldswithFormHighlightColorpaints a translucent backdrop over each fillable area so users can spot form fields - Added the programmatic counterparts
FormFieldAtPagePoint,GetFormFieldPageRect,ToggleCheckBoxField,SetFormFieldValueAndRefresh,BeginEditFormFieldandCommitInplaceEditor, driving the same machinery without mouse input
Version 3.219.0
Added
- Added annotation interaction to the
TPDFlibViewercontrol: clicking a non-link annotation fires the newOnAnnotClickevent with the page, annotation index and subtype, andAnnotAtPagePointexposes the hit test programmatically (Popup companions are skipped) - Hovering an annotation now shows its Contents text as the control's hint (the
AnnotHintsswitch, on by default, works with the standardShowHintproperty) - Added
SaveAnnotAttachmentToFileto write a FileAttachment annotation's embedded file to disk, completing click-to-save attachment workflows in the viewer
Version 3.218.0
Added
- Added a cross-session disk page cache to the
TPDFlibViewercontrol: settingDiskCacheFolderpersists rendered pages on disk so a recently viewed document reopens instantly without re-rendering - Cached pages are keyed by a fingerprint of the document's path, size and last write time, so editing the file automatically invalidates its stale pages; the cache keeps up to ten documents and prunes the least recently used ones
- Added the
DiskCacheHitscounter reporting how many page renderings the disk cache saved
Version 3.217.0
Added
- Added the
PDFlibViewerActionsunit with twenty ready-madeTActiondescendants forTPDFlibViewer, so toolbars and menus work without glue code: page navigation (First/Prior/Next/Last), zoom (In/Out/FitWidth/FitPage/ActualSize), view rotation (clockwise/anticlockwise), printing, file open and save-as dialogs, copy selected text, and the five mouse-tool mode switches - Each action targets a viewer through its
Viewerproperty and keeps its enabled state (document open, page position, selection present) and checked state (active zoom fit or mouse tool) up to date automatically; all actions register in the losLab PDF category for the Action List editor - Added
TPDFlibViewer.EffectiveZoomPercentreporting the zoom actually in effect (including computed fit-width/fit-page factors) so zoom steps can build on it
Version 3.216.0
Added
- Added search-hit highlighting to the
TPDFlibViewercontrol:HighlightSearchHitssearches the whole document and paints a translucent bar over every match that stays in place while scrolling, zooming and rotating, withClearSearchHighlights,SearchHighlightCountand a configurableSearchHighlightColor TPDFlibSearchPanel.RunSearchnow also paints the hit bars in the attached viewer (the newHighlightInViewproperty, on by default, turns this off), so search results are visible on the pages, not just in the hit list
Version 3.215.0
Added
- Added mouse tool modes to the
TPDFlibViewercontrol through the newViewerModeproperty:vmSelecttext selection (default),vmHandpan-by-dragging with a grab cursor (a plain click still follows links),vmZoommarquee zoom that magnifies the dragged band to fill the viewport,vmSnapshotregion capture to the clipboard, andvmHighlightpersistent translucent region highlighting - Added
CaptureRegionto render any client region (pages plus highlights) into a caller-owned bitmap, theOnSnapshotevent andSnapshotToClipboardswitch for snapshot handling, andAddHighlightRegion/ClearHighlightRegions/HighlightRegionCountwith a configurableHighlightColorfor page-anchored highlights that survive zoom, rotation and navigation
Version 3.214.0
Added
- Added printing to the
TPDFlibViewercontrol:PrintDocshows the standard Windows print dialog (printer choice, page range, copies, collation) and hands the job to the library's printing engine, whilePrintDoc(False)prints the whole document to the default printer without any UI - Added
PrintDocRangefor fully programmatic viewer printing with an explicit printer name, page range, copy count and collation flag
Version 3.213.0
Added
- Added view rotation to the
TPDFlibViewercontrol:RotateClockwise90andRotateAntiClockwise90turn the displayed pages in 90-degree steps, and theViewRotationproperty reads or sets the angle directly (0, 90, 180 or 270) - Rotation is a pure view attribute: the document is never modified, link clicking and text selection keep working at every angle, fit-width and fit-page zoom modes adapt to the rotated page shape, and opening a new document resets the view to 0 degrees
- Rotated page bitmaps are cached per angle, so switching between angles reuses previous renderings instead of re-rendering
Version 3.212.0
Changed
- Improved XFA datasets SOM path compatibility:
GetXFAFormFieldValueandSetXFAFormFieldValuenow accept simple FormCalc-style predicate selectors such as$data.Receipt.Detail.[Total_Price > 200].Descriptionand update every matching data node when a predicate selects a subset
Version 3.211.0
Changed
- Improved XFA datasets SOM path compatibility:
GetXFAFormFieldValueandSetXFAFormFieldValuenow accept Data DOM class selectors#dataGroupand#dataValuewith numeric or wildcard occurrences, allowing class-based paths such as$data.Receipt.#dataGroup[0].#dataValue[0]
Version 3.210.0
Changed
- Improved XFA datasets SOM path compatibility:
GetXFAFormFieldValueandSetXFAFormFieldValuenow accept the$recordroot in non-record-processing packets, so paths such as$record.Taxand$record/Detail[0]/Total_Priceresolve from the outer data record element
Version 3.209.0
Changed
- Improved XFDF annotation interchange: annotation exports now write standard border style attributes
width,style, anddashesfrom PDF annotation/BSvalues, and annotation imports restore those attributes on inserted annotations
Version 3.208.0
Changed
- Improved XFDF annotation interchange: annotation exports now write standard
creationdateandopacityattributes from PDF annotation/CreationDateand/CAvalues, and annotation imports restore those attributes on inserted annotations
Version 3.207.0
Changed
- Improved XFDF annotation interchange: annotation exports now write standard
flagsnames from PDF annotation/Fvalues, and annotation imports restore those names to the inserted annotation flags
Version 3.206.0
Changed
- Improved XFA datasets SOM path compatibility:
GetXFAFormFieldValueandSetXFAFormFieldValuenow accept direct child wildcard selectors such as$data.Receipt.*.Total_Priceto read or update matching child branches without selecting same-name fields on the parent node
Version 3.205.0
Changed
- Improved XFA datasets SOM path compatibility:
GetXFAFormFieldValueandSetXFAFormFieldValuenow accept descendant selectors such as$data..Total_Priceand$data.Receipt..Total_Priceto read or update the first matching descendant data node
Version 3.204.0
Changed
- Improved XFA datasets SOM path compatibility:
GetXFAFormFieldValueandSetXFAFormFieldValuenow accept theparentproperty in paths such as$data.Receipt.Detail[1].parent.Taxto read or update a selected node's parent sibling data
Version 3.203.0
Changed
- Improved XFA datasets SOM occurrence handling:
GetXFAFormFieldValueandSetXFAFormFieldValuenow support[*]selectors such as$data.Receipt.Detail[*].Total_Priceto read or update every matching repeated data node
Version 3.202.0
Changed
- Improved XFA SOM path compatibility: XFA datasets and template field APIs now preserve literal periods in slash-delimited field paths and accept escaped periods such as
Line\.Itemin dot-delimited SOM paths
Version 3.201.0
Changed
- Improved XFA datasets path compatibility: XFA field value APIs now accept slash-delimited paths after standard data SOM roots such as
$data/...,xfa.datasets.data/..., andxfa.datasets/...
Version 3.200.0
Changed
- Improved XFA datasets SOM compatibility: XFA field value APIs now accept the standard
!data...short form, including slash-delimited!data/...paths
Version 3.199.0
Changed
- Improved XFA template path compatibility: template editing APIs now accept slash-delimited field paths returned by XFA field-name enumeration, including
$template/...paths
Version 3.198.0
Changed
- Improved XFA datasets namespace compatibility: field value APIs now read and update data nodes by local XML name when the business data inside the datasets packet uses its own namespace prefix, and field-name enumeration returns prefix-free paths
Version 3.197.0
Changed
- Improved XFDF annotation interchange: annotation exports now include the common
nameanddateattributes from PDF/NMand/M, annotation imports restore those values on inserted annotations, andSetAnnotStrPropertynow accepts tag 104 for annotation modified dates
Version 3.196.0
Changed
- Improved XFA field-name enumeration: field list APIs now scan every top-level data record in the datasets packet and return leaf data fields without adding container groups as fields
Version 3.195.0
Changed
- Improved XFA datasets compatibility: XFA field value APIs now read and update complete XDP packets whose datasets packet uses an unprefixed
dataelement
Version 3.194.0
Fixed
- Improved XFA template field updates: XFA template field APIs now accept standard template SOM roots such as
$templateandxfa.template, and template-only changes in complete XDP streams are saved correctly
Version 3.193.0
Changed
- Improved XFA field addressing: XFA field value APIs now accept standard data SOM roots such as
$dataandxfa.datasets.datain addition to relative field paths
Version 3.192.0
Changed
- Improved XFA XML packet handling: XFA streams with UTF-16 byte order marks or UTF-16 XML byte patterns now decode before XML parsing, so UTF-16 encoded form values remain available through XFA field read/write APIs
Version 3.191.0
Changed
- Improved XFA packet authoring:
SetXFAFromStringnow creates the requiredAcroFormcontainer when a document does not already have form data, replaces stale parsed XFA state when a complete XFA packet is stored, and keeps the saved packet available through XFA field read/write APIs
Version 3.190.0
Changed
- Improved XFDF annotation interchange: annotation exports now write the common
colorattribute from the PDF/CRGB array, and annotation imports now restorecolor="#RRGGBB"values into the inserted annotation color array
Version 3.189.0
Added
- Added XFDF annotation interchange APIs:
ExportAnnotationsToXFDF,ExportAnnotationsToXFDFString,ImportAnnotationsFromXFDFandImportAnnotationsFromXFDFStringnow read and write ISO 19444<annots>data for text-style annotation comments, including page, rectangle, title, subject and plain contents data
Version 3.188.0
Changed
- Improved XFDF rich text field import: fields with
<value-richtext>now preserve the rich text XML in the fieldRVvalue while still applying the plain<value>fallback when present
Version 3.187.0
Changed
- Improved XFDF form-data interchange for multi-select choice fields: repeated
<value>elements now import into the selected-value array, and exporting a multi-select choice field now writes one<value>element per selected item instead of flattening them into one escaped text node
Version 3.186.0
Changed
- Improved XFDF form-data export for rich text fields: fields with an
RVrich text value now include a<value-richtext>element while preserving the plain<value>fallback
Version 3.185.0
Changed
- Improved XFDF form-data import for rich text fields: when a field provides
<value-richtext>without a plain<value>, the importer now extracts the XHTML text content and applies it to the matching AcroForm field instead of skipping the field
Version 3.184.0
Changed
- Improved XFDF form-data interchange: exports now use the standard XFDF namespace with
xml:space="preserve", emit nested<field>elements for hierarchical AcroForm names, skip non-terminal parent field values, write file exports as UTF-8, and import whitespace-flexible XFDF with nested fields, single-quoted attributes, CDATA, XML entities, and numeric character references
Version 3.183.0
Added
- Added
SanitizeDocument(Flags)which strips sensitive content in one call: removes all global JavaScript, removes the catalog OpenAction, strips /A actions from every annotation, blanks Author/Subject/Keywords/Creator/Producer metadata (both /Info and XMP), and optionally deletes all annotations. Flag bitsSANITIZE_JAVASCRIPT/SANITIZE_ACTIONS/SANITIZE_METADATA/SANITIZE_ANNOTATIONS/SANITIZE_OPEN_ACTIONcombine;SANITIZE_ALLapplies every strip. Closes the classic data-leak hole where redaction removes visible content but leaves metadata or hidden scripts recoverable - Added
TPDFAnnots.RemoveAnnotAction(Index)to strip the /A action dictionary from an individual annotation (used by SanitizeDocument, also useful standalone)
Version 3.182.0
Added
- Image elements returned by
EnumPageElementsnow carry their real placement rectangle (Left/Top/Right/Bottom) instead of zeros. Backed by a newTPDFContentProgram.EnumImagePlacementsmethod that walks the content stream tracking the CTM (cm/q/Q) and maps eachDooperator's 1x1 unit square into page coordinates - Added four showcase demos: DocumentProperties (DocInfo/page-box/rotation/transition/viewer-preferences/XMP round-trip), FormProperties (per-field property grid: type/value/readonly/MaxLength/MultiLine/description), SignatureValidator (enumerate signature fields + verify + signer certificate), Reader (VCL TPDFlibViewer with open/navigate/zoom/copy-text)
Version 3.181.0
Added
- Added
SetXMPPropertyexposing the existing schema-aware XMP engine (PDFlibXMP) through the public facade: set any Dublin Core (dc:), XMP Basic (xmp:), Adobe PDF (pdf:), PDF/A ID (pdfaid:), PDF/UA ID (pdfuaid:), or XMP Media Management (xmpMM:) property by namespace + key without hand-writing RDF XML - Added
ImportFormDataFromFDF/ImportFormDataFromFDFStringwhich parse an FDF /Fields array (each<< /T (name) /V (value) >>) and apply each value to the matching AcroForm field by title, inverting the EscapePDFText octal/paren escaping. Closes the asymmetric export-only gap - Added
ExportFormDataToXFDF/ExportFormDataToXFDFString/ImportFormDataFromXFDF/ImportFormDataFromXFDFStringfor XFDF (XML Forms Data Format) bidirectional interchange - the modern XML counterpart of FDF - Made the six namespace-scoped XMP setters (
SetDublinCore,SetXMPBasic,SetAdobePDF,SetPDFA,SetPDFUA,SetXMPMM) public onTPDFlibXMPso advanced callers can drive the engine directly
Version 3.180.0
Added
- Added
SearchAndReplaceTextInContentwhich performs TRUE content-stream text replacement (rewriting the Tj/TJ/'/" show-text operators in place viaTPDFContentProgram.ReplaceTextRun), unlike the existing mask-basedSearchAndReplaceTextthat only overlays a rectangle on top of the original glyphs. The original text is gone from the stream and cannot be recovered. Locates hits viaSearchText, maps each hit rect to its covering instruction viaFindInstructionsInRect, rewrites, and writes the layer back
Version 3.179.0
Added
- Added a structured internal logger (
TPDFlibLogger) in a newLib/PDFlibLogger.pasunit with four levels (Debug/Info/Warn/Error), a host callback (OnLog), an optional thread-safe file sink, and an error-code-to-message map (PDFlibErrorMessage) that finally gives the existing numeric codes (1xx/3xx/4xx/5xx) human text. Exposed onTPDFlibvia theLoggerproperty - Added
RenderPagesToFilesParallelwhich renders a page range to one file per page using aTTaskpool with oneTPDFlibinstance per worker (TPDFlib is not thread-safe) and per-threadCoInitializefor GDI+ apartment safety. Scales near-linearly with CPU cores for CPU-bound raster output
Version 3.178.0
Added
- Added
EnumCertificatesto enumerate every certificate in a Windows system store ("MY", "Root", ...) returning subject, issuer, serial number, validity window, HasPrivateKey, and Qualified (eIDAS QCStatements extension, OID 0.4.0.1862.1.7, detected via a new built-in DER decoder in PDFlibASN1) - replaces the previous single-cert-by-CNSetSignProcessCertFromStorelimitation - Added
SetSignProcessCertFromStoreByHandleto select a signing certificate by raw PCCERT_CONTEXT handle obtained from enumeration, letting callers pick by any criterion (qualified filter, validity, fingerprint) rather than only by Subject CN - Added
RedactRegionwhich truly removes text, vector paths, and image XObjects whose painted area intersects a rectangle (editing the content stream so removed content cannot be recovered, unlikeMaskRectwhich only covers it), with optional black fill and /Redact annotation. Backed by a CTM-tracking content-stream analyser in PDFlibContentModel (FindInstructionsInRect) - Added minimal DER decoder functions (
DERDecodeLength,DERFindExtensionByOID) to PDFlibASN1 for in-process certificate extension inspection without CryptDecodeObjectEx
Version 3.177.0
Added
- Added page stitching APIs that compose existing pages into new layouts via vector Form XObject capture (preserving full vector fidelity, unlike content-stream concatenation):
StitchPageOverlayoverlays one page onto another at a position with optional opacity,StitchPagesSideBySideplaces two pages left/right on a new wider page, andStitchPagesVerticallystacks a page range into a new tall poster-style page - Added a composable watermark template layer in a new
Lib/PDFlibWatermark.pasunit:TPDFlibWatermarkBasewith nine-point positioning (wpTopLeft..wpBottomRightpluswpCustom),TPDFlibTextWatermark,TPDFlibImageWatermark, andTPDFlibCompositeWatermarkwhich applies a list of sub-watermarks recursively across a shared page range - Added
TPDFlib.ApplyWatermarkas a convenience entry point that delegates to a watermark template's own page range and settings
Version 3.176.0
Added
- Added named render-output format constants (
PDF_RENDER_BMP,PDF_RENDER_EMF,PDF_RENDER_EMFPLUS,PDF_RENDER_EMF_DUAL, etc.) that map 1:1 to the integerOptionsvalues accepted byRenderPageToFile,RenderPageToStream,RenderPagesToFiles, andRenderDocumentToFile - Added
TPDFlibMetafileFormatenum and the convenience methodsRenderPageToMetafileStreamandRenderPageToMetafileFile, which accept a named metafile variant (mfEMF, mfEMFPlus, mfEMFDual, mfWMF) instead of a bare integer - Added EMF+ Dual output mode (Options value 11 / mfEMFDual), which records both GDI and GDI+ commands in the same metafile for compatibility with older GDI-only consumers
- Added
TPDFlibClipboardFormatenum andRenderPageToClipboard, which places a rendered page on the Windows clipboard as an enhanced metafile (CF_ENHMETAFILE), a DIB bitmap (CF_DIB), the page Unicode text (CF_UNICODETEXT), or all three at once - Added a new
Lib/PDFlibClipboard.pasunit with low-level Win32 clipboard placement helpers used byRenderPageToClipboard - Added full per-monitor DPI awareness to
TPDFlibViewer: a new publicScreenDPIproperty, aCreateWndoverride that auto-detects the host monitor DPI viaGetDpiForWindow(with aGetDeviceCapsfallback), and aWM_DPICHANGEDhandler that rebuilds the layout and clears the bitmap cache when the window moves between monitors - Added
TPDFRenderer.SetEMFPlusMetafileTypeto select between EMF+ Only and EMF+ Dual recording at the renderer level
Fixed
- Fixed the
RenderPageToFilereference page where the Options value list was misplaced in the Page row and the Options cell was empty
Version 3.175.3
Added
- Added a Lib/PDFlibTableExport.pas unit that renders any TDataSet (FireDAC, ClientDataSet, query result) into a paginated PDF table with styled header, zebra striping, right-aligned numeric columns, and automatic page continuation, plus a Demo/Delphi/DataSetExport console demo that loads the RAD Studio customer.FDS sample via FireDAC and exports it
Version 3.175.2
Added
- Added end-to-end Demo/ReportBridges projects that build a minimal report in FastReport, QuickReport, and ReportBuilder and export it to PDF through the matching Addons bridge, with a dedicated build-ReportBridges.cmd that supplies the engine source paths and gating symbols so the standard demo build still compiles the projects as stubs
Version 3.175.1
Added
- Added a Delphi JBIG2 options matrix demo that sweeps SymbolExtract, SkipBlackDots, BlackDotSize, and LossyLevel combinations against CCITT G4 and Flate baselines, with per-row PDF, CSV, and summary outputs
- Added a Delphi Pattern showcase demo covering axial and radial RGB shaders, a Coons-patch mesh shader, and a custom tiling pattern applied as fill, stroke, and text colour
- Added a Delphi CCITT fax matrix demo comparing Group 3 1-D, Group 3 2-D, and Group 4 compression with BlackIs1 and Interpolate option bits, reporting each output size and the resulting /Filter name
- Added FastReport, QuickReport, and ReportBuilder export bridges under Addons that render a prepared report into a PDFlibPas PDF via the engine's native object, metafile, and DrawCommand surfaces respectively
Version 3.175.0
Changed
- Expanded the WorkflowGallery demo with an annotation variant matrix that records text highlight fills, markup styles, note icons, free text, caret, and stamp annotations in companion CSV and HTML reports
Version 3.174.0
Changed
- Expanded the C++Builder AdvancedWorkflowMatrix demo to map action navigation, PDF/A and AcroForm workflows, font diagnostics, streaming delivery, and the latest scan-compression helpers into the generated matrix reports
Version 3.173.0
Added
- Added the DeliveryWorkflowMatrix Delphi demo for streamed Web and CGI PDF output, page-thumbnail validation, and watermark delivery workflows using one generated PDF byte buffer
Version 3.172.0
Added
- Added outline tree convenience APIs for ordered sibling insertion, child creation, subtree deletion, and preorder outline enumeration with parent, sibling, level, destination page, open-state, and title details
Version 3.171.0
Added
- Added the FontDiagnosticsMatrix Delphi console demo for CJK and Unicode font paths, TrueType subset updates, installed-font probes, document font enumeration, and font diagnostics reports
Version 3.170.0
Added
- Added the CanvasMigrationMatrix Delphi console demo for Canvas DC migration, raw content and path entry points, Delphi color helpers, pattern-filled text, watermarking, page thumbnail workflows, and rendered validation previews
Version 3.169.0
Added
- Added dedicated LayerCompositionMatrix, TransparencyMaskMatrix, and ComplianceFormWorkflowMatrix Delphi console demos for optional-content print/export policy, Pattern/Form XObject composition, transparency mask comparison, PDF/A-1b success and failure examples, AcroForm action workflows, appearance rebuilds, and visible signature templates
Version 3.168.0
Added
- Added dedicated ImageCompressionMatrix and SecurityPermissionMatrix Delphi console demos with generated PDF, CSV, and HTML reports for image compression strategy selection, scan compression, JPEG render quality, and encrypted permission profile auditing
Version 3.167.0
Added
- Added named helper APIs for JBIG2 bitmap encoding, EMF import options, AcroForm event actions, and chained actions so callers can use explicit option switches instead of composing integer bitmasks manually
Version 3.166.0
Added
- Added a runnable C++Builder AdvancedWorkflowMatrix console demo with PDF, CSV, and HTML outputs that map advanced canvas migration, EMF import, image compression, AcroForm, signature, security, PDF/A, optional-content, pattern, and Form XObject workflows to C++Builder project entry points
Version 3.165.0
Added
- Added a Delphi action navigation matrix demo that demonstrates open-document actions, document-level JavaScript, embedded-file links, remote GoTo links, AcroForm event actions, Submit/Reset/Hide link helpers, and chained Next actions with PDF, CSV, and HTML outputs
Fixed
- Fixed remote file link helpers so AddLinkToFile, AddLinkToFileEx, AddLinkToFileDest, and local file launch links create one annotation and return instead of looping indefinitely
Version 3.164.0
Added
- Додано демонстраційний PDF/A guard matrix для Delphi, який перевіряє ранню відмову або дозволені шляхи під час налаштування режиму PDF/A, прозорості, blend modes, шифрування, JavaScript, мультимедіа, вбудованих файлів і workflows вкладених файлів PDF/A-3, з PDF, CSV і HTML звітами, що генеруються
Version 3.163.0
Added
- Додано явну матрицю bridge ReportAdapter для шляхів експорту FastReport, QuickReport, ReportBuilder, DBGrid і користувацького canvas, включно з CSV і HTML mapping output та PDF-сторінкою, що показує стратегію adapter для повторного використання
Version 3.162.0
Added
- Додано матрицю демонстрацій advanced workflow, яка генерує реальні результати для міграції canvas, параметрів import EMF, порівнянь стискання зображень, workflows дій AcroForm, видимих порожніх підписів, прав доступу, перевірок PDF/A-1b, optional content, patterns tiling, Form XObject, експорту таблиць у стилі DBGrid та звіту про пікове споживання пам’яті для великих файлів
Version 3.161.0
Added
- Додано helper-и Delphi для компактного побудування open-document action, дій подій видимості полів форми, встановлювачів кольорів TColor і gray, а також прямої вставки raw content, path, text і matrix у content stream
Version 3.160.0
Added
- Додано helper-и Delphi для стискання відсканованого зображення в JBIG2, одноразового налаштування image mask і color-key transparency, ланцюжка дій GoTo та читабельних імен подій AcroForm для JavaScript або призначення наявних actions
- Розширено ImportEMFFromFileEx і ImportEMFFromStreamEx так, що прапорці Options можуть примусово вмикати import bitmap, дозволяти JPEG-перестиснення кольорових зображень EMF і запитувати параметри керування обробкою GDI+
Version 3.159.1
Changed
- Покращено SaveToStream і збереження bound output stream, так що великі об’єкти PDF stream записуються обмеженими порціями, а не копіюються кожен в один проміжний рядок виводу
Version 3.159.0
Added
- Додано helper-и розміщення зображень, які малюють або вписують задане зображення та одразу звільняють його handle, з точками входу Delphi, DLL і ActiveX для зменшення пікового споживання пам’яті в одноразових workflows створення зображень
- Додано RenderPageToMonochromeFileEx для 1-бітного BMP-рендеру з перетворенням за порогом і очищенням ізольованих чорних пікселів перед workflows стискання відсканованих зображень
Version 3.158.1
Added
- Додано демо Delphi для повторно використовуваних workflows експорту у стилі звіту, імпорту rich text з RichEdit в EMF і комбінованих сценаріїв thumbnail сторінки, annotation, Form XObject, таблиць, стискання, JavaScript і bound stream output
Version 3.158.0
Added
- Додано API керування шифруванням metadata з точками входу Delphi, DLL і ActiveX: SetEncryptMetadata може писати PDF Standard-security з нешифрованими XMP metadata streams, а GetEncryptMetadata повідомляє про стан /EncryptMetadata в черзі або вже завантажений
Version 3.157.0
Added
- Додано прямі API малювання patterns tiling з точками входу Delphi, DLL і ActiveX: BeginTilingPattern створює тимчасову поверхню малювання клітинки pattern, EndTilingPattern реєструє її як pattern для повторного використання, а CancelTilingPattern скасовує побудову, не залишаючи названого pattern
Version 3.156.0
Added
- Додано helper-и bound output stream у Delphi: BeginOutputToStream, EndOutputStream, CancelOutputStream і OutputStreamActive дозволяють коду streaming, web і report-export підключати цільовий TStream, завершувати його через наявний chunked writer або скасовувати очікуваний target без передавання володіння stream
Version 3.155.0
Added
- Додано Abort, Aborted і ResetAbort для викликів Delphi, DLL і ActiveX, щоб програми могли позначати екземпляр як скасований і не запускати save або append output, доки прапорець не буде очищено
Version 3.154.0
Added
- Додано helper-и page-thumbnail для варіантів import зображень і джерел у пам’яті, запити й setters груп optional content за назвою групи, а також SetOpenActionNamedDestination для переходу під час відкриття документа до іменованих destinations
Fixed
- GetDestName тепер розв’язує явні handle масивів destination, включно з масивами, повернутими з іменованого open-document action
Version 3.153.0
Added
- Додано зручні API для chained form actions, тригерів полів Hide і ImportData, початкових станів optional content group, необов’язкових import EMF і import прозорих зображень color-key
Version 3.152.0
Added
- Додано автоматичне створення URL link під час малювання тексту, helper-и import зображень CCITT Group 3/4, helper-и прямих зображень JBIG2, розширені wrappers import EMF, helper-и приєднання image mask, створення видимих полів підпису та helper-и подій і actions полів форми для workflows JavaScript, SubmitForm і ResetForm
Version 3.151.0
Added
- Додано DrawPie, DrawChord, DrawEllipticPie і DrawEllipticChord для явного малювання замкнутих кругових та еліптичних дуг з outline, fill або fill-and-outline
Version 3.150.0
Added
- Додано NewGraphicsState і SetGraphicsState, щоб виклики могли створювати ресурси ExtGState для повторного використання для налаштувань прозорості fill і stroke, line width, line cap, line join і miter-limit
Version 3.149.1
Fixed
- Виправлено дубльовані ActiveX dispatch IDs для методів Form XObject і miter-limit, щоб пізно зв’язані COM-виклики однозначно розв’язували кожен метод
Version 3.149.0
Added
- Додано SetMiterLimit для керування відношеннями stroke miter-limit для шляхів, що використовують miter joins
- BeginFormXObject, EndFormXObject і CancelFormXObject стали доступними через API DLL і ActiveX
Version 3.148.0
Added
- Додано повторно використовувані API побудови Form XObject: BeginFormXObject, EndFormXObject і CancelFormXObject дозволяють малювати повторно використовуваний шаблон звичайними командами малювання сторінки та розміщувати його багаторазово через API малювання захоплених сторінок
Version 3.147.0
Added
- Додано SetTextTilingPattern і SetLineTilingPattern, щоб patterns tiling захоплених сторінок могли повторно використовуватися для тексту, underline і stroke-графіки без дублювання команд малювання
Fixed
- Кольори shader і tiling patterns зі stroke тепер записують оператор stroking pattern color замість оновлення стану nonstroking color
Version 3.146.0
Added
- Додано BeginOptionalContent і EndOptionalContent, щоб виклики могли позначати лише наступні команди малювання за допомогою optional content group без переписування існуючого content stream
Fixed
- Оператори marked-content для закриття scope тепер негайно flush-яться при закритті optional content, tagged PDF або artifact scopes наприкінці content stream
Version 3.145.0
Added
- Додано SetTransparencyEx, щоб виклики могли задавати окремі значення прозорості fill і stroke для тексту й графіки, що будуть намальовані пізніше, зберігаючи наявну поведінку автоматичного оновлення до PDF 1.4
Version 3.144.0
Added
- Додано AddLinkToNamedDestination, щоб hotspot сторінки міг перейти до іменованого destination всередині того ж документа без розв’язання target page під час створення link
Fixed
- Читачі action annotation тепер повертають no action для сторінок без annotations замість розіменування порожнього annotation cache
Version 3.143.0
Added
- Додано API керування actions полів форми, щоб виклики могли прив’язувати наявний action до field trigger, перевіряти typed trigger action і видаляти основні або додаткові actions поля
Fixed
- FormFieldJavaScriptAction тепер відхиляє документи PDF/A і недопустимі імена trigger замість запису несумісних dictionaries actions полів
Version 3.142.0
Added
- Додано API action chaining, щоб виклики могли додавати next-actions URI, named і JavaScript до наявних annotation, outline або action поля форми та перевіряти chained actions через GetActionNextCount і GetActionNextInfo
Version 3.141.0
Нові можливості
- Додано
AddLinkToSubmitFormтаAddLinkToResetForm, щоб активні області сторінки могли надсилати або скидати поля AcroForm через стандартні дії PDF без JavaScript
Version 3.140.0
Нові можливості
- Додано
AppendToStream, щоб робочі процеси інкрементного оновлення могли записувати безпосередньо у наданий викликачем потік замість попереднього матеріалізування оновлення якAnsiString
Зміни
SaveToStreamтепер серіалізує безпосередньо у цільовий потік, аAppendToString(1)тепер повертає лише розділ інкрементного оновлення без копіювання вихідних байтів джерела у тимчасовий буфер
Version 3.139.0
Нові можливості
- Додано
GetAnnotReplyToтаGetAnnotReplyType, щоб гілковані відповіді на анотації можна було перевіряти через іменовані методи доступу для читання замість загальних тегів властивостей анотацій
Version 3.138.0
Нові можливості
- Додано приклад Delphi
DocumentInspectionWorkbenchдля пакетної перевірки PDF-файлів із комбінованою діагностикою шрифтів, вибіркою зображень, виявленням колірного простору, часом завантаження та звітами у форматах JSON, CSV і HTML
Version 3.137.0
Нові можливості
- Додано приклад Delphi
ImageDecodeBenchmarkдля вимірювання виявлення зображень сторінки, розкодованих байтів зображень та виявлення колірного простору сторінки зі звітами про час у форматах CSV і HTML
Version 3.136.0
Нові можливості
- Додано
GetDocumentFontDiagnosticsтаTPDFlibFontDiagnosticsдля підсумовування кількості вбудованих шрифтів, підмножин шрифтів, Standard 14, CID, Type3 та невідомих шрифтів у документі за один виклик
Version 3.135.0
Нові можливості
TPDFlibSignatureVerifier.VerifySignerCertificateChainтепер будує вбудований ланцюжок сертифікатів підписувача за допомогою Windows CryptoAPI і повертаєvsValid, лише якщо ланцюжок задовольняє базову політику довіри Windows, тоді як самопідписані або іншим чином ненадійні сертифікати підписувача повертаютьvsInvalidбез зміни результату цілісності вмістуVerifySignature
Version 3.134.0
Виправлення
TPDFlibSignatureVerifier.VerifySignatureтепер перевіряє застарілі підписиadbe.pkcs7.sha1, повертаючиvsValid, коли підписаний дайджест відповідає охопленим байтам/ByteRange, іvsInvalidпісля зміни охопленого вмісту
Version 3.133.0
Нові можливості
- Додано
RenderPagesToFilesтаDARenderPagesToFilesдля рендерингу довільних діапазонів сторінок у пронумеровані вихідні файли з повторним використанням налаштувань рендерера для вибраних сторінок
Version 3.132.0
Нові можливості
- Додано зручні штампувальники
AddPageHeaderтаAddPageFooter, які розміщують текст із фіксованим верхнім або нижнім відступом на кожній сторінці діапазону з вирівнюванням по лівому краю/по центру/по правому краю та розширенням токенів (&Pпоточна сторінка,&Nвсього сторінок,&Dдата,&Tзаголовок документа,&&буквальний амперсанд) StampTextтаStampImageзsoUnderlayтепер дійсно розміщують вміст під наявним вмістом сторінки, додаючи новий шар вмісту на початок (раніше вони малювали поверх, якsoOverlay); підтримується новим методом дерева сторінокPrependContentLayer
Version 3.131.0
Нові можливості
- Додано
ScalePage(ScaleX, ScaleY, Anchor), який масштабує вміст вибраної сторінки шляхом обгортання кожного шару вмісту в блок графічного стануq sx 0 0 sy tx ty cm ... Qта зміни розміру MediaBox і CropBox; якір зберігає лівий нижній початок координат (0), центрує вміст (1) або зберігає верхній лівий (2) - Розширено
EnumPageElementsновим типом елементаekPath: кожна сторінка тепер також повідомляє свої векторні шляхи з обмежувальною рамкою, кількістю точок, прапорцем замикання та оператором малювання, витягнутими з потоків вмісту через структуровану модель вмісту
Version 3.130.0
Нові можливості
- Додано три API для оптимізації розміру файлу, які стискають завантажені документи під час повторного збереження:
SubsetEmbeddedFontsперезаписує кожну вбудовану програму шрифту TrueType (FontFile2) до символів Unicode, які документ фактично рендерить за допомогою служби FontSub.dllCreateFontPackage;DownsampleImages(MaxDPI, Quality, Filter)декодує кожен об'єкт зображення (image XObject) вище цільового DPI, виконує повторну вибірку (коробкову (box) або білінійну (bilinear)) та повторно кодує його як JPEG або PNG;NormalizeLZWStreamsперезаписує кожен потік, який все ще відфільтровано за допомогою LZWDecode, на FlateDecode через наявний декодер LZW та кодувальник Flate, зберігаючи параметри Predictor
Version 3.129.0
Нові можливості
- Додано API створення сіткового затінення для чотирьох типів затінення, які раніше мали лише підтримку читання/аналізу:
NewRGBFreeFormTriangleMesh(ShadingType 4, трикутники Гуро вільної форми),NewRGBLatticeTriangleMesh(ShadingType 5, трикутники Гуро у формі решітки),NewRGBCoonsPatchMesh(ShadingType 6, сітка латок Кунса) таNewRGBTensorPatchMesh(ShadingType 7, тензорна сітка латок) — кожне з них створює іменований шаблон сіткового затінення з плоского списку вершин або латок із вибірковою бітовою глибиною координат/кольорів та обмежувальною рамкою, доступний для вибору за допомогоюSetFillShader/SetLineShader/SetTextShaderяк і наявні осьові та радіальні затінення
Version 3.128.0
Нові можливості
- Додано стрічку мініатюр для засобу перегляду:
TPDFlibThumbnailBarпоказує мініатюру кожної сторінки, яка ліниво рендериться, коли рядки прокручуються в поле зору, з номером сторінки внизу; клацання на мініатюру переводить приєднаний засіб перегляду на цю сторінку — завершуючи сімейство елементів керування засобу перегляду (засіб перегляду, панель закладок, панель пошуку, мініатюри)
Version 3.127.0
Нові можливості
- Додано панель пошуку для засобу перегляду:
TPDFlibSearchPanel.RunSearchшукає у всьому приєднаному документі та виводить один рядок для кожного збігу з номером його сторінки та відповідним текстом; клацання на збіг переводить засіб перегляду на цю сторінку
Version 3.126.0
Нові можливості
- Додано панель закладок для засобу перегляду:
TPDFlibOutlineViewerвиводить дерево структури документа з відступами та переводить приєднаний засіб перегляду (черезAttachViewer) на цільову сторінку закладки під час клацання; він побудований на базовому класі панелі багаторазового використання, який згодом спільно використовують бічні панелі
Version 3.125.0
Нові можливості
- Додано виділення тексту до елемента керування засобу перегляду: перетягуйте за допомогою лівої кнопки миші, щоб вибрати, натисніть Ctrl+C або викличте
CopySelectedText, щоб скопіювати виділення до буфера обміну; захоплений текст доступний через властивістьSelectedText, впорядкований зверху вниз із розривами рядків між смугами - Додано
GetTextInRegion, який повертає текст прямокутної області сторінки безпосередньо — той самий пошук на основі блоків, який використовує виділення мишею, доступний для власних інтерфейсів виділення
Version 3.124.0
Нові можливості
- Елемент керування засобу перегляду тепер попередньо рендерить сусідні сторінки у фоновому потоці, тому перегортання вперед або назад миттєво показує наступну сторінку; робочий потік використовує власний екземпляр документа і передає завершені рендеринги до кешу без блокування інтерфейсу користувача (UI)
- Додано інтерактивність посилань до засобу перегляду: клацання на анотацію посилання викликає
OnLinkClickз номером сторінки та тим самим типізованим зведенням дій, яке створюєGetAnnotActionInfo(веб-адреса, цільове призначення документа, іменована дія тощо);LinkActionAtPagePointрозкриває базову перевірку попадання (hit test) для власної обробки
Version 3.123.0
Нові можливості
- Елемент керування засобу перегляду отримав безперервне прокручування:
SetDisplayModeперемикаєTPDFlibViewerміж односторінковим відображенням та безперервним вертикальним прокручуванням усього документа, при цьому рендеряться лише сторінки, видимі в області перегляду, а поточна сторінка відстежує позицію прокручування (викликаючиOnPageChange, коли сторінки потрапляють у поле зору) - Відрендерені сторінки тепер зберігаються у кеші растрових зображень (bitmap cache) за алгоритмом найменш використовуваних останнім часом (least-recently-used), тому прокручування вперед-назад не призводить до повторного рендерингу; бюджет пам'яті за замовчуванням становить 128 МБ і налаштовується за допомогою
SetCacheLimit, витісняючи найстаріші сторінки, коли бюджет зменшується або заповнюється - Додано прокручування коліщатком миші та навігацію за допомогою клавіатури до засобу перегляду: PageUp/PageDown (кроки сторінки в односторінковому режимі, кроки області перегляду в безперервному режимі), клавіші зі стрілками, Home та End
Version 3.122.0
Нові можливості
- Додано інтерактивний елемент керування засобу перегляду PDF:
TPDFlibViewer— це елемент керування VCL з можливістю прокручування, який відкриває документ із файлу або приєднується до наявного екземпляраTPDFlib, відображає сторінки за допомогою вибраного рушія рендерингу (GDI+, Cairo або PDFium) та пропонує навігацію сторінками (GoToPage/NextPage/PrevPageз подієюOnPageChange) та керування масштабом — фіксований відсоток, за шириною (fit-to-width) або за сторінкою (fit-to-page), що перераховується автоматично при зміні розміру елемента керування; сторінки, ширші за область перегляду, прокручуються, вужчі сторінки центруються - Додано пакет часу розробки (design-time package) (
Package\PDFlibViewerPkg.dpk), який реєструє елемент керування на сторінці палітри losLab PDF для використання шляхом перетягування в IDE
Version 3.121.0
Нові можливості
- Автоматичне формування складної писемності в
DrawText: текст, що містить арабські, івритські, індійські або інші символи складної писемності, тепер виявляється та формується автоматично — контекстні форми літер, обов'язкові лігатури та впорядкування справа наліво виходять правильно без змін у коді; імена standard-14 відображаються на їхні сумісні за метрикою встановлені гарнітури (Helvetica на Arial, Times на Times New Roman, Courier на Courier New), аGetTextWidthвимірює через той самий прохід формування, тому вирівнювання залишається послідовним; латинський, кириличний, грецький текст і текст CJK зберігає свій існуючий шлях малювання байт за байтом - Додано
SetTextShapingдля перемикання автоматичної маршрутизації (увімкнено за замовчуванням; передайте 0, щоб відновити точну поведінку до формування (pre-shaping))
Version 3.120.0
Зміни
- Супутні шрифти для сформованого тексту (shaped-text) тепер зводяться до підмножини під час збереження лише до гліфів, які відображає документ, різко зменшуючи вихідні файли (повна програма шрифту об'ємом понад мегабайт зменшується до використаних гліфів); шрифт підмножини зберігає свою нумерацію гліфів, містить позначене як підмножина ім'я
BaseFontта реальну ширину/Wдля кожного гліфа, а також отримує карту ToUnicode, яка перетворює кожен сформований гліф назад у його вихідні символи — тому копіювання або витягування результатуDrawShapedTextповертає початковий рядок, включаючи обидві літери за лігатурою лям-аліф
Version 3.119.0
Нові можливості
- Додано малювання тексту складної писемності:
DrawShapedTextформує арабські, івритські та інші рядки зі складною писемністю перед їх малюванням — контекстні форми літер, обов'язкові лігатури, такі як лям-аліф, та впорядкування справа наліво виходять правильно — і записує сформовані гліфи через супутній шрифт Type0 (Identity-H), що вбудовує всю програму шрифту, тож форми без власного коду символу рендеряться точно; створюється один супутній шрифт для гарнітури і використовується повторно під час викликів - Додано
GetShapedTextWidth, який вимірює текст через той самий прохід формування, тому злигатований текст (ligated text) вимірюється на його справжню намальовану ширину — використовуйте його для вирівнювання по правому краю або по центру сформованих абзаців
Version 3.118.0
Нові можливості
- Додано основу для формування тексту зі складною писемністю (complex-script text shaping): нова прив'язка Uniscribe (usp10.dll) перетворює арабські, івритські та інші рядки зі складною писемністю на правильно впорядковані та сформовані послідовності гліфів — контекстні арабські форми, обов'язкові лігатури, такі як лям-аліф, та впорядкування справа наліво — повідомляючи про індекс гліфа шрифту, відступ (advance) та кластер вихідного символу для кожного гліфа; це механізм формування (shaping engine), на якому пізніші версії будуватимуть шлях малювання, і він завантажується ліниво, тому платформи без Uniscribe просто зберігають існуючий посимвольний шлях
Version 3.117.0
Нові можливості
- Додано інтроспекцію профілю ICC:
GetOutputIntentICCInfoаналізує профіль ICC, прикріплений до OutputIntent документа, і повідомляє його версію, клас пристрою, колірний простір даних, простір з'єднання профілю (profile connection space), намір рендерингу (rendering intent) та кількість компонентів — що корисно для перевірки умов друку файлів PDF/A та PDF/X; обробка колірного простору ICCBased рендерером тепер також отримує кількість компонентів із самого заголовка профілю, коли колірний простір затінення (shading) не містить ні/Alternate, ні/N
Version 3.116.0
Нові можливості
- Додано режим витягування тексту з урахуванням таблиць:
GetPageTextз опцією 10 кластеризує ліві краї текстових блоків сторінки в глобальні позиції стовпців та виводить рядки, розділені табуляцією (TSV), тож табличні макети витягуються як готові до імпорту TSV з вертикально вирівняними клітинками, що залишаються вирівняними між рядками
Version 3.115.0
Нові можливості
- Додано спуск шпальт (page imposition):
ImposePagesNUpрозміщує кожну сторінку документа на нових аркушах у сітці n-up (2-up, 4-up, 9-up або будь-якому компонуванні Columns x Rows), де кожна сторінка пропорційно вписується та центрується у своїй клітинці як живий векторний вміст, або — з опцією буклету — створює аркуші для шиття внакидку (saddle-stitch), поєднання сторінок яких складається в буклет під час двостороннього друку та складання в стопку
Version 3.114.0
Нові можливості
- Розширено типізовані зчитувачі дій
GetAnnotActionInfoтаGetOutlineActionInfoна ще чотири типи дій — Hide (з кількістю прихованих цілей та прапорцем hide/show), SubmitForm (URL-адреса відправки та кількість полів), ResetForm (кількість полів) та ImportData (вихідний файл) — а також для розкриття корисного навантаження (name payload) іменованих дій (наприклад,NextPage); обидва зчитувачі тепер спільно використовують один парсер, тому посилання в анотаціях та закладки повідомляють ідентичну інформацію
Version 3.113.0
Нові можливості
- Додано помічники форматування полів форми:
SetFormFieldNumberFormat(десяткові знаки, стиль роздільника, стиль від'ємних чисел та розташування валюти),SetFormFieldPercentFormatтаSetFormFieldDateFormat(рядки формату дати Acrobat, такі якmm/dd/yyyy) кожен записує стандартну пару JavaScript для форматування Acrobat у додаткові дії поля — фільтр натискань клавіш плюс форматувальник відображення — тому сумісні засоби перегляду валідують введення та рендерять відформатовані значення без написаного вручну JavaScript
Version 3.112.0
Нові можливості
- Додано створення звукової анотації (Sound annotation):
AddSoundAnnotationFromFileчитає нестиснений файл PCM WAV (8 або 16 біт, моно або стерео) і вбудовує його зразки (samples) за анотацією зі значком динаміка як потік/Soundу підписаному кодуванні, очікуваному механізмом звуку PDF, завершуючи цикл (round trip) з наявними зчитувачамиGetAnnotSoundToFile/GetAnnotSoundToString
Version 3.111.0
Нові можливості
- Додано гілковані відповіді на анотації (threaded annotation replies, ISO 32000-1 §12.5.6.3):
AddAnnotationReplyдодає відповідь до будь-якої існуючої анотації як приховану текстову анотацію (Text), чий/IRTпосилається на ціль за допомогою відношення відповіді/RT, тому Acrobat та інші засоби перегляду показують її як гілку під ціллю на панелі коментарів; поєднуйте зAddAnnotationStateта обміном коментарями FDF для повноцінних циклів спільного рецензування
Version 3.110.0
Нові можливості
- Додано рендеринг сіткових (mesh) та заснованих на функціях (function-based) затінень (shading), завершуючи покриття всіх семи типів затінень PDF: сітки трикутників Гуро вільної форми (free-form Gouraud triangle meshes, тип 4), сітки Гуро у формі решітки (lattice-form Gouraud meshes, тип 5), сітки латок Кунса (Coons patch meshes, тип 6) та тензорні сітки латок (tensor-product patch meshes, тип 7) декодуються з їхніх запакованих бітами потоків даних — включаючи прапорці латок зі спільним краєм, відображення значень
/Decodeта додаткові колірні/Functionградієнти — і малюються за допомогою власних градієнтів сітки рушія Cairo; засновані на функціях затінення (тип 1) апроксимуються шляхом вибірки (sampling) функції затінення над її доменом у дрібну сітку латок; підтримувані колірні простори охоплюють DeviceRGB, DeviceGray, DeviceCMYK та альтернативи ICCBased (рушій GDI+ не має примітиву градієнта сітки і залишає ділянки з сітковим затіненням незамальованими)
Version 3.109.0
Нові можливості
- Завершено фреймворк редагування вмісту (фаза 4) редагуванням на рівні тексту:
TPDFContentProgram.GetTextRunsперелічує інструкції відображення тексту сторінки з активним ресурсом шрифту та розміром для кожної (відстежуючи стан шрифту через вкладеність save/restore), аReplaceTextRunзамінює показаний текст на місці — справжня заміна в потоці вмісту (content-stream), яка зберігає початкову позицію, шрифт та колір, на відміну від підходів на основі накладання, які маскують старий текст і малюють поверх нього
Version 3.108.0
Нові можливості
- Додано об'єктну модель для геометрії сторінки до фреймворку редагування вмісту (фаза 3):
TPDFContentProgram.LiftPathпіднімає об'єкт шляху (оператори побудови move/line/curve/rectangle плюс оператори відсікання та малювання, що його завершують) у придатний для редагуванняTPDFPathіз підшляхів (subpaths) та сегментів;TPDFPath.Transformзастосовує афінну матрицю до кожної точки (переміщення, масштабування, обертання або нахил існуючих ілюстрацій);LowerPathзаписує змінену геометрію назад поверх оригінальних інструкцій, підготовлену дляWritePageContentLayer
Version 3.107.0
Нові можливості
- Розширено фреймворк редагування вмісту (фаза 2) зручностями на рівні інструкцій у
TPDFContentProgram:InsertFromSourceаналізує фрагмент вмісту та вставляє його інструкції на будь-яку позицію;SetOperandперезаписує один операнд із синтаксису джерела (перенумеровує координату, змінює колір заливки);OperandTextзчитує операнд назад;InstructionGroup,FindNextOpтаFindNextGroupздійснюють навігацію списком інструкцій за оператором або за категорією операторів ISO 32000-1
Version 3.106.0
Нові можливості
- Додано першу фазу фреймворку структурованого редагування вмісту:
ParsePageContentLayerдекодує шар вмісту сторінки у придатну для редагуванняTPDFContentProgram— список інструкцій, кожна з яких є оператором вмісту PDF (всі 73 оператори ISO 32000-1 Table 51) із декодованими об'єктами операндів — аWritePageContentLayerсеріалізує програму назад у сторінку, тож абоненти (callers) можуть аналізувати, перевіряти, видаляти або змінювати порядок інструкцій малювання та перезаписувати сторінку;GetPageContentLayerCountповідомляє кількість шарів вмісту, які редагуються незалежно; джерело випромінювання зберігає поведінку (незмінений цикл туди-сюди відтворюється ідентично по пікселях), невідомі оператори виживають без змін, а вбудовані зображення (inline images) переносяться дослівно
Version 3.105.0
Нові можливості
- Додано режим витягування тексту в порядку читання:
GetPageTextз опцією 9 повертає текст сторінки у візуальному порядку читання за допомогою рекурсивного аналізу пробілів (XY-cut), тому багатоколоночні макети виходять колонка за колонкою — спочатку заголовок на всю ширину, потім уся ліва колонка, потім права колонка — замість чергування колонок рядок за рядком, як це роблять геометричні впорядкування згори-потім-зліва
Version 3.104.0
Нові можливості
- Додано інтроспекцію сертифіката підписувача до засобу перевірки підписів:
GetSignerCertificateдекодує корисне навантаження PKCS#7 першого поля підпису та повертає типізоване зведення вбудованого сертифіката підписувача — відображувані імена суб'єкта (subject) та видавця (issuer), серійний номер у звичайній шістнадцятковій формі, вікно дійсності UTC (NotBefore/NotAfter) та прапорець зручності, який повідомляє, чи знаходиться сертифікат наразі в межах цього вікна; підписувач зіставляється серед вбудованих сертифікатів за видавцем і серійним номером
Version 3.103.0
Нові можливості
- Додано
NewRGBRadialShader, радіальний аналогNewRGBAxialShader: реєструє іменований радіальний градієнт із двох кіл (ShadingType 3, ISO 32000-1 §8.7.4.5.3), що змішується між двома кольорами RGB, із можливістю розширення кольору за межі кіл; виберіть його за допомогою наявногоSetFillShader,SetLineShaderабоSetTextShaderдля малювання кругових заливок, обведень (strokes) та тексту зі "світінням" (glow)
Version 3.102.0
Нові можливості
- Додано рендеринг радіального (ShadingType 3) градієнта (ISO 32000-1 §8.7.4.5.4): рендерер сторінки тепер малює радіальні затінення з двох кіл, що використовуються операторами
shта заливками шаблону затінення (shading-pattern fills), на додаток до раніше підтримуваних осьових (axial, ShadingType 2) градієнтів; підтримується як через растрові рушії GDI+, так і через Cairo з багатоколірними функціями зупинки (multi-stop colour functions), колірними просторами DeviceRGB/DeviceCMYK/DeviceN/Separation/ICCBased та обробкою/Extend
Version 3.101.0
Нові можливості
- Додано ефекти хмарної межі (cloudy border effects, ISO 32000-1 §12.5.4):
SetAnnotCloudyEffectперетворює межу анотацій Square, Circle, Polygon або FreeText на "хмару змін" (revision cloud) зі з'єднаних півкіл шляхом запису словника ефектів межі/BE, з інтенсивністю 1 або 2, що відповідає стилям Cloudy в Acrobat, та 0, що знову видаляє ефект;GetAnnotCloudyEffectзчитує налаштування назад (0 = немає хмари, інакше інтенсивність 1..2)
Version 3.100.0
Нові можливості
- Додано стани перевірки анотацій (annotation review states, ISO 32000-1 §12.5.6.3):
AddAnnotationStateзаписує зміну статусу перевірки для наявної анотації шляхом додавання прихованої текстової анотації (Text), чий/IRTвказує на ціль, а її/State+/StateModelнесуть статус, підтримуючи модельReview(None/Accepted/Rejected/Cancelled/Completed) та модельMarked(Unmarked/Marked), що використовуються робочим процесом огляду коментарів Acrobat;GetAnnotStateтаGetAnnotStateModelзчитують записані рядки назад із будь-якої анотації (порожньо, якщо відсутні)
Виправлення
- Виправлено помилку під час завантаження, яка перешкоджала запуску програм, створених із останніми версіями розробки (пошук імені сертифіката Windows був прив'язаний до неіснуючої точки входу DLL), та відновлено регресії компіляції під час імпорту коментарів FDF, обертання діапазону сторінок та шляхів прапорців підпису
Version 3.99.0
Added
- Додано API для читання відбитка документа та переходів:
GetDocumentFileIDповертає постійний ідентифікатор документа з масиву трейлера/ID(перший елемент у шістнадцятковому кодуванні), що корисно як стабільний ключ кешу або відбиток документа;GetPageTransitionє аналогом читання дляSetPageTransition, який повертає стиль переходу як типізоване значенняTPDFlibPageTransition, а також тривалість показу та тривалість переходу шляхом зворотного відображення збережених записів/Trans/S,/Dmта/M
Version 3.98.0
Added
- Додано обертання діапазону сторінок та інтроспекцію мініатюр:
RotatePageRangeзастосовує обертання 0/90/180/270 до кожної сторінки в діапазоні (огортаючи наявну для однієї сторінкиRotatePage, тому викликачам більше не потрібен цикл для кожної сторінки);HasPageThumbnailповідомляє, чи містить сторінка запис/Thumb;GetPageThumbnailInfoчитає ширину, висоту та кількість бітів на компонент для мініатюрного зображення XObject
Version 3.97.0
Added
- Додано розширені читачі властивостей анотацій:
GetAnnotColorчитає масив кольорів/C(0..1 RGB, з прапорцем HasColor, що відрізняє “немає явного кольору” від “явний чорний”);GetAnnotBorderWidthчитає/BS /W, повертаючись до застарілого масиву/Borderу разі відсутності;GetAnnotOpacityчитає альфа-канал обведення/CA(типово 1.0);GetAnnotCreationDateчитає часову позначку/CreationDate;GetAnnotFlagsчитає байт прапорців видимості/друку/F
Version 3.96.0
Added
- Додано API інтроспекції безпеки для читання:
IsEncryptedповідомляє, чи містить завантажений документ словник/Encrypt;GetEncryptionLevelповертає типізовану надійність (0=none, 1=RC4-40, 2=RC4-128, 3=AES-128, 4=AES-256, 5=AES-256 Acrobat X), що відповідає параметрам шифрування під час запису;GetUserPermissionsповертає необроблене слово дозволу/Pдля безпосередньої перевірки бітів;IsOwnerPasswordповідомляє, чи був документ відкритий з обліковими даними власника
Version 3.95.0
Added
- Додано вдосконалений друк і заміну тексту:
PrintDocumentAdvancedкерує повним налаштуванням DEVMODE принтера (двосторонній друк, орієнтація, колір, якість друку, розмір паперу, лоток для паперу) на додаток до кількості копій/сортування за допомогою типізованого записуTPDFlibPrintSettings, застосовуючи кожне нестандартне поле через наявний механізм користувацького профілю принтера;SearchAndReplaceTextвиконує пошук у діапазоні сторінок і для кожного збігу маскує початковий текстовий блок непрозорим білим прямокутником і перемальовує текст заміни на початку блоку у вибраному користувачем шрифті, що відтворює поведінку накладання-заміни функції SearchAndReplace у PDFtoolkit
Version 3.94.0
Added
- Додано обмін анотаціями через FDF (“Export/Import Comments” в Acrobat):
ExportAnnotationsToFDFStringтаExportAnnotationsToFDFпроходять/Annotsкожної сторінки і серіалізують кожну анотацію як запис/Type /Annotусередині масиву/Annotsформату FDF, що містить/Subtype,/Contents,/Rect, мітку автора/T,/Subjта 0-індексований індекс/Page;ImportAnnotationsFromFDFStringтаImportAnnotationsFromFDFаналізують такий FDF за допомогою невеликого кінцевого автомата і відтворюють кожен запис як нову анотацію на відповідній сторінці, зберігаючи повний словник анотацій замість того, щоб згортати його до липкої нотатки
Version 3.93.0
Added
- Додано API для сертифікації підпису та властивостей полів форми:
SetSignProcessDocMDPперетворює наступний підпис, згенерований процесом підписання, на сертифікуючий (авторський) підпис шляхом додавання перетворення DocMDP/Referenceна рівні 1/2/3 (без змін / заповнення форми / анотації) та встановлення біта AppendOnly у/SigFlagsсловника AcroForm;GetSigFlags/SetSigFlagsбезпосередньо читають і записують необроблений байт/SigFlagsAcroForm;GetFormFieldIsComb,GetFormFieldIsMultiLine,GetFormFieldJustificationтаGetFormFieldAllowedValuesрозкривають біти стилю/Ffдля кожного поля, вирівнювання тексту/Qта масив вибору/Optяк типізовані значення
Version 3.92.0
Added
- Додано зручні API для експорту вкладень і полів форми:
SaveAllAttachmentsпроходить єдиний список вкладень (на рівні документа/EmbeddedFilesплюс анотації/FileAttachmentдля кожної сторінки) і записує кожен потік до каталогу під його ім\'ям файлу, розв\'язуючи колізії за допомогою числового суфікса;RemoveFormFieldByNameперетворює повністю кваліфіковане ім\'я поля на його індекс і видаляє його;RenameFormFieldперейменовує поле за його ім\'ям без окремого пошуку індексу
Version 3.91.0
Added
- Додано API для переліку на рівні всього документа:
EnumDocumentFontsпроходить кожен словник Font (викликаючиFindFontsспершу, якщо потрібно) і повертає одинTPDFlibDocumentFontдля кожного шрифту з його номером об\'єкта, ім\'ям/BaseFont, типом, кодуванням і статусом вбудовування/підмножини, усуваючи необхідність викликатиSelectFontдля кожного запису та запитувати скалярні гетери;EnumAttachmentsоб\'єднує дерево імен/EmbeddedFilesна рівні документа з анотаціями/FileAttachmentдля кожної сторінки в єдиний списокTPDFlibAttachment, фіксуючи джерело кожного запису, 1-індексований індекс джерела, ім\'я файлу, підтип MIME, опис та розмір у байтах
Version 3.90.0
Added
- Додано API інтроспекції лише для читання анотацій, закладок і версії документа:
GetPDFVersionповертає ефективний рядок версії PDF (наприклад,1.7);GetAnnotType,GetAnnotTitle,GetAnnotSubject,GetAnnotContentsEx,GetAnnotModifiedDate,GetAnnotNameтаGetAnnotRectExрозкривають поля для кожної анотації як іменовані обгортки (тому викликачам більше не потрібні магічні номери властивостей Tag) над наявним кешемAnalyseAnnot;GetOutlineLevelповертає глибину закладки відносно кореня структури закладок, аGetOutlineIsOpenповідомляє, чи розгорнута вона у програмі перегляду (від\'ємне/Countозначає згорнуту), відтворюючи стан макета, який буде відображатися на панелі закладок
Version 3.89.0
Нові можливості
- Додано модуль кодувальника зображень JBIG2
PDFlibJBIG2Enc(TPLJBIG2Encoder.EncodeToByteArray), портований з родинного продукту HotPDF, з двома бекендами: на Win64 арифметичний кодувальник (ITU-T T.88) C++jbig2encкомпілюється статично черезPDFlibJBIG2EncC+HPDFCLibs(228 об'єктів leptonica/jbig2enc уthirdparty/Win64x/) і реєструється як бекенд за замовчуванням, що відповідає продакшн-шляху HotPDF; на інших цільових платформах, або колиUseExternalEncoderдорівнює False, резервний варіант на чистому Pascal MMR стискає двоколірні лінії сканування (scanlines) за допомогою кодувальника CCITT G4 і загортає їх у заголовки сегментів JBIG2 (page-info типу 48 + immediate generic-region типу 38) - Додано модуль кодувальника LZW
PDFlibLZWEnc(TPLLZWEncoder.Compress), аналог наявного декодераPDFlibLZW: створює потік/LZWDecodeзгідно зі специфікацією PDF із кодами змінної ширини 9..12 біт, семантикою ClearCode/EOI та стандартною для PDF EarlyChange, плюс додатковим TIFF Predictor 2 (горизонтальне диференціювання), щоб цикл (round-trip) через декодер відтворював оригінальні байти
Version 3.88.0
Added
- Added a CCITT Group 3 / Group 4 (T.6) bi-level image encoder unit
PDFlibCCITTEnc(TPLCCITTEncoder), the encoder counterpart to the existingPDFlibCCITTdecoder: it encodes apf1bitbitmap to a CCITT G3 1D / G3 2D / G4 (T.6) byte stream viaCompressImage/Execute, ported from the HotPDF sibling product (both share the losLab license); this supplies the missing encoder so monochrome image data can be produced forCCITTFaxDecodeoutput, with full image-pipeline andRenderPageToMonochromeFileG4-output integration to follow
Version 3.87.0
Added
- Implemented cryptographic signature verification for detached PKCS#7 signatures:
TPDFlibSignatureVerifier.VerifySignature(previously a stub returningvsUnknown) now recomputes the document digest over the two/ByteRangesegments and validates it against the signedmessageDigestattribute and the signer's public key via the Windows CryptoAPI (CryptVerifyDetachedMessageSignature), returningvsValid/vsInvalidforadbe.pkcs7.detachedandETSI.CAdES.detachedsubfilters; this is the first verification layer and covers digest+signature integrity only (certificate chain, CRL/OCSP revocation and RFC 3161 timestamp-token validation remain out of scope and will be added in later layers)
Version 3.86.0
Added
- Added a merge-time per-bookmark callback: the
OnMergeOutlineevent fires for each top-level source outline whileMergeFileList/MergeFileListFast/MergeFileListStrictlinks the merged outline tree, letting the caller rename (Title) or drop (Skip=True) an incoming bookmark before it lands in the target document; the callback receives the 0-based source document index so callers can apply per-document policies
Version 3.85.0
Added
- Added signing from the Windows system certificate store:
SetSignProcessCertFromStoreresolves the signing certificate from a named store ("MY"/"Root"/...) by Subject simple-display name (typically the CN, matched case-insensitively; an empty name picks the first certificate that has a private key) and reuses the existing PKCS#7 sign pipeline, so a document can be signed without supplying a.pfx/.p12file; pair it withSetSignProcessKeysetto chooseCURRENT_USER(1) vsLOCAL_MACHINE(2)
Version 3.84.0
Added
- Added font program embedding for already-loaded documents:
EmbedMissingFontswalks every Font dictionary, reads the matching installed system font program by BaseFont name and writesFontFile2orFontFile3back, returning the number of fonts that gained a program;EmbedFontProgramembeds a single font by name using the installed system font;EmbedFontProgramFromFileembeds a single font using a caller-supplied.ttfor.otffile for fonts not installed on the system - Added
SetEmbedAllFonts, a writer-side guard that promotesAddTrueTypeFontEmbed=0toEmbed=1so newly created documents cannot accidentally reference non-embedded system fonts outside PDF/A mode as well
Version 3.83.0
Додано
- Додано зручні API для рендерингу:
RenderPageToMonochromeFileрендерить сторінку в 1-бітне монохромне растрове зображення (для факсу/архівування/сценаріїв OCR), знижуючи якість із 24-бітного через напівтонове згладжування GDI, не змінюючи ядро рендерингу;RenderPageRegionToFileрендерить лише вказаний дочірній прямокутник сторінки (“Left,Top,Width,Height”) як растрове зображення, підключаючи раніше від'єднаний конвеєр ClipRenderPageToDCClip
Version 3.82.0
Додано
- Додано експорт даних форм FDF:
ExportFormDataToFDFзаписує імена всіх полів форм і значення поточного документа в незалежний FDF-файл (масив/Fields, обгорнутий у%FDF-1.2),ExportFormDataToFDFStringповертає рядок тієї самої структури, що полегшує роздільне зберігання або подальше об'єднання даних форм із PDF; байти, які не є символами ASCII, екрануються за допомогою тризначних вісімкових кодів відповідно до ISO 32000-1
Version 3.81.0
Додано
- Додано зручні API для сторінок і структури:
SetPageTransitionзаписує ефекти переходу презентації для вказаної сторінки (17 стандартних переходів/Trans, зокрема Split/Blinds/Wipe/Dissolve/Glitter тощо) та тривалість показу сторінки;GetPageFontCount,GetPageFontIDперераховують шрифти, на які посилається вказана сторінка;SetMeasurementUnitприймає типізоване перерахування одиниць вимірювання (додаючи twips і points на додачу до наявних пікселів/міліметрів/дюймів), із супутніми помічниками перетворення одиницьConvertToPoints,ConvertFromPoints;SaveToFileOptionsвикористовує один запис для об'єднання параметрів стиснення, лінеаризації та збереження з датою зміни
Version 3.80.0
Додано
- Додано зручні API для безпеки та підписів:
EncryptFileExприймає типізовані набори іменованих дозволів (TPDFlibUserPermissions, розрізняючи 8 іменованих бітів дозволів, таких як друк із низькою та високою роздільною здатністю), замінюючи цілі числа необроблених бітів дозволів;TPDFlibSignatureVerifier.GetSignatureMetadataчитає ім'я поля, Filter, SubFilter, час підпису, причину, розташування, контактну інформацію, підписувача та перевірку структури ByteRange безпосередньо зі словника підпису без необхідності декодування PKCS#7;PrintDocumentExвказує кількість копій для друку та порядок сортування за один виклик
Version 3.79.0
Додано
- Додано зручні API для редагування:
MaskRectмалює непрозорий заповнений прямокутник у вказаній сторінці для покриття області (маскування/редакція);SetPageThumbnailFromFileприкріплює/Thumbсторінки безпосередньо з файлу зображення без забруднення стану малювання потоку вмісту;FlattenFormFieldsOnPageRangeзводить усі поля форм у діапазоні сторінок (вигляди запікаються у статичний вміст, а активні поля видаляються);InsertAnnotationвставляє вже побудований словник анотацій у вказаному місці;NewMarkupAnnotationстворює анотації розмітки виділення/закреслення/підкреслення/хвилястої лінії та записує quad-точки, колір і прозорість за один крок;StampText,StampImageставлять водяні знаки в діапазоні сторінок, підтримуючи прозорість, кут обертання та позицію накладання
Version 3.78.0
Додано
- Додано API для текстових запитів і переліку елементів сторінки:
SearchTextшукає пошуковий термін у вказаному діапазоні сторінок і повертає номер сторінки та обмежувальний прямокутник для кожного збігу, підтримуючи параметри чутливості до регістру та збігу цілого слова;EnumPageElementsперераховує всі текстові блоки та вбудовані елементи зображень на вказаній сторінці, уніфіковано повертаючи тип елемента, прямокутник, текст, назву шрифту та ID зображення;GetTextInAreaExє версієюGetTextInAreaз урахуванням прямокутника, що повертає кожен текстовий блок і його обмежувальний прямокутник у визначеній області
Version 3.77.0
Додано
- Додано API інтроспекції лише для читання, що виправляє попередню асиметрію "можна писати, не можна читати":
FindOutlineByTitleшукає закладки за заголовком (підтримуючи лише на тому ж рівні/лише дочірні/всі піддерева глибини),GetOutlineActionInfoтаGetAnnotActionInfoповертають тип дії (GoTo/GoToR/URI/Launch/Named/JavaScript) і корисне навантаження URI, JavaScript, імені файлу закладки або анотації як типізовану структуру,GetOutlineDestinationInfoповертає сторінку призначення та тип Fit (XYZ/Fit/FitH/FitV/FitR/FitB/FitBH/FitBV) і координати,EnumSignatures,GetSignatureFieldCount,GetSignatureFieldInfoперераховують поля підписів і повідомляють, чи вони підписані
Version 3.76.3
Змінено
- Профіль Factur-X EXTENDED у демо E-Invoice тепер використовує стандартне значення conformance та стандартний guideline ID, а рахунок ZUGFeRD 1.0 додає елементи підсумку
ChargeTotalAmountіAllowanceTotalAmount; усі 6 профілів тепер створюють вихід PDF/A-3b та PDF/A-3u, який проходить як veraPDF (відповідність PDF/A), так і Mustang (бізнес-правила електронних рахунків)
Version 3.76.2
Виправлено
- XMP-метадані гібридних рахунків Factur-X/ZUGFeRD тепер декларують схему розширення PDF/A (
pdfaExtension:schemas) для опису властивостей рахункуfx:; раніше відсутність цієї декларації призводила до того, що згенерований PDF/A-3 визнавався невідповідним валідаторами на кшталт veraPDF
Змінено
- XML рахунку в демо E-Invoice тепер містить електронні адреси продавця та покупця, а також телефон продавця, що дозволяє більшій кількості профілів проходити перевірку бізнес-правил ZUGFeRD/Factur-X
- Каталог профілів, побудова XML та потік генерування PDF/A-3 у демо E-Invoice винесено до спільної unit-и, яку повторно використовують як GUI, так і новий інструмент тестування зовнішнього валідатора
Version 3.76.1
Виправлено
- Виправлено збій у демо E-Invoice під час натискання Генерувати: вбудовані стандартні шрифти недоступні в режимі PDF/A, тому демо тепер вбудовує шрифт TrueType для відтворення сторінки рахунку
Змінено
- Демо E-Invoice вилучає опцію PDF/A-3a (рідко використовується в електронному invoicing), а профіль XRechnung тепер типово використовує PDF/A-3u
Version 3.76.0
Змінено
- GUI демо E-Invoice тепер керується даними: номер рахунку, дата виставлення, покупець і продавець, нетто-сума, ставка податку та валюта доступні для редагування, а XML рахунку точно відповідає видимим сумам на сторінці замість фіксованого вмісту заповнювача
- Демо генерує структурно правильний XML рахунку для кожного профілю: Factur-X, XRechnung і ZUGFeRD 2.0 використовують структуру
CrossIndustryInvoice, тоді як ZUGFeRD 1.0 COMFORT використовує власну структуруCrossIndustryDocumentз позиціями рядків, податковими підсумками та умовами оплати - Суми записуються в XML у фіксованому англійському форматі з десятковою крапкою, щоб локалізовані роздільники тисяч або коми не порушували схему, а ввід користувача екранується перед записом
- Демо додає інтерактивний попередній перегляд XML, самоперевірки вмісту на рівні профілю, розбір одойменного зовнішнього звіту перевірки
.validation.jsonта під час генерації явним чином завантажує intent виводу ICC sRGB зі сховища
Version 3.75.6
Додано
SetPDFAModeдодає режим7, який дає змогу створювати метадані PDF/A-3u і надалі дозволяє пов'язані файли PDF/A-3; демонстрація E-Invoice GUI також надає опцію PDF/A-3u, а профіль ZUGFeRD 2.0 BASIC тепер типово використовує PDF/A-3u
Version 3.75.5
Додано
- Додає демонстрацію Delphi E-Invoice GUI, яка може вибирати профілі Factur-X, ZUGFeRD і XRechnung, створювати гібридні рахунки PDF/A-3, вбудовувати відповідну назву XML-файлу та guideline ID, запускати перевірку контейнера в інтерфейсі й показувати XMP-відомості рахунка, проблеми перевірки та витягнутий XML
Version 3.75.4
Додано
- Додає підтримку пов'язаних файлів PDF/A-3 і XML електронних рахунків:
AddPDFA3AssociatedFileFromStringможе створювати пов'язані файли Catalog/AFбезпосередньо з байтів у пам'яті,AddFacturXAssociatedFileFromStringможе записувати XML Factur-X, ZUGFeRD і XRechnung, синхронізувати метадані XMP і перевіряти поєднання імені файлу, профілю, простору імен XMP та XML guideline ID, а сторона читання додає APIs виявлення, перевірки, списку проблем і витягування XML
Version 3.75.3
Виправлено
- Аудит XObject (00066, 00067) повідомляє про PostScript і Reference XObject, а також про заборонені ключі у Form XObject (/OPI, /PS, /Subtype2 = /PS) та Image XObject (/Alternates, /OPI, /Interpolate true). ISO 19005-1 §6.2.4 - §6.2.7
Version 3.75.2
Виправлено
- CheckCompliancePDFA тепер перевіряє відповідність шрифтів і колірних просторів на додаток до структурних перевірок, доданих у v3.50.0. Перевірка повідомляє про дев'ять нових класів проблем: принаймні одна програма шрифту не вбудована (00030; ISO 19005-1 §6.3.4 вимагає, щоб усі програми шрифтів, включно із замінами Standard 14, були вбудовані), підмножина Type 1 не має /CharSet у своєму FontDescriptor (00031; §6.3.5), підмножина CIDFont не має /CIDSet (00032; §6.3.5), CIDFontType2 не має /CIDToGIDMap (00033; §6.3.3.2 Cor2), несимвольний TrueType із невідповідним /Encoding (00034; §6.3.7 Cor2 вимагає WinAnsi/MacRoman безпосередньо або як BaseEncoding, без /Differences), символьний TrueType, який досі містить /Encoding (00035; §6.3.7 Cor2), принаймні один шрифт без /ToUnicode у документах PDF/A-Na або PDF/A-Nu (00036; застосовано чотирикласове виключення §6.3.8), колірний простір ICCBased, що не вбудовує свій потік профілю (00037; §6.2.3.2), і файл, що використовує і DeviceRGB, і DeviceCMYK (00038; §6.2.3.3 забороняє таке поєднання)
- Перевірка /ToUnicode (00036) обмежена рівнями відповідності A та U, оскільки лише ці рівні вимагають зіставлення з Unicode згідно з ISO 19005-1 §6.3.8 та ISO 19005-2 §6.2.11.7. Файли рівня B (PDF/A-1b, PDF/A-2b, PDF/A-3b) не позначаються. Чотирикласове виключення визнає попередньо визначені кодування (MacRomanEncoding, MacExpertEncoding, WinAnsiEncoding), стандартні BaseFont Type 1 з набору Standard 14 як заміну шрифтів Adobe Standard Latin / Symbol за назвами гліфів, а також шрифти Type 0, чиї дочірні CIDFont використовують реєстри Adobe-GB1, Adobe-CNS1, Adobe-Japan1 або Adobe-Korea1
- Аудит шрифтів проходить кожен словник Font, класифікує його за Subtype (Type1, MMType1, TrueType, Type3, Type0 із дочірнім CIDFontType0 або CIDFontType2), а потім запускає відповідні перевірки. Складені шрифти Type 0 делегують перевірки вбудовування та підмножин своїм дочірнім CIDFont, залишаючи /ToUnicode на обгортці Type 0. Визначення підмножини використовує стандартну домовленість про префікс із шести великих літер
- CheckCompliancePDFA тепер повідомляє про 15 додаткових порушень PDF/A, які перевірка раніше пропускала: відсутній масив /ID у трейлері (00013), відсутній потік /Metadata у Document Catalog (00014), /Filter, застосований до потоку /Metadata (00015), словники потоків, що посилаються на зовнішні файли через /F, /FFilter або /FDecodeParms (00016), вбудовані файли, оголошені через /EF у будь-якому словнику file-specification або через елемент /EmbeddedFiles у Name tree в документах PDF/A-1 (00017, 00018), /OpenAction, що вказує на заборонений тип дії (00019), словники додаткових дій /AA в Document Catalog або будь-якій сторінці (00020, 00021), фільтри JBIG2Decode або JPXDecode в документах PDF/A-1 (00022, 00023), фільтри Crypt, у яких /Name не дорівнює /Identity (00024), /Requirements у Document Catalog (00025), /Perms із ключами, відмінними від /UR3 та /DocMDP (00026), і /AcroForm /NeedAppearances, встановлений у true (00027). Перевірка тепер позначає заборонені типи дій Catalog /OpenAction (/Launch, /Sound, /Movie, /ResetForm, /ImportData, /JavaScript, /Hide, /SetState, /NOP, /Trans, /GoTo3DView, /Rendition, /SetOCGState) і значення /N для named action поза дозволеним набором {NextPage, PrevPage, FirstPage, LastPage} згідно з ISO 19005-1 §6.6.1
Version 3.75.1
Виправлено
- Перевірки, що залежать від фільтрів (JBIG2Decode, JPXDecode), і перевірки вбудованих файлів (/EF, /EmbeddedFiles) залишаються обмеженими PDF/A-1, оскільки ISO 19005-2 §6.2.8.3 та §6.8 явно послаблюють ці обмеження для PDF/A-2 і PDF/A-3. Перевірки структури документа (/Metadata, /AcroForm /NeedAppearances, /OpenAction, /AA, /Requirements, /Perms) застосовуються до кожної частини PDF/A
- Парсер PDFAID приймає суфікс відповідності U (PDF/A-2U, PDF/A-3U) поряд із наявними варіантами A і B, тож CheckCompliancePDFA більше не видає хибне попередження "00005 PDFA Mark NOT Found or invalid" під час перевірки файлу PDF/A-2U або PDF/A-3U, створеного іншим інструментом. Рівні відповідності з відображенням Unicode, додані в ISO 19005-2:2011, тепер розпізнаються перевіркою
Version 3.75.0
Безпека
- AddLinkToImportData створює анотацію Link, чия дія є дією імпорту даних PDF (/S /ImportData), що заповнює поля AcroForm документа з зовнішнього FDF-файлу, коли користувач клацає посилання (ISO 32000-1 §12.6.4.8, Table 198). Параметр FileName розглядається як словник filespec, із тими самими правилами нормалізації шляху, що й у AddLinkToFile / AddLinkToFileEx (зворотні слеші перетворюються на прямі слеші згідно з ISO 32000-1 §7.11.2.1). Біт 0 у Options вмикає або вимикає видиму рамку, а біти 1–3 вибирають режим підсвічування посилання (Invert, Outline, Push), як і в наявних домовленостях AddLinkTo*. PDF 1.4 або новіший. НЕ дозволено в PDF/A, оскільки дія посилається на зовнішній ресурс; фасад мовчки повертає 0, коли викликається в режимі PDF/A. Доступно в Delphi library та DLL interface як DLAddLinkToImportData / DLAddLinkToImportDataA (форма PWideChar і PAnsiChar)
- AddLinkToHideField створює анотацію Link, чия дія є дією приховування PDF (/S /Hide), що перемикає видимість одного або кількох полів AcroForm, коли користувач клацає посилання (ISO 32000-1 §12.6.4.10, Table 196). FieldNames приймає одне або кілька повних імен полів, розділених комами, крапками з комою або розривами рядка; одне ім'я записує /T як текстовий рядок, а два або більше імен записують /T як масив, і обидві форми дозволені специфікацією. HideFlag вибирає напрямок видимості: ненульове значення ховає перелічені поля (/H true), а нуль показує їх (/H false). Біт 0 у Options вмикає або вимикає видиму рамку, а біти 1–3 вибирають режим підсвічування посилання (Invert, Outline, Push), як у AddLinkToWeb / AddLinkToNamedAction. PDF 1.2 або новіший. Сумісно з PDF/A, оскільки зовнішній ресурс не використовується. Доступно в Delphi library та DLL interface як DLAddLinkToHideField / DLAddLinkToHideFieldA (форма PWideChar і PAnsiChar)
- AddLinkToNamedAction створює анотацію Link, чия дія є іменованою дією PDF (/S /Named), що запускає одну з чотирьох стандартизованих команд навігації переглядача, визначених у ISO 32000-1 §12.6.4.11, Table 194: NextPage, PrevPage, FirstPage і LastPage. Параметр NamedActionType вибирає команду (0=NextPage, 1=PrevPage, 2=FirstPage, 3=LastPage); значення поза цим діапазоном повертаються до NextPage, тож записувач завжди видає сумісне зі специфікацією ім'я /N. Біт 0 у Options вмикає або вимикає видиму рамку, а біти 1–3 вибирають режим підсвічування посилання (Invert, Outline, Push), як у наявних домовленостях AddLinkToWeb / AddLinkToPage. Анотація вимагає PDF 1.1 або новіший і сумісна з PDF/A, оскільки зовнішній ресурс не використовується. Доступна в Delphi library та DLL interfaces
- AddCaretAnnotation створює анотацію розмітки caret (PDF /Subtype /Caret) у заданому прямокутнику, позначаючи місце на сторінці, де текст або вміст був вставлений, пропущений або інакше потребує уваги рецензента. Підтримує два типи символів (None і Paragraph) через SymbolType (0 / 1), настроювані колір, прозорість, заголовок, вміст і часові мітки створення/зміни. Визначено в ISO 32000-1 §12.5.6.11. PDF 1.5 або новіший. Доступна в Delphi library та DLL interfaces
- Цей запис завершує дозаповнення геометричних анотацій, яке почалося з v3.44.0 Square+Circle. PDFlibPas тепер створює анотації Text, Stamp, FreeText, TextMarkup (Highlight/Underline/Squiggly/StrikeOut), Square, Circle, Line, Polygon, PolyLine, Ink і Caret, на додачу до наявної підтримки Link, FileAttachment, SVG, U3D і SWF
Виправлено
- AddInkAnnotation створює анотацію розмітки ink (PDF /Subtype /Ink), що представляє рукописні штрихи або вільні позначки, намальовані на сторінці. Штрихи подаються як один рядок, де кілька штрихів розділяються '|' або переносом рядка, а всередині кожного штриха пари координат використовують той самий формат пробіл/кома/крапка з комою/табуляція, що й AddPolygonAnnotation. Наприклад "100 100 110 105 120 110 | 200 200 210 205" описує два окремі штрихи. Підтримує настроювані ширину межі, колір чорнила, прозорість, заголовок, вміст і часові мітки. Визначено в ISO 32000-1 §12.5.6.13. PDF 1.3 або новіший. Доступна в Delphi library та DLL interfaces
- Кожен штрих має містити парну кількість значень (щонайменше чотири), інакше виклик повертає 0 без запису анотації. /Rect обчислюється автоматично за сумарним охопленням усіх штрихів плюс невеликий відступ, щоб штрихи залишалися всередині обмежувального прямокутника анотації
- AddPolygonAnnotation створює замкнену анотацію розмітки polygon (PDF /Subtype /Polygon) з вершинами, заданими як рядок пар координат, розділених пробілами, комами, крапками з комою або табуляціями (наприклад "100 100 200 100 200 200 100 200"). Підтримує настроювану ширину межі, колір межі, необов'язковий колір внутрішньої заливки, прозорість, заголовок, вміст і часові мітки. Визначено в ISO 32000-1 §12.5.6.9. PDF 1.5 або новіший. Доступна в Delphi library та DLL interfaces
Version 3.74.1
Виправлено
- AddPolyLineAnnotation створює відкриту анотацію розмітки polyline (PDF /Subtype /PolyLine) з тим самим форматом рядка вершин і настроюваними стилями кінцевих ліній на кожному кінці (None, Square, Circle, Diamond, OpenArrow, ClosedArrow, Butt, ROpenArrow, RClosedArrow, Slash). Визначено в ISO 32000-1 §12.5.6.9. PDF 1.5 або новіший. Доступна в Delphi library та DLL interfaces
- Обидві анотації вимагають щонайменше дві вершини (чотири числа) і парну загальну кількість чисел; виклик повертає 0, якщо рядок вершин не вдається розібрати як коректний список пар. /Rect обчислюється за охопленням вершин плюс відступ, пропорційний ширині межі, щоб кінцеві прикраси залишалися видимими
Version 3.74.0
Додано
- Обидві анотації підвищують версію документа до PDF 1.5, коли їх створено за нижчого фіксованого мінімуму версії
- AddLineAnnotation створює анотацію розмітки line (PDF /Subtype /Line) між двома кінцевими точками з настроюваною шириною межі, кольором лінії, необов'язковим кольором внутрішньої заливки, стилями кінцевих ліній для обох кінців (None, Square, Circle, Diamond, OpenArrow, ClosedArrow, Butt, ROpenArrow, RClosedArrow, Slash), прозорістю, заголовком, вмістом і часовими мітками створення/зміни. Визначено в ISO 32000-1 §12.5.6.7. PDF 1.3 або новіший. Доступна в Delphi library та DLL interfaces
Виправлено
- /Rect анотації обчислюється за двома кінцевими точками плюс відступ, пропорційний ширині межі, щоб кінцеві прикраси залишалися всередині обмежувального прямокутника анотації
Version 3.73.2
Змінено
- AddSquareAnnotation створює анотацію розмітки rectangle (PDF /Subtype /Square) у заданому прямокутнику з настроюваними шириною межі, кольором межі, необов'язковим кольором внутрішньої заливки, прозорістю, заголовком, вмістом і часовими мітками створення/зміни. Визначено в ISO 32000-1 §12.5.6.8. PDF 1.3 або новіший. Доступна в Delphi library та DLL interfaces
Version 3.73.1
Змінено
- AddCircleAnnotation створює анотацію розмітки ellipse (PDF /Subtype /Circle), вписану в заданий прямокутник, з тими самими настроюваними параметрами межі, заливки, прозорості, заголовка, вмісту і міток часу, що й AddSquareAnnotation. Визначено в ISO 32000-1 §12.5.6.8. PDF 1.3 або новіший. Доступна в Delphi library та DLL interfaces
- Обидві нові анотації автоматично підвищують версію документа до PDF 1.3, коли їх створено за нижчого фіксованого мінімуму версії, і додають стандартний набір полів анотації розмітки (/Type /Subtype /Rect /C /IC /BS /Border /CA /F /M /CreationDate /NM /T /Contents /Subj /P), щоб наявні робочі процеси рецензування в Acrobat, Foxit і Edge могли редагувати їх після створення
Виправлено
- SetStructElemSpaceBefore і SetStructElemSpaceAfter встановлюють атрибути /SpaceBefore та /SpaceAfter (owner Layout) у поточному відкритому структурному елементі, задаючи відступ перед і після блокових елементів у пунктах. Визначено в ISO 32000-1 §14.8.5.4.2 Table 340. Доступні в Delphi library, ActiveX (Dispids 73008051/73008052), та DLL interfaces
- SetStructElemStartIndent і SetStructElemEndIndent встановлюють атрибути /StartIndent та /EndIndent (owner Layout), задаючи відступ від початкового та кінцевого країв області вмісту з урахуванням напряму письма, у пунктах. Визначено в ISO 32000-1 §14.8.5.4.2 Table 340. Доступні в Delphi library, ActiveX (Dispids 73008053/73008054), та DLL interfaces
Version 3.73.0
Додано
- SetStructElemColor встановлює атрибут /Color (owner Layout) як трійку RGB (кожен компонент 0.0-1.0), описуючи колір переднього плану елемента для механізмів перетворення потоку та перевірок контрастності кольорів далі по ланцюгу. Визначено в ISO 32000-1 §14.8.5.4.2 Table 340. Доступний у Delphi library, ActiveX (Dispid 73008055), та DLL interfaces
- Виправлено помилку серіалізації в BuildStructElemDictRef: числові значення атрибутів із одним токеном (наприклад SpaceBefore, SpaceAfter, StartIndent, EndIndent) записувалися як PDF names замість PDF numbers. Виправлення застосовується і до гілки з одним власником, і до гілки з кількома власниками атрибутів
Version 3.72.0
Додано
- Додано три нові перевірки відповідності: код 00006 позначає зашифровані документи (шифрування заборонено в усіх версіях PDF/A); код 00007 позначає документи без запису OutputIntents у каталозі (обов'язковий для всіх версій PDF/A); коди 00011 і 00012 позначають документи без MarkInfo або StructTreeRoot, коли рівень відповідності має суфікс -a (доступність)
- CheckCompliancePDFA тепер коректно перевіряє всі шість режимів PDF/A (1a, 1b, 2a, 2b, 3a, 3b). Перевірка PDFAID (код 00005) приймає будь-який із шести чинних XMP-індикаторів замість лише '1B'. Перевірка верхньої межі версії (00002) застосовує 1.4 для PDF/A-1 і 1.7 для PDF/A-2 та PDF/A-3
Version 3.71.2
Виправлено
- Перевірка OCProperties (код 00003) тепер умовна: вона застосовується лише до документів PDF/A-1, де додатковий вміст (шари) заборонено. PDF/A-2 і PDF/A-3 дозволяють шари і більше не позначаються
Version 3.71.1
Додано
- Режим PDF/A тепер примусово забороняє недозволені операції на рівні API. Коли активний режим PDF/A (будь-який із режимів 1-6), виклик SetEncryption, AddSeparationColor, SetFillColorCMYK, SetTextColorCMYK або будь-якого іншого API CMYK/Separation/Shader повертає 0 і не впливає на результат, що відповідає вимозі PDF/A щодо єдиного вихідного наміру sRGB
Version 3.71.0
Додано
- Прозорість заборонена в PDF/A-1 (режими 1 і 2): SetTransparency, SetBlendMode і SetPageTransparencyGroup повертають 0 і не виконують дій, коли активний режим 1 або 2. PDF/A-2 і PDF/A-3 (режими 3-6) допускають обмежену прозорість і не обмежуються
- Дії JavaScript заборонені в усіх режимах PDF/A (1-6): SetOpenActionJavaScript, PageJavaScriptAction, DocJavaScriptAction, AddGlobalJavaScript і AddLinkToJavaScript усі повертають 0 і не виконують дій, коли активний будь-який режим PDF/A. ISO 19005-1 §6.6.1 прямо забороняє JavaScript у документах PDF/A
- API вкладених файлів (EmbedFile, AddFileAttachment) блокуються в режимах PDF/A-1 і PDF/A-2 (1-4). Вони залишаються працездатними в PDF/A-3 (режими 5 і 6), який прямо дозволяє довільні вбудовані файли
Version 3.70.0
Додано
- SetPDFAMode тепер підтримує рівні відповідності PDF/A-2 і PDF/A-3. Передайте NewMode=3 для PDF/A-2b, 4 для PDF/A-2a, 5 для PDF/A-3b або 6 для PDF/A-3a. PDF/A-2 орієнтується на PDF 1.7 і дозволяє шари, інтерактивні форми, зображення JPEG2000 та обмежену прозорість. PDF/A-3 розширює PDF/A-2, дозволяючи довільні вбудовані файли (будь-який MIME-тип). Усі варіанти -a автоматично записують /MarkInfo і маркери структури tagged-PDF, потрібні для рівня відповідності доступності
- GetInformation(201) повертає '1' через '6' відповідно до активного режиму PDF/A, узгоджуючись із новою нумерацією режимів
- Виправлено: SetPDFAMode(1) (PDF/A-1a) раніше був no-op через внутрішню помилку маршрутизації, внесену у v3.20.0. Тепер він коректно записує /MarkInfo і /OutputIntents та встановлює XMP pdfaid:part=1/conformance=A
Version 3.69.1
Виправлено
- SetStructElemWritingMode встановлює атрибут /WritingMode (owner Layout) у поточному відкритому структурному елементі. Допустимі значення: LrTb (зліва направо, за замовчуванням для латинських писемностей), RlTb (справа наліво, для арабської та івриту), і TbRl (згори вниз справа наліво, для традиційного вертикального тексту CJK). Визначено в ISO 32000-1 §14.8.5.4.2 Table 340. Доступний у Delphi library, ActiveX (Dispid 73008049), та DLL interfaces
Version 3.69.0
Додано
- SetStructElemListNumbering встановлює атрибут /ListNumbering (owner List) у поточному відкритому структурному елементі. Підтримувані значення включають None, Disc, Circle, Square (ненумеровані маркери) та Decimal, UpperRoman, LowerRoman, UpperAlpha, LowerAlpha (нумерація впорядкованих списків). Атрибут встановлюється в елементі L (list) і дає допоміжним технологіям змогу правильно оголошувати тип списку. Визначено в ISO 32000-1 §14.8.5.3.2 Table 336. Доступний у Delphi library, ActiveX (Dispid 73008050), та DLL interfaces
- SetStructElemColSpan встановлює атрибут /ColSpan (owner Table) у поточному відкритому структурному елементі, вказуючи, скільки стовпців охоплює комірка. Визначено в ISO 32000-1 §14.8.5.7.2 Table 337. Доступний у Delphi library, ActiveX (Dispid 73008047), та DLL interfaces
Виправлено
- SetStructElemRowSpan встановлює атрибут /RowSpan (owner Table) у поточному відкритому структурному елементі, вказуючи, скільки рядків охоплює комірка. Визначено в ISO 32000-1 §14.8.5.7.2 Table 337. Доступний у Delphi library, ActiveX (Dispid 73008048), та DLL interfaces
Version 3.68.0
Додано
- Обидві функції є зручними обгортками, еквівалентними виклику AddTagAttribute з Owner='Table' і відповідною назвою атрибута. Вони доповнюють SetStructElemScope для повністю описаних табличних комірок у складних таблицях або таблицях із багаторядковими заголовками
- GetPDFUADiagnostics тепер повідомляє FORM-NO-TOOLTIP:N, коли N інтерактивних полів форми (Widget annotations) не мають запису TU (tooltip / accessible name). ISO 14289-1 §7.18.4 вимагає, щоб усі інтерактивні поля форми містили запис TU, аби допоміжні технології могли оголосити користувачеві призначення поля під час отримання фокусу. /TU — це доступне ім'я, яке озвучують екранні читачі; воно відрізняється від /T, який є частковим іменем поля, використовуваним для програмного доступу та надсилання форми
Version 3.67.4
Змінено
- GetPDFUADiagnostics тепер повідомляє LIST-STRUCT:N, коли N елементів структури LI або LBody розташовано поза своїм обов'язковим батьківським елементом. ISO 32000-1 §14.8.4.4 вимагає, щоб LI був безпосередньою дитиною L (list), а LBody — безпосередньою дитиною LI (list item). Неправильне вкладення списку заважає допоміжним технологіям коректно проходити та озвучувати вміст списку і може спричиняти помилки перевірки структури документа у валідаторах PDF/UA-1
Виправлено
- BeginTagEx2 — це новий API, що відкриває структурний елемент і встановлює всі основні властивості елемента одним викликом. Окрім параметрів TagType, AltText, ActualText і Lang з BeginTagEx, BeginTagEx2 приймає ще Title (/T, для панелі навігації Tags), ElemID (/ID, унікальний ідентифікатор елемента) і Expansion (/E, повний текст абревіатури або акроніма). Передача порожнього рядка для будь-якого з цих трьох додаткових параметрів еквівалентна пропуску відповідного setter. BeginTagEx2 зменшує шаблонний код для добре описаних елементів — замість виклику BeginTagEx, а потім SetStructElemTitle, SetStructElemID і SetStructElemExpansion окремо, усі сім властивостей можна встановити одним викликом. Функція доступна в Delphi library, ActiveX (Dispid 73008046), та DLL interfaces
Version 3.67.3
Змінено
- GetPDFUADiagnostics тепер повідомляє TABLE-TH-NO-SCOPE:N, коли N елементів структури TH (table header cell) не мають атрибута Scope. ISO 32000-1 §14.8.4.3.4 Table 337 визначає Scope (Row, Column або Both) як атрибут, що описує, до яких data cells застосовується header cell. Без нього екранні читачі та інші допоміжні технології не можуть надійно пов'язати заголовок із відповідними даними. Перевірка виконує повний рекурсивний обхід дерева елементів структури
Виправлено
- GetPDFUADiagnostics тепер повідомляє DOCINFO-TITLE-MISSING, коли документ не має значення Title у властивості /Info. PDF/UA-1 (ISO 14289-1 §7.1) вимагає, щоб заголовок документа був заданий і придатний для відображення, а ISO 32000-1 §14.9.2 рекомендує копіювати його до Catalog /Lang та XMP metadata. Якщо відсутній і /Info Title, і document-level /Title, перша перевірка DISPLAYDOCTITLE-FALSE усе ще попереджає, що title bar переглядача не показуватиме правильний заголовок. Коли значення задано, ця перевірка просто підтверджує, що значення title встановлено і його можна показати під час відкриття документа. Існуюча перевірка DISPLAYDOCTITLE-FALSE підтверджує, що заголовок показано в title bar переглядача; DOCINFO-TITLE-MISSING є доповнювальною — вона підтверджує, що саме значення заголовка встановлено. Викличте SetDocumentInfo('Title', ...) для задання значення
Version 3.67.2
Виправлено
- SetStructElemTitle — це новий API, що встановлює запис /T (title) у поточному відкритому структурному елементі (ISO 32000-1 §14.7.2 Table 324). Title — це зрозуміла людині мітка, яка ідентифікує конкретний екземпляр елемента — наприклад "Chapter 1", "Summary Table" або "Figure 3: Quarterly Sales" — і відображається в панелі навігації Tags у PDF-переглядачах та використовується інструментами виправлення доступності. /T відрізняється від /Alt (альтернативний текст для користувачів із порушенням сприйняття візуального контенту) і /ActualText (корекція тексту на рівні гліфів); він найкорисніший для нетекстових контейнерних елементів, таких як Table, Figure, Form, Sect і Div. Передайте порожній рядок, щоб очистити попередньо встановлене значення. Функція доступна в Delphi library, ActiveX та DLL interfaces
Version 3.67.1
Змінено
- SetStructElemAltText — це новий API, що встановлює запис /Alt у поточному відкритому структурному елементі (ISO 32000-1 §14.9.3). Він еквівалентний передаванню AltText до BeginTag, але дає змогу опис альтернативного тексту задати або оновити після відкриття елемента — це корисно, коли опис обчислюється окремо від типу елемента. PDF/UA-1 (ISO 14289-1 §7.5) вимагає Alt text для елементів Figure і Formula; GetPDFUADiagnostics уже повідомляє FIGURE-NO-ALT:N для відсутніх значень. Функція доступна в Delphi library, ActiveX та DLL interfaces
Version 3.67.0
Змінено
- GetPDFUADiagnostics тепер містить перевірку ROLEMAP-UNMAPPED:N, яка виявляє власні назви типів структурних елементів, використані в документі, для яких немає запису в словнику /RoleMap. ISO 14289-1 §7.1 та ISO 32000-1 §14.7.3 вимагають, щоб кожен нестандартний тип структури був зіставлений зі стандартним типом PDF (наприклад P, Span або Figure), щоб допоміжні технології могли визначити, як обробляти елемент. Коли знайдено N незіставлених типів, опис проблеми містить список назв типів, щоб викликач знав, які записи AddRoleMap потрібні. Усі 49 стандартних типів структури, визначених у ISO 32000-1 Table 333 (PDF 1.7), розпізнаються і не включаються до звіту
Version 3.66.1
Змінено
- SetStructElemLang — це новий API, що встановлює запис /Lang у поточному відкритому структурному елементі (ISO 32000-1 §14.9.2). Тег мови перевизначає мовну атрибутику документа, оголошену SetDocumentLanguage або SetPDFUAMode, для елемента і всіх його нащадків, даючи змогу багатомовним документам позначати кожен фрагмент своїм правильним тегом мови BCP 47 (наприклад 'en-US', 'fr', 'zh-Hant-TW'). Екранні читачі використовують /Lang на рівні елемента, щоб вибрати відповідний механізм або голос синтезу мовлення під час озвучування документа. Функція доступна в Delphi library, ActiveX та DLL interfaces
Version 3.66.0
Змінено
- SetStructElemActualText — це новий API, що встановлює запис /ActualText у поточному відкритому структурному елементі (ISO 32000-1 §14.9.4). Використовуйте його, щоб вказати точний Unicode-текст, який представляє послідовність гліфів, коли вилучення з content stream дає неправильний результат — найчастіші випадки це лігатури OpenType (U+FB00 ff, U+FB01 fi, U+FB02 fl) і скорочення з неочевидним розгортанням. ActualText доповнює, а не замінює, відтворений вміст; він перевизначає те, що допоміжні технології та засоби вилучення тексту читають для цього елемента, не пригнічуючи візуальне відображення. Функція доступна в Delphi library, ActiveX та DLL interfaces
Version 3.65.0
Додано
- GetPDFUADiagnostics тепер перевіряє елементи структури Formula на додаток до Figure під час звітування про відсутній Alt text (FIGURE-NO-ALT:N). ISO 32000-1 §14.9.3 вимагає альтернативні описи як для графічних figure, так і для математичних формул; раніше перевірялися лише елементи Figure
Змінено
- GetPDFUADiagnostics тепер повідомляє PDF-VERSION-LOW, коли версія PDF документа нижча за 1.7. PDF/UA-1 (ISO 14289-1) визначено відносно PDF 1.7 (ISO 32000-1:2008); документи з PDF 1.5 або 1.6 не відповідали б вимогам базової специфікації. Викличте SetPDFUAMode, щоб автоматично підвищити версію до 1.7
- Підтримку структури IDs і table association тепер додано. SetStructElemID призначає унікальний рядковий ідентифікатор (/ID) поточному відкритому структурному елементу; під час збереження документа ці IDs збираються в name tree /IDTree на корені дерева структури, що дає змогу інструментам доступності та перехресним посиланням знаходити елементи за ID (ISO 32000-1 §14.7.4). SetStructElemHeaders пов'язує поточну комірку таблиці (TD або TH) з однією чи кількома заголовковими комірками через список раніше призначених IDs, записуючи масив /Headers у словник owner Table attribute (ISO 32000-1 §14.8.5.7.2). Разом ці дві функції підтримують складну розмітку таблиць для PDF/UA-1 (ISO 14289-1 §7.10) і WCAG 2.x SC 1.3.1. Обидві функції доступні в Delphi library, ActiveX та DLL interfaces. AddTagAttribute також тепер коректно обробляє атрибут /Headers із розділеними комами значеннями, записаними як масиви PDF text string
Виправлено
- GetPDFUADiagnostics тепер містить перевірку HEADING-LEVEL-SKIP:N, яка виявляє стрибки рівня заголовків у порядку документа (наприклад, H1, за яким одразу йде H3 без H2 між ними). Перевірка виконує попередній обхід усього дерева елементів структури і рахує кожен випадок, коли наступний рівень заголовка перевищує попередній більш ніж на один. Generic H елементи трактуються як H1. Повернення до заголовка вищого рівня (H3 → H1) як пропуск не рахується. WCAG 2.x Success Criterion 1.3.1 та ISO 14289-1 §7.1 вимагають, щоб заголовки вкладалися без пропусків
Version 3.64.0
Змінено
- Тепер підтримуються атрибути елементів структури для tagged PDF і PDF/UA документів. Три нові API-функції дають змогу приєднувати атрибути до структурного елемента, який зараз будується у tag stack: AddTagAttribute (загального призначення, будь-який owner/name/value), SetStructElemScope (зручна обгортка, що встановлює атрибут /Scope під owner Table, для комірок TH — ISO 32000-1 §14.8.5.7.2), і SetStructElemBBox (зручна обгортка, що встановлює атрибут /BBox під owner Layout, для фігур та інших візуально позиціонованих елементів — ISO 32000-1 §14.8.5.4). Коли документ збережено, атрибути записуються як словники /A атрибутів у кожному структурному елементі; кілька атрибутів від одного owner групуються в один словник, а атрибути від різних owner записуються як масив словників. Усі три функції доступні в Delphi library, ActiveX та DLL interfaces
- GetPDFUADiagnostics тепер включає ще дві перевірки: чи відсутнє значення Alt text у будь-яких елементах Figure у документі (повідомляється як FIGURE-NO-ALT:N, згідно з ISO 14289-1 §7.5 та ISO 32000-1 §14.9.3), і чи залишилися якісь елементи структури відкритими, тому що EndTag не було викликано (повідомляється як STRUCT-UNCLOSED:N). Перевірка figure виконує повний рекурсивний обхід дерева елементів структури, охоплюючи елементи на всіх рівнях вкладеності
Version 3.63.0
Виправлено
- GetPDFUADiagnostics тепер повідомляє FORM-NO-TOOLTIP:N, коли N інтерактивних полів форми (Widget annotations) не мають запису TU (tooltip / accessible name). ISO 14289-1 §7.18.4 вимагає, щоб усі інтерактивні поля форми містили запис TU, аби допоміжні технології могли оголосити користувачеві призначення поля під час отримання фокусу. /TU — це доступне ім'я, яке озвучують екранні читачі; воно відрізняється від /T, який є частковим іменем поля, використовуваним для програмного доступу та надсилання форми
Version 3.62.0
Змінено
- GetPDFUADiagnostics тепер повідомляє LIST-STRUCT:N, коли N елементів структури LI або LBody розташовано поза своїм обов'язковим батьківським елементом. ISO 32000-1 §14.8.4.4 вимагає, щоб LI був безпосередньою дитиною L (list), а LBody — безпосередньою дитиною LI (list item). Неправильне вкладення списку заважає допоміжним технологіям коректно проходити та озвучувати вміст списку і може спричиняти помилки перевірки структури документа у валідаторах PDF/UA-1
Version 3.61.0
Змінено
- BeginTagEx2 — це новий API, що відкриває структурний елемент і встановлює всі основні властивості елемента одним викликом. Окрім параметрів TagType, AltText, ActualText і Lang з BeginTagEx, BeginTagEx2 приймає ще Title (/T, для панелі навігації Tags), ElemID (/ID, унікальний ідентифікатор елемента) і Expansion (/E, повний текст абревіатури або акроніма). Передача порожнього рядка для будь-якого з цих трьох додаткових параметрів еквівалентна пропуску відповідного setter. BeginTagEx2 зменшує шаблонний код для добре описаних елементів — замість виклику BeginTagEx, а потім SetStructElemTitle, SetStructElemID і SetStructElemExpansion окремо, усі сім властивостей можна встановити одним викликом. Функція доступна в Delphi library, ActiveX (Dispid 73008046), та DLL interfaces
Version 3.60.0
Додано
- GetPDFUADiagnostics тепер повідомляє TABLE-TH-NO-SCOPE:N, коли N елементів структури TH (table header cell) не мають атрибута Scope. ISO 32000-1 §14.8.4.3.4 Table 337 визначає Scope (Row, Column або Both) як атрибут, що описує, до яких data cells застосовується header cell. Без нього екранні читачі та інші допоміжні технології не можуть надійно пов'язати заголовок із відповідними даними. Перевірка виконує повний рекурсивний обхід дерева елементів структури
Змінено
- GetPDFUADiagnostics тепер повідомляє DOCINFO-TITLE-MISSING, коли документ не має значення Title у властивості /Info. PDF/UA-1 (ISO 14289-1 §7.1) вимагає, щоб заголовок документа був заданий і придатний для відображення, а ISO 32000-1 §14.9.2 рекомендує копіювати його до Catalog /Lang та XMP metadata. Якщо відсутній і /Info Title, і document-level /Title, перша перевірка DISPLAYDOCTITLE-FALSE усе ще попереджає, що title bar переглядача не показуватиме правильний заголовок. Коли значення задано, ця перевірка просто підтверджує, що значення title встановлено і його можна показати під час відкриття документа. Існуюча перевірка DISPLAYDOCTITLE-FALSE підтверджує, що заголовок показано в title bar переглядача; DOCINFO-TITLE-MISSING є доповнювальною — вона підтверджує, що саме значення заголовка встановлено. Викличте SetDocumentInfo('Title', ...) для задання значення
Version 3.59.0
Змінено
- SetStructElemTitle — це новий API, що встановлює запис /T (title) у поточному відкритому структурному елементі (ISO 32000-1 §14.7.2 Table 324). Title — це зрозуміла людині мітка, яка ідентифікує конкретний екземпляр елемента — наприклад "Chapter 1", "Summary Table" або "Figure 3: Quarterly Sales" — і відображається в панелі навігації Tags у PDF-переглядачах та використовується інструментами виправлення доступності. /T відрізняється від /Alt (альтернативний текст для користувачів із порушенням сприйняття візуального контенту) і /ActualText (корекція тексту на рівні гліфів); він найкорисніший для нетекстових контейнерних елементів, таких як Table, Figure, Form, Sect і Div. Передайте порожній рядок, щоб очистити попередньо встановлене значення. Функція доступна в Delphi library, ActiveX та DLL interfaces
- SetStructElemAltText — це новий API, що встановлює запис /Alt у поточному відкритому структурному елементі (ISO 32000-1 §14.9.3). Він еквівалентний передаванню AltText до BeginTag, але дає змогу опис альтернативного тексту задати або оновити після відкриття елемента — це корисно, коли опис обчислюється окремо від типу елемента. PDF/UA-1 (ISO 14289-1 §7.5) вимагає Alt text для елементів Figure і Formula; GetPDFUADiagnostics уже повідомляє FIGURE-NO-ALT:N для відсутніх значень. Функція доступна в Delphi library, ActiveX та DLL interfaces
- GetPDFUADiagnostics тепер містить перевірку ROLEMAP-UNMAPPED:N, яка виявляє власні назви типів структурних елементів, використані в документі, для яких немає запису в словнику /RoleMap. ISO 14289-1 §7.1 та ISO 32000-1 §14.7.3 вимагають, щоб кожен нестандартний тип структури був зіставлений зі стандартним типом PDF (наприклад P, Span або Figure), щоб допоміжні технології могли визначити, як обробляти елемент. Коли знайдено N незіставлених типів, опис проблеми містить список назв типів, щоб викликач знав, які записи AddRoleMap потрібні. Усі 49 стандартних типів структури, визначених у ISO 32000-1 Table 333 (PDF 1.7), розпізнаються і не включаються до звіту
Додано
- SetStructElemLang — це новий API, що встановлює запис /Lang у поточному відкритому структурному елементі (ISO 32000-1 §14.9.2). Тег мови перевизначає мовну атрибутику документа, оголошену SetDocumentLanguage або SetPDFUAMode, для елемента і всіх його нащадків, даючи змогу багатомовним документам позначати кожен фрагмент своїм правильним тегом мови BCP 47 (наприклад 'en-US', 'fr', 'zh-Hant-TW'). Екранні читачі використовують /Lang на рівні елемента, щоб вибрати відповідний механізм або голос синтезу мовлення під час озвучування документа. Функція доступна в Delphi library, ActiveX та DLL interfaces
Version 3.58.0
Додано
- SetStructElemActualText — це новий API, що встановлює запис /ActualText у поточному відкритому структурному елементі (ISO 32000-1 §14.9.4). Використовуйте його, щоб вказати точний Unicode-текст, який представляє послідовність гліфів, коли вилучення з content stream дає неправильний результат — найчастіші випадки це лігатури OpenType (U+FB00 ff, U+FB01 fi, U+FB02 fl) і скорочення з неочевидним розгортанням. ActualText доповнює, а не замінює, відтворений вміст; він перевизначає те, що допоміжні технології та засоби вилучення тексту читають для цього елемента, не пригнічуючи візуальне відображення. Функція доступна в Delphi library, ActiveX та DLL interfaces
- GetPDFUADiagnostics тепер перевіряє елементи структури Formula на додаток до Figure під час звітування про відсутній Alt text (FIGURE-NO-ALT:N). ISO 32000-1 §14.9.3 вимагає альтернативні описи як для графічних figure, так і для математичних формул; раніше перевірялися лише елементи Figure
Version 3.57.1
Змінено
- GetPDFUADiagnostics тепер повідомляє PDF-VERSION-LOW, коли версія PDF документа нижча за 1.7. PDF/UA-1 (ISO 14289-1) визначено відносно PDF 1.7 (ISO 32000-1:2008); документи з PDF 1.5 або 1.6 не відповідали б вимогам базової специфікації. Викличте SetPDFUAMode, щоб автоматично підвищити версію до 1.7
Version 3.57.0
Змінено
- Підтримку структури IDs і table association тепер додано. SetStructElemID призначає унікальний рядковий ідентифікатор (/ID) поточному відкритому структурному елементу; під час збереження документа ці IDs збираються в name tree /IDTree на корені дерева структури, що дає змогу інструментам доступності та перехресним посиланням знаходити елементи за ID (ISO 32000-1 §14.7.4). SetStructElemHeaders пов'язує поточну комірку таблиці (TD або TH) з однією чи кількома заголовковими комірками через список раніше призначених IDs, записуючи масив /Headers у словник owner Table attribute (ISO 32000-1 §14.8.5.7.2). Разом ці дві функції підтримують складну розмітку таблиць для PDF/UA-1 (ISO 14289-1 §7.10) і WCAG 2.x SC 1.3.1. Обидві функції доступні в Delphi library, ActiveX та DLL interfaces. AddTagAttribute також тепер коректно обробляє атрибут /Headers із розділеними комами значеннями, записаними як масиви PDF text string
- GetPDFUADiagnostics тепер містить перевірку HEADING-LEVEL-SKIP:N, яка виявляє стрибки рівня заголовків у порядку документа (наприклад, H1, за яким одразу йде H3 без H2 між ними). Перевірка виконує попередній обхід усього дерева елементів структури і рахує кожен випадок, коли наступний рівень заголовка перевищує попередній більш ніж на один. Generic H елементи трактуються як H1. Повернення до заголовка вищого рівня (H3 → H1) як пропуск не рахується. WCAG 2.x Success Criterion 1.3.1 та ISO 14289-1 §7.1 вимагають, щоб заголовки вкладалися без пропусків
Version 3.56.44
Змінено
- Тепер підтримуються атрибути елементів структури для tagged PDF і PDF/UA документів. Три нові API-функції дають змогу приєднувати атрибути до структурного елемента, який зараз будується у tag stack: AddTagAttribute (загального призначення, будь-який owner/name/value), SetStructElemScope (зручна обгортка, що встановлює атрибут /Scope під owner Table, для комірок TH — ISO 32000-1 §14.8.5.7.2), і SetStructElemBBox (зручна обгортка, що встановлює атрибут /BBox під owner Layout, для фігур та інших візуально позиціонованих елементів — ISO 32000-1 §14.8.5.4). Коли документ збережено, атрибути записуються як словники /A атрибутів у кожному структурному елементі; кілька атрибутів від одного owner групуються в один словник, а атрибути від різних owner записуються як масив словників. Усі три функції доступні в Delphi library, ActiveX та DLL interfaces
- GetPDFUADiagnostics тепер включає ще дві перевірки: чи відсутнє значення Alt text у будь-яких елементах Figure у документі (повідомляється як FIGURE-NO-ALT:N, згідно з ISO 14289-1 §7.5 та ISO 32000-1 §14.9.3), і чи залишилися якісь елементи структури відкритими, тому що EndTag не було викликано (повідомляється як STRUCT-UNCLOSED:N). Перевірка figure виконує повний рекурсивний обхід дерева елементів структури, охоплюючи елементи на всіх рівнях вкладеності
Version 3.56.43
Змінено
- GetPDFUADiagnostics тепер повідомляє FORM-NO-TOOLTIP:N, коли N інтерактивних полів форми (Widget annotations) не мають запису TU (tooltip / accessible name). ISO 14289-1 §7.18.4 вимагає, щоб усі інтерактивні поля форми містили запис TU, аби допоміжні технології могли оголосити користувачеві призначення поля під час отримання фокусу. /TU — це доступне ім'я, яке озвучують екранні читачі; воно відрізняється від /T, який є частковим іменем поля, використовуваним для програмного доступу та надсилання форми
Version 3.56.42
Додано
- GetPDFUADiagnostics тепер повідомляє LIST-STRUCT:N, коли N елементів структури LI або LBody розташовано поза своїм обов'язковим батьківським елементом. ISO 32000-1 §14.8.4.4 вимагає, щоб LI був безпосередньою дитиною L (list), а LBody — безпосередньою дитиною LI (list item). Неправильне вкладення списку заважає допоміжним технологіям коректно проходити та озвучувати вміст списку і може спричиняти помилки перевірки структури документа у валідаторах PDF/UA-1
Змінено
- BeginTagEx2 — це новий API, що відкриває структурний елемент і встановлює всі основні властивості елемента одним викликом. Окрім параметрів TagType, AltText, ActualText і Lang з BeginTagEx, BeginTagEx2 приймає ще Title (/T, для панелі навігації Tags), ElemID (/ID, унікальний ідентифікатор елемента) і Expansion (/E, повний текст абревіатури або акроніма). Передача порожнього рядка для будь-якого з цих трьох додаткових параметрів еквівалентна пропуску відповідного setter. BeginTagEx2 зменшує шаблонний код для добре описаних елементів — замість виклику BeginTagEx, а потім SetStructElemTitle, SetStructElemID і SetStructElemExpansion окремо, усі сім властивостей можна встановити одним викликом. Функція доступна в Delphi library, ActiveX (Dispid 73008046), та DLL interfaces
Виправлено
- GetPDFUADiagnostics тепер повідомляє TABLE-TH-NO-SCOPE:N, коли N елементів структури TH (table header cell) не мають атрибута Scope. ISO 32000-1 §14.8.4.3.4 Table 337 визначає Scope (Row, Column або Both) як атрибут, що описує, до яких data cells застосовується header cell. Без нього екранні читачі та інші допоміжні технології не можуть надійно пов'язати заголовок із відповідними даними. Перевірка виконує повний рекурсивний обхід дерева елементів структури
Version 3.56.41
Додано
- GetPDFUADiagnostics тепер повідомляє DOCINFO-TITLE-MISSING, коли документ не має значення Title у властивості /Info. PDF/UA-1 (ISO 14289-1 §7.1) вимагає, щоб заголовок документа був заданий і придатний для відображення, а ISO 32000-1 §14.9.2 рекомендує копіювати його до Catalog /Lang та XMP metadata. Якщо відсутній і /Info Title, і document-level /Title, перша перевірка DISPLAYDOCTITLE-FALSE усе ще попереджає, що title bar переглядача не показуватиме правильний заголовок. Коли значення задано, ця перевірка просто підтверджує, що значення title встановлено і його можна показати під час відкриття документа. Існуюча перевірка DISPLAYDOCTITLE-FALSE підтверджує, що заголовок показано в title bar переглядача; DOCINFO-TITLE-MISSING є доповнювальною — вона підтверджує, що саме значення заголовка встановлено. Викличте SetDocumentInfo('Title', ...) для задання значення
- SetStructElemTitle — це новий API, що встановлює запис /T (title) у поточному відкритому структурному елементі (ISO 32000-1 §14.7.2 Table 324). Title — це зрозуміла людині мітка, яка ідентифікує конкретний екземпляр елемента — наприклад "Chapter 1", "Summary Table" або "Figure 3: Quarterly Sales" — і відображається в панелі навігації Tags у PDF-переглядачах та використовується інструментами виправлення доступності. /T відрізняється від /Alt (альтернативний текст для користувачів із порушенням сприйняття візуального контенту) і /ActualText (корекція тексту на рівні гліфів); він найкорисніший для нетекстових контейнерних елементів, таких як Table, Figure, Form, Sect і Div. Передайте порожній рядок, щоб очистити попередньо встановлене значення. Функція доступна в Delphi library, ActiveX та DLL interfaces
Змінено
- SetStructElemAltText — це новий API, що встановлює запис /Alt у поточному відкритому структурному елементі (ISO 32000-1 §14.9.3). Він еквівалентний передаванню AltText до BeginTag, але дає змогу опис альтернативного тексту задати або оновити після відкриття елемента — це корисно, коли опис обчислюється окремо від типу елемента. PDF/UA-1 (ISO 14289-1 §7.5) вимагає Alt text для елементів Figure і Formula; GetPDFUADiagnostics уже повідомляє FIGURE-NO-ALT:N для відсутніх значень. Функція доступна в Delphi library, ActiveX та DLL interfaces
Version 3.56.40
Змінено
- GetPDFUADiagnostics тепер містить перевірку ROLEMAP-UNMAPPED:N, яка виявляє власні назви типів структурних елементів, використані в документі, для яких немає запису в словнику /RoleMap. ISO 14289-1 §7.1 та ISO 32000-1 §14.7.3 вимагають, щоб кожен нестандартний тип структури був зіставлений зі стандартним типом PDF (наприклад P, Span або Figure), щоб допоміжні технології могли визначити, як обробляти елемент. Коли знайдено N незіставлених типів, опис проблеми містить список назв типів, щоб викликач знав, які записи AddRoleMap потрібні. Усі 49 стандартних типів структури, визначених у ISO 32000-1 Table 333 (PDF 1.7), розпізнаються і не включаються до звіту
- SetStructElemLang — це новий API, що встановлює запис /Lang у поточному відкритому структурному елементі (ISO 32000-1 §14.9.2). Тег мови перевизначає мовну атрибутику документа, оголошену SetDocumentLanguage або SetPDFUAMode, для елемента і всіх його нащадків, даючи змогу багатомовним документам позначати кожен фрагмент своїм правильним тегом мови BCP 47 (наприклад 'en-US', 'fr', 'zh-Hant-TW'). Екранні читачі використовують /Lang на рівні елемента, щоб вибрати відповідний механізм або голос синтезу мовлення під час озвучування документа. Функція доступна в Delphi library, ActiveX та DLL interfaces
Version 3.56.39
Змінено
- SetStructElemActualText — це новий API, що встановлює запис /ActualText у поточному відкритому структурному елементі (ISO 32000-1 §14.9.4). Використовуйте його, щоб вказати точний Unicode-текст, який представляє послідовність гліфів, коли вилучення з content stream дає неправильний результат — найчастіші випадки це лігатури OpenType (U+FB00 ff, U+FB01 fi, U+FB02 fl) і скорочення з неочевидним розгортанням. ActualText доповнює, а не замінює, відтворений вміст; він перевизначає те, що допоміжні технології та засоби вилучення тексту читають для цього елемента, не пригнічуючи візуальне відображення. Функція доступна в Delphi library, ActiveX та DLL interfaces
- GetPDFUADiagnostics тепер перевіряє елементи структури Formula на додаток до Figure під час звітування про відсутній Alt text (FIGURE-NO-ALT:N). ISO 32000-1 §14.9.3 вимагає альтернативні описи як для графічних figure, так і для математичних формул; раніше перевірялися лише елементи Figure
Version 3.56.38
Змінено
- GetPDFUADiagnostics тепер повідомляє PDF-VERSION-LOW, коли версія PDF документа нижча за 1.7. PDF/UA-1 (ISO 14289-1) визначено відносно PDF 1.7 (ISO 32000-1:2008); документи з PDF 1.5 або 1.6 не відповідали б вимогам базової специфікації. Викличте SetPDFUAMode, щоб автоматично підвищити версію до 1.7
Виправлено
- Підтримку структури IDs і table association тепер додано. SetStructElemID призначає унікальний рядковий ідентифікатор (/ID) поточному відкритому структурному елементу; під час збереження документа ці IDs збираються в name tree /IDTree на корені дерева структури, що дає змогу інструментам доступності та перехресним посиланням знаходити елементи за ID (ISO 32000-1 §14.7.4). SetStructElemHeaders пов'язує поточну комірку таблиці (TD або TH) з однією чи кількома заголовковими комірками через список раніше призначених IDs, записуючи масив /Headers у словник owner Table attribute (ISO 32000-1 §14.8.5.7.2). Разом ці дві функції підтримують складну розмітку таблиць для PDF/UA-1 (ISO 14289-1 §7.10) і WCAG 2.x SC 1.3.1. Обидві функції доступні в Delphi library, ActiveX та DLL interfaces. AddTagAttribute також тепер коректно обробляє атрибут /Headers із розділеними комами значеннями, записаними як масиви PDF text string
Version 3.56.37
Додано
- GetPDFUADiagnostics тепер містить перевірку HEADING-LEVEL-SKIP:N, яка виявляє стрибки рівня заголовків у порядку документа (наприклад, H1, за яким одразу йде H3 без H2 між ними). Перевірка виконує попередній обхід усього дерева елементів структури і рахує кожен випадок, коли наступний рівень заголовка перевищує попередній більш ніж на один. Generic H елементи трактуються як H1. Повернення до заголовка вищого рівня (H3 → H1) як пропуск не рахується. WCAG 2.x Success Criterion 1.3.1 та ISO 14289-1 §7.1 вимагають, щоб заголовки вкладалися без пропусків
- Тепер підтримуються атрибути елементів структури для tagged PDF і PDF/UA документів. Три нові API-функції дають змогу приєднувати атрибути до структурного елемента, який зараз будується у tag stack: AddTagAttribute (загального призначення, будь-який owner/name/value), SetStructElemScope (зручна обгортка, що встановлює атрибут /Scope під owner Table, для комірок TH — ISO 32000-1 §14.8.5.7.2), і SetStructElemBBox (зручна обгортка, що встановлює атрибут /BBox під owner Layout, для фігур та інших візуально позиціонованих елементів — ISO 32000-1 §14.8.5.4). Коли документ збережено, атрибути записуються як словники /A атрибутів у кожному структурному елементі; кілька атрибутів від одного owner групуються в один словник, а атрибути від різних owner записуються як масив словників. Усі три функції доступні в Delphi library, ActiveX та DLL interfaces
Version 3.56.36
Додано
- GetPDFUADiagnostics тепер включає ще дві перевірки: чи відсутнє значення Alt text у будь-яких елементах Figure у документі (повідомляється як FIGURE-NO-ALT:N, згідно з ISO 14289-1 §7.5 та ISO 32000-1 §14.9.3), і чи залишилися якісь елементи структури відкритими, тому що EndTag не було викликано (повідомляється як STRUCT-UNCLOSED:N). Перевірка figure виконує повний рекурсивний обхід дерева елементів структури, охоплюючи елементи на всіх рівнях вкладеності
Змінено
- GetPDFUADiagnostics тепер повідомляє FORM-NO-TOOLTIP:N, коли N інтерактивних полів форми (Widget annotations) не мають запису TU (tooltip / accessible name). ISO 14289-1 §7.18.4 вимагає, щоб усі інтерактивні поля форми містили запис TU, аби допоміжні технології могли оголосити користувачеві призначення поля під час отримання фокусу. /TU — це доступне ім'я, яке озвучують екранні читачі; воно відрізняється від /T, який є частковим іменем поля, використовуваним для програмного доступу та надсилання форми
Version 3.56.35
Додано
- GetPDFUADiagnostics тепер повідомляє LIST-STRUCT:N, коли N елементів структури LI або LBody розташовано поза своїм обов'язковим батьківським елементом. ISO 32000-1 §14.8.4.4 вимагає, щоб LI був безпосередньою дитиною L (list), а LBody — безпосередньою дитиною LI (list item). Неправильне вкладення списку заважає допоміжним технологіям коректно проходити та озвучувати вміст списку і може спричиняти помилки перевірки структури документа у валідаторах PDF/UA-1
- BeginTagEx2 — це новий API, що відкриває структурний елемент і встановлює всі основні властивості елемента одним викликом. Окрім параметрів TagType, AltText, ActualText і Lang з BeginTagEx, BeginTagEx2 приймає ще Title (/T, для панелі навігації Tags), ElemID (/ID, унікальний ідентифікатор елемента) і Expansion (/E, повний текст абревіатури або акроніма). Передача порожнього рядка для будь-якого з цих трьох додаткових параметрів еквівалентна пропуску відповідного setter. BeginTagEx2 зменшує шаблонний код для добре описаних елементів — замість виклику BeginTagEx, а потім SetStructElemTitle, SetStructElemID і SetStructElemExpansion окремо, усі сім властивостей можна встановити одним викликом. Функція доступна в Delphi library, ActiveX (Dispid 73008046), та DLL interfaces
Version 3.56.34
Додано
- GetPDFUADiagnostics тепер повідомляє TABLE-TH-NO-SCOPE:N, коли N елементів структури TH (table header cell) не мають атрибута Scope. ISO 32000-1 §14.8.4.3.4 Table 337 визначає Scope (Row, Column або Both) як атрибут, що описує, до яких data cells застосовується header cell. Без нього екранні читачі та інші допоміжні технології не можуть надійно пов'язати заголовок із відповідними даними. Перевірка виконує повний рекурсивний обхід дерева елементів структури
- GetPDFUADiagnostics тепер повідомляє DOCINFO-TITLE-MISSING, коли документ не має значення Title у властивості /Info. PDF/UA-1 (ISO 14289-1 §7.1) вимагає, щоб заголовок документа був заданий і придатний для відображення, а ISO 32000-1 §14.9.2 рекомендує копіювати його до Catalog /Lang та XMP metadata. Якщо відсутній і /Info Title, і document-level /Title, перша перевірка DISPLAYDOCTITLE-FALSE усе ще попереджає, що title bar переглядача не показуватиме правильний заголовок. Коли значення задано, ця перевірка просто підтверджує, що значення title встановлено і його можна показати під час відкриття документа. Існуюча перевірка DISPLAYDOCTITLE-FALSE підтверджує, що заголовок показано в title bar переглядача; DOCINFO-TITLE-MISSING є доповнювальною — вона підтверджує, що саме значення заголовка встановлено. Викличте SetDocumentInfo('Title', ...) для задання значення
Version 3.56.33
Додано
- SetStructElemTitle — це новий API, що встановлює запис /T (title) у поточному відкритому структурному елементі (ISO 32000-1 §14.7.2 Table 324). Title — це зрозуміла людині мітка, яка ідентифікує конкретний екземпляр елемента — наприклад "Chapter 1", "Summary Table" або "Figure 3: Quarterly Sales" — і відображається в панелі навігації Tags у PDF-переглядачах та використовується інструментами виправлення доступності. /T відрізняється від /Alt (альтернативний текст для користувачів із порушенням сприйняття візуального контенту) і /ActualText (корекція тексту на рівні гліфів); він найкорисніший для нетекстових контейнерних елементів, таких як Table, Figure, Form, Sect і Div. Передайте порожній рядок, щоб очистити попередньо встановлене значення. Функція доступна в Delphi library, ActiveX та DLL interfaces
Змінено
- SetStructElemAltText — це новий API, що встановлює запис /Alt у поточному відкритому структурному елементі (ISO 32000-1 §14.9.3). Він еквівалентний передаванню AltText до BeginTag, але дає змогу опис альтернативного тексту задати або оновити після відкриття елемента — це корисно, коли опис обчислюється окремо від типу елемента. PDF/UA-1 (ISO 14289-1 §7.5) вимагає Alt text для елементів Figure і Formula; GetPDFUADiagnostics уже повідомляє FIGURE-NO-ALT:N для відсутніх значень. Функція доступна в Delphi library, ActiveX та DLL interfaces
Version 3.56.32
Додано
- GetPDFUADiagnostics тепер містить перевірку ROLEMAP-UNMAPPED:N, яка виявляє власні назви типів структурних елементів, використані в документі, для яких немає запису в словнику /RoleMap. ISO 14289-1 §7.1 та ISO 32000-1 §14.7.3 вимагають, щоб кожен нестандартний тип структури був зіставлений зі стандартним типом PDF (наприклад P, Span або Figure), щоб допоміжні технології могли визначити, як обробляти елемент. Коли знайдено N незіставлених типів, опис проблеми містить список назв типів, щоб викликач знав, які записи AddRoleMap потрібні. Усі 49 стандартних типів структури, визначених у ISO 32000-1 Table 333 (PDF 1.7), розпізнаються і не включаються до звіту
Змінено
- SetStructElemLang — це новий API, що встановлює запис /Lang у поточному відкритому структурному елементі (ISO 32000-1 §14.9.2). Тег мови перевизначає мовну атрибутику документа, оголошену SetDocumentLanguage або SetPDFUAMode, для елемента і всіх його нащадків, даючи змогу багатомовним документам позначати кожен фрагмент своїм правильним тегом мови BCP 47 (наприклад 'en-US', 'fr', 'zh-Hant-TW'). Екранні читачі використовують /Lang на рівні елемента, щоб вибрати відповідний механізм або голос синтезу мовлення під час озвучування документа. Функція доступна в Delphi library, ActiveX та DLL interfaces
Version 3.56.31
Змінено
- Продовжувані збереження тепер використовують той самий шлюз перевірки відповідності версії, що й повні збереження
Виправлено
- PDF/A output intents, створені за допомогою
SetPDFAMode, більше не відображаються як custom Catalog keys, зберігаючи перелік application metadata окремо від структур сумісності PDF
Version 3.56.25
Змінено
- Writer-side GetPDFUADiagnostics отримує відповідну проблему
MULTIPLE-H-CHILDREN:N, у паритеті з reader10044з v3.56.24. ISO 14289-1 §7.4.4 забороняє більше одного прямого H-дочірнього елемента на вузол tag tree — перевірка на боці writer спрацьовує щоразу, коли in-memory деревоFStructElemsмістить таке порушення - Новий вкладений helper CountMultipleHChildren обходить дерево вглиб, підраховуючи H-дітей на кожному рівні. Перевірка працює поруч із наявними проходами LIST-STRUCT / LIST-NO-NUMBERING і використовує ту саму схему обходу FStructElems
Version 3.56.24
Змінено
- Аудит PDF/UA-1 отримує перевірку унікальності H-tag за ISO 14289-1 §7.4.4.
10044повідомляє про будь-який вузол структури, що має більше одного прямого H-дочірнього елемента — специфікація забороняє це для strongly-structured documents, і те саме обмеження застосовується до будь-якого вузла tag tree незалежно від загального режиму структури. Інша вимога §7.4.4 SHALL (a document shall be either strongly or weakly structured, not both) потребує heuristics на рівні всього документа і навмисно не входить до цього аудиту - Новий pre-order обхідник struct-tree (UAVisitStructNodeForHUniqueness / ScanStructTreeForHUniqueness) рахує прямих H-дітей на вузол і рекурсивно спускається вглиб. Використовує той самий decoder K-shape, що й наявні обходи заголовків / списків / приміток
Version 3.56.23
Додано
- Новий
Lib/PDFlibPDFUAFontInspect.pasреалізує tolerant SFNT table-directory walker та parser cmap subtable directory. Таблиця Adobe Glyph List на 4281 назву, додана як scaffold у попередньому infrastructure commit, тепер підключена через Differences check. Програми, що не розбираються як SFNT (Type 1 PFB / PFA, OpenType collection, довільне сміття), тихо пропускаються — на рівні аудиту краще хибні негативи, ніж хибні позитиви
Змінено
- Аудит PDF/UA-1 отримує дві перевірки font-program за ISO 14289-1 §7.21.6, які dictionary-layer checks з v3.56.10 мусили відкласти, доки не з’явився TrueType parser.
10034повідомляє про non-symbolic TrueType programs, чий вбудований SFNT cmap table містить лише symbolic (platformID=3, encodingID=0) запис — перший абзац §7.21.6 вимагає щонайменше одну non-symbolic cmap subtable, щоб програма могла відтворювати codepoints, оголошені її/Encoding.10035повідомляє про non-symbolic TrueType/Encoding /Differencesarrays, чиї glyph names не є членами Adobe Glyph List (.notdefокрім) — третій абзац §7.21.6 вимагає, щоб кожен запис Differences потрапляв до AGL
Version 3.56.22
Змінено
- Аудит PDF/UA-1 отримує перевірки даних media clip за ISO 14289-1 §7.18.6.
10042повідомляє про dictionaries of media clip data (ідентифіковані як/S /MCD, за потреби/Type /MediaClip), у яких відсутній обов’язковий запис content-type/CT.10043повідомляє про ті самі dictionaries без обов’язкового масиву/Alt. ISO 32000-1 Table 274 називає обидва ключі необов’язковими, але ISO 14289-1 §7.18.6 підвищує їх до обов’язкових, щоб screen readers могли озвучити змістовний опис вбудованого мультимедіа - Це Phase 6 плану глибокого аудиту PDF/UA (
.superpowers/plans/2026-05-23-pdfua-deep-audit-plan.md). Він працює без залежності від font-program або content-stream parser, тож це перший follow-up sub-class після серії v3.56.0..v3.56.13
Version 3.56.21
Додано
- Новий
SetSignProcessCommitmentTypeдодає підписаний атрибут CAdEScommitment-type-indication(OID 1.2.840.113549.1.9.16.2.16, ETSI EN 319 122-1 v1.2.1 §5.2.3) усередині SignerInfo PAdES-B-B. Приймає цілі коди 1..6, що відповідають well-known ETSI commitment OIDsid-cti-ets-proofOfOriginthroughid-cti-ets-proofOfCreation; передайте 0, щоб очистити. Коди поза діапазоном відхиляються - Новий
SetSignProcessSignaturePolicyдодає підписаний атрибут CAdESsignature-policy-identifier(OID 1.2.840.113549.1.9.16.2.15, §5.2.9). Приймає політику у dotted-decimal OID, хеш документа політики як uppercase-hex string і код digest algorithm (1=SHA-1, 2=SHA-256, 3=SHA-384, 4=SHA-512, 0=auto/SHA-256). Атрибут містить SEQUENCESignaturePolicyIdзsigPolicyId+sigPolicyHash(OtherHashAlgAndValueSEQUENCE)
Змінено
- Обидва атрибути діють лише тоді, коли SubFilter дорівнює
ETSI.CAdES.detached(шлях PAdES-B-B); вони розширюють наявний масивrgAuthAttrпоруч ізcontent-typeтаsigning-certificate-v2. За Table 1 row d) PAdES забороняє поєднуватиcommitment-type-indicationіз записом/Reasonу PDF Signature Dictionary; за те, щоб не задавати обидва, відповідає викликач
Version 3.56.20
Додано
- Новий
AddPAdESDSSVRIприєднує запис Signature VRI subdictionary до DSS, що збирається, завершуючи структуру Validation Related Information за ETSI EN 319 142-1 v1.2.1 clause 5.4.2.3. Запис ключується uppercase-hex SHA-1 від байтів/Contentsпідпису; його масивиCert/CRL/OCSPзаповнюються посиланнями на відповідні parent DSS streams через 0-based indexes, передані як comma-separated lists (наприклад"0,2,5")
Змінено
- Базовий
TSmartPDFDocument.AddPAdESDSSWithVRIвідстежує номери об’єктів потоків, emitted для кожного cert / CRL / OCSP, і використовує їх для запису VRI sub-arrays як indirect references назад у ті самі streams, на які вже вказують parent DSS arrays, задовольняючи вимогу специфікації, щоб VRI entries спільно використовували сховище з parent DSS dictionary. Початковий entry pointAddPAdESDSSі далі працює без змін для викликачів, яким не потрібен VRI - Кожен per-signature VRI subdictionary містить необов’язковий маркер
/Type /VRI, щоб інструменти, які обходять catalog за tagsType, могли розпізнати структуру без повторного визначення parent path
Version 3.56.19
Додано
- Новий PAdES-B-T workflow для приєднання RFC 3161 / RFC 5816 signature-time-stamp (
id-aa-signatureTimeStampToken, OID 1.2.840.113549.1.9.16.2.14) до наявного PAdES-B-B підпису.NewPAdESSignatureTimeStampProcessFromFile/FromStream/FromStringвідкривають підписаний PDF,SetPAdESSignatureTimeStampFieldназиває поле,GetPAdESSignatureValueHashHexповертає SHA-256 (або 384 / 512) hash значенняsignatureValueпідписувача для подання до TSA,GetPAdESSignatureCMSBytesвідкриває наявне CMS-навантаження,SetPAdESSignatureCMSBytesприймає доповнені CMS bytes, які викликач збирає за допомогою вибраної CMS-бібліотеки, аEndPAdESSignatureTimeStampProcessToFile/ToStream/ToStringвставляє новий CMS у початковий плейсхолдер/Contents - Новий
SetSignProcessReserveContentsBytesрозширює плейсхолдер/Contentsпід час початкового підписування, щоб post-hoc доповнений CMS умістився без переповнення початкового резерву. Звичайні TimeStampToken від TSA додають 2-6 KB до SignerInfo; передайте тут 1024-8192, щоб залишити запас. Без достатнього резерву виклик доповнення повертає13(output overflow)
Змінено
BuildPAdESSignatureTimeStampAttribute— це stateless helper, який загортає TimeStampToken від TSA в CMS Attribute SEQUENCE, яку очікуєSignerInfo.unsignedAttrs, тож викликачі, які вже мають готову CMS-бібліотеку, можуть пропустити OID + SET-of plumbing- Бібліотека не постачає TSA HTTP client; викликач отримує TimeStampToken (зазвичай 30-50 lines TSP request + HTTP POST проти, наприклад, FreeTSA або DigiCert). Windows CryptoAPI
CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTRтеоретично міг би автоматизувати CMS injection всередині бібліотеки, але повертаєCRYPT_E_INVALID_INDEX(0x80091008) на detached SignedData shape, який видає PAdES, тому використовується шлях із CMS bytes від викликачa
Version 3.56.18
Додано
- Нові ASN.1 helpers
DER_IntegerFromLittleEndian(обробляє порядок байтів Win32CRYPT_INTEGER_BLOB) іDER_ContextTagExplicit(обгортає payload у constructed context-specific tag) доповнюють micro-encoderPDFlibASN1. Нові оголошенняCERT_INFO/CRYPT_ALGORITHM_IDENTIFIER/CRYPT_INTEGER_BLOB/PCERT_CONTEXTуPDFlibCryptoAPIдають шляху підписування доступ до розібраних полів сертифіката
Змінено
- Перевіряльники, що звіряють пару імені видавця + серійного номера зі своїм набором кандидатів для побудови шляху (зокрема EU DSS у строгому режимі), тепер знаходять обидва ідентифікатори в атрибуті signing-cert-v2; попередній вивід v3.56.17 містив лише посилання
certHash - Новий модуль
PDFlibASN1надає вузькоспеціалізований DER (X.690) мікрокодувальник - префікс довжини, OCTET STRING, SEQUENCE, SET, OBJECT IDENTIFIER - який використовується для побудови значення атрибутаSigningCertificateV2. Кодувальник дотримується стандартних правил для дуг OID у base-128 і не додає необов’язкове полеhashAlgorithm, коли воно лише повторювало б стандартне значення SHA-256, як це роблять OpenSSL і BouncyCastle
Version 3.56.17
Додано
- Вбудований шлях підписування
ETSI.CAdES.detachedтепер створює структурно сумісні підписи PAdES-B-B. Бібліотека сама будує атрибути CMS authenticated attributes -content-type(id-data) іsigning-certificate-v2з RFC 5035 / RFC 5816 із хешем SHA-256 сертифіката підпису - і передає їх доCryptSignMessageчерезrgAuthAttr. Щойно це поле стає non-NULL, Windows CryptoAPI припиняє автоматично вставляти атрибутsigning-time, який PAdES (ETSI EN 319 142-1 v1.2.1 Table 1) забороняє, тож уSignerInfoзалишаються лише потрібні атрибути
Змінено
ApplySignatureтепер спрямовуєETSI.CAdES.detachedчерез шлях сирих байтів (той самий, що використовується дляadbe.pkcs7.detached) замість передавання попередньо обчисленого digest. Тепер CryptoAPI обчислює атрибутmessageDigestauthenticated attributes над фактичним підписуваним вмістом, як і очікують перевіряльники- SHA-384 і SHA-512 також підтримуються під час побудови атрибута signing-certificate-v2: поле
hashAlgorithmвиводиться з відповіднимAlgorithmIdentifierзамість покладання на значення за замовчуванням. SHA-1 у цьому контексті мовчки оновлюється до SHA-256, бо PAdES-B-B не дозволяє SHA-1 (clause 6.2.1) - Новий
SetSignProcessDigestAlgorithmвибирає алгоритм message-digest для підпису:1= SHA-1 (застарілий),2= SHA-256 (сучасне значення за замовчуванням),3= SHA-384,4= SHA-512,0= auto (SHA-256 for every SubFilter except the legacyadbe.pkcs7.sha1path, which stays on SHA-1 for byte-stable backward compatibility). ETSI EN 319 142-1 v1.2.1 §6.2.1 забороняє MD5 і відсилає до ETSI TS 119 312 щодо рекомендованих криптографічних наборів, тож підписувачам PAdES слід обирати SHA-256 або сильніший алгоритм
Version 3.56.16
Додано
- Додано допоміжні функції хешування
SHA256StreamRange,SHA384StreamRangeіSHA512StreamRangeпоруч із наявноюSHA1StreamRange; шлях підпису використовує їх для обчислення digest PDF ByteRange під вибраним алгоритмом. OIDSignerInfo.digestAlgorithmу PKCS#7 і фактичні байти хеша тепер гарантовано збігаються (попередній код завжди передавав SHA-1 digest незалежно від узгодженого алгоритму) TPDFlibPFXFile.SignDataтепер приймає параметрDigestAlgorithmі вибирає правильний OID для кожної пари (SubFilter, algorithm):2.16.840.1.101.3.4.2.1/.2/.3для SHA-256/384/512 на detached і custom SubFilters (RFC 5754), а також відповідні OID сімействаsha256WithRSAEncryptionдля застарілого шляхуadbe.pkcs7.sha1
Змінено
- Новий
SetSignProcessDocTimeStampпереводить процес підпису в режим PAdES Document Time-stamp відповідно до ETSI EN 319 142-1 v1.2.1 §5.4.3. Отриманий Signature Dictionary містить/Type /DocTimeStampі/SubFilter /ETSI.RFC3161, пропускає заборонені ключі/M,/Reason,/Location,/ContactInfoі/Name, та резервує 8192-байтовий (або заданий викликом) шістнадцятковий заповнювач у/Contentsдля зовнішньо отриманого RFC 3161 TimeStampToken
Version 3.56.15
Додано
- Passthrough вмикається автоматично, коли вибрано режим DocTimeStamp, бо TimeStampToken надходить від зовнішнього TSA. Виклики
SetSignProcessInfo, зроблені після переходу в режим DocTimeStamp, мовчки ігноруються, щоб signature dictionary залишався сумісним зі специфікацією
Змінено
- Наявна автоматична вставка PAdES
/Extensions /ESIC, додана у v3.56.8, уже покриває DocTimeStamp, бо його SubFilter починається зETSI., тож PDF із Document Time-stamp оголошує потрібне розширення catalog без додаткового налаштування - Новий API розширення PAdES Document Security Store (DSS).
NewPAdESDSSProcessFromFile/NewPAdESDSSProcessFromStream/NewPAdESDSSProcessFromStringвідкривають уже підписаний PDF,AddPAdESDSSCertificate/AddPAdESDSSCRL/AddPAdESDSSOCSPготують DER-кодовані дані перевірки, аEndPAdESDSSProcessToFile/EndPAdESDSSProcessToStream/EndPAdESDSSProcessToStringзаписують інкрементальне оновлення, що містить словник/DSS << /Type /DSS /Certs [...] /CRLs [...] /OCSPs [...] >>, як визначено в ETSI EN 319 142-1 v1.2.1 §5.4.2.2. Це основа для підвищення підпису PAdES-B-B / B-T до довготривалої перевірки PAdES-B-LT
Version 3.56.14
Додано
- Процес DSS автоматично підвищує запис каталогу
/Extensions /ESICщонайменше доExtensionLevel 1під час додавання матеріалів перевірки, що відповідає вимозі з §5.6, і об’єднує нові сертифікати, CRL і OCSP-відповіді з наявними масивами/Certs//CRLs//OCSPsпід час повторних викликів, щоб ревізії накопичувалися, а не перезаписувалися
Змінено
GetPAdESDSSProcessResult/ReleasePAdESDSSProcessзавершують життєвий цикл, відтворюючи наявну поверхню APISignProcess- Відповідність PAdES baseline: коли підпис створюється з PAdES SubFilter (
ETSI.CAdES.detachedабоETSI.RFC3161), каталог документа тепер автоматично отримує запис/Extensions /ESIC <</BaseVersion /1.7 /ExtensionLevel 2>>, потрібний ETSI EN 319 142-1 v1.2.1 §5.6. Запис додається тим самим інкрементальним оновленням, що несе підпис, ніколи не знижує вже наявний вищий/ExtensionLevelі слідує за непрямими посиланнями/Extensionsабо/ESIC, коли вихідний PDF вже зберігає їх як окремі об’єкти
Version 3.56.8
Змінено
- Adobe-подібний маркер розширення, який записує SetSignProcessCustomSubFilter для PDF, створених через
TPDFlib, тепер має вигляд/ADBE /BaseVersion /1.7 /ExtensionLevel 8(булоExtensionLevel 5), що відповідає альтернативному оголошенню, яке дозволено використовувати базовим підписам PAdES; рівень 5 охоплював лише можливості ISO 32000-2 forms / 3D / RichMedia і фактично не позначав розширення PAdES - Коли активний SetPDFUAMode і документ зберігається, кожен елемент структури L (list), що не має явного атрибута
ListNumbering, тепер автоматично отримує/O = List /ListNumbering = None. ISO 14289-1 §7.6 вимагає, щоб кожен тег L декларував свій стиль нумерації; нове виправлення під час збереженняApplyPDFUAListNumberingприєднується до наявної сім’їApplyPDFUATabOrder/ApplyPDFUAFormFieldTU/ApplyPDFUAAnnotContents/ApplyPDFUAEmbeddedAFRelationship/ApplyPDFUAStripTrapNet
Version 3.56.13
Змінено
- Автори, яким важливий конкретний стиль списку, і далі повинні викликати SetStructElemListNumbering перед EndTag; автоматичне виправлення спрацьовує лише тоді, коли під час збереження немає атрибута ListNumbering, тож явні значення зберігаються
- Повідомлення діагностики зі сторони writer
LIST-NO-NUMBERING:Nтепер зазначає, що автоматичне виправлення маскуватиме проблему під час збереження, тож користувачі розуміють і відсутній атрибут, і автоматичне виправлення - Аудит PDF/UA-1 отримує три нові перевірки ISO 14289-1.
10031повідомляє про анотації Link, у словнику дії URI яких є/IsMap = true(це заборонено §7.18.5, якщо вміст не надає еквівалентної функціональності; автори з легітимним випадком використання IsMap можуть самостійно вимкнути діагностику).10032повідомляє про елементи структуриNote, у яких відсутній запис/ID— §7.9 вимагає, щоб кожен тег Note декларував унікальний ID.10033повідомляє про кількість пар-дублікатів, коли два або більше тегів Note мають однакове значення/ID
Version 3.56.12
Змінено
- Виявлення колізій ID Note виконується шляхом збирання ID у відсортований
TStringListі проходу по сусідніх парах, тож група з трьох Note, що спільно використовують один ID, рахується як дві пари-дублікати - Перевірка URI action проходить по масиву
/Annotsкожної сторінки, фільтрує за/Subtype /Link, а потім перевіряє/A /S /URIі булеве значення/IsMap. Непрямі посилання розіменовуються на кожному кроці, тож відокремлені словники дій поводяться так само, як і вбудовані - ISO 14289-1 §7.6 вимагає, щоб кожен елемент структури L мав явний атрибут
ListNumbering.10030(з боку reader) іLIST-NO-NUMBERING:N(з боку writer) повідомляють про теги L, у яких його немає. Обхідник на стороні reader розбирає обидві форми/A(один словник атрибутів або масив словників, змішаних із номерами ревізій) і шукає ключ/ListNumberingнезалежно від власника. Перевірка на стороні writer переглядаєTPDFStructElem.Attributesна предмет того самого імені як у завершеному списку структури, так і в ще відкритому стеку тегів
Version 3.56.11
Змінено
- Допустимі значення
ListNumberingза ISO 32000-1 Table 347 —None,Disc,Circle,Square,Decimal,UpperRoman,LowerRoman,UpperAlpha,LowerAlpha. Аудит перевіряє лише наявність ключа, а не вибір конкретного значення — кожен тег L потребує одного з них - Аудит PDF/UA-1 отримує правила кодування TrueType з ISO 14289-1 §7.21.6.
10028повідомляє про неманіфольдні шрифти TrueType, у яких/Encoding(або/BaseEncodingвсередині словника Encoding) не дорівнює аніMacRomanEncoding, аніWinAnsiEncoding.10029повідомляє про символічні шрифти TrueType, які взагалі мають запис/Encoding(це заборонено четвертим абзацом §7.21.6)
Version 3.56.10
Змінено
- Питання symbolic vs. non-symbolic визначається за бітом 3 у
/FlagsFontDescriptor (маска4), із повторним використанням наявного допоміжного засобуUAFontDescriptorSymbolicз підкласу 4. Повний перший абзац §7.21.6 (вбудована програма TrueType має містити відповідні записи cmap) потребує розбору програми шрифту TrueType і досі очікує на реалізацію; наведені вище правила на рівні словника — це практичний шар, який цей аудит може перевірити без парсера TrueType - Правила масиву Differences у §7.21.6 (імена гліфів лише з AGL, наявність cmap Microsoft Unicode) залишаються поза межами з тієї самої причини — вони потребують перевірки програми шрифту
- Аудит PDF/UA-1 отримує повну перевірку ISO 14289-1 §7.18.4.
10027повідомляє про анотації Widget, чий/StructParentрозв’язується через/ParentTreeдерева структури, але не потрапляє до елемента структури з/S = Form. Попередня часткова перевірка v3.56.7 (10026) ловила лише Widget без/StructParentузагалі; нова перевірка завершує правило, проходячи покажчик number-tree і перевіряючи цільовий тег
Version 3.56.9
Змінено
- Новий допоміжний засіб
NumberTreeLookupреалізує форму number-tree за ISO 32000-1 §7.9.7 (плоский корінь/Nums, проміжні/Kids, розбиті за/Limits). Майбутні аудити, яким треба розв’язувати записи сторінки/StructParentsабо мітки/PageLabels, можуть повторно використати його - Перевірка тега Form для анотації Widget використовує дворівневу модель: Widget без
/StructParentповідомляється як10026; Widget, у якого/StructParentіснує, але не розв’язується до/S = Form, повідомляється як більш конкретний10027. Це запобігає подвійному підрахунку одного й того самого порушення за обома кодами - Коли активний SetPDFUAMode і документ згодом зберігається, записи анотацій
TrapNetтепер автоматично вилучаються з масиву/Annotsкожної сторінки. ISO 14289-1 §7.18.2 забороняє анотаціїTrapNet; нове виправлення під час збереженняApplyPDFUAStripTrapNetприєднується до наявної сім’їApplyPDFUATabOrder/ApplyPDFUAFormFieldTU/ApplyPDFUAAnnotContents/ApplyPDFUAEmbeddedAFRelationship, тож документи в режимі PDF/UA перестають непомітно випускати хвостиTrapNet
Version 3.56.7
Змінено
- Аудит PDF/UA-1 отримує часткову перевірку §7.18.4.
10026повідомляє про анотації Widget, у яких немає/StructParent— Widget без/StructParentне може бути досягнутий із дерева структури, а отже не може бути вкладений у структуру tagForm. Повна структурна перевірка (розв’язання/StructParentчерезParentTreeі підтвердження, що батьківський/SдорівнюєForm) відкладена до наступного випуску - Writer-side GetPDFUADiagnostics отримує відповідну проблему
WIDGET-NO-STRUCTPARENT:N. Нинішнє повідомленняTRAPNET-ANNOTтепер також зазначає, що SetPDFUAMode автоматично видаляє такі записи під час збереження - Аудит PDF/UA-1 отримує дві перевірки ієрархії заголовків ISO 14289-1 §7.4.2.
10024повідомляє, коли перший елемент заголовка в порядку документа не є H1 (або H).10025повідомляє кількість пропусків рівнів заголовків у спадній послідовності (наприклад, H1, за яким іде H3 без H2). Обидві перевірки використовують один попередній обхід дерева структури, який розбирає вкладені форми/K(один StructElem, масив StructElem / IndRefs / MCRs)
Version 3.56.6
Змінено
- Writer-side GetPDFUADiagnostics отримує відповідну проблему
FIRST-HEADING-NOT-H1, що забезпечує парність із reader10024. Наявна writer-перевіркаHEADING-LEVEL-SKIPтепер має супутню перевірку, яка також ловить проблеми на кшталт "first heading was H2" - Коли SetPDFUAMode активний і документ згодом шифрується, ключ дозволів шифрування (
/Pу словнику шифрування) тепер автоматично отримує біт 10 (маска$200, "Extract text and graphics in support of accessibility"), навіть якщо виклик не передавppCanCopyAccessуTPDFExtraPermissions, переданому до Encrypt. ISO 14289-1 §7.16 вимагає, щоб кожен зашифрований conforming file дозволяв вилучення для доступності, а цей біт інакше легко пропустити. Цей біт завжди безпечно встановлювати — він лише надає додатковий доступ допоміжним технологіям, а не іншим шляхам вилучення
Version 3.56.5
Змінено
- Writer-side GetPDFUADiagnostics отримує нову проблему
ENCRYPT-NO-ACCESS, яка спрацьовує, коли PDFUAMode увімкнено, а біт 10 у словнику шифрування/Pочищено. Це ловить крайовий випадок порядку викликів, коли користувач спочатку викликавEncrypt(), а SetPDFUAMode лише потім — діагностика підказує знову викликатиEncrypt(), щоб encrypt dict було повторно видано з виправленим/P - Writer-side GetPDFUADiagnostics отримує п’ять нових перевірок ISO 14289-1, щоб in-memory audit документа ловив ті самі порушення, що й reader-side CheckFileCompliance ComplianceTest=2 audit.
SUSPECTS-TRUEпозначає MarkInfo/Suspects=true (§7.1: PDF/UA conforming files вимагають Suspects=false).ROLEMAP-STANDARD-REMAP:Nпозначає виклики AddRoleMap, які мали б перепризначити стандартний тег структури — §7.1 забороняє перепризначення стандартних тегів.DC-TITLE-MISSINGпозначає порожній XMP dc:title (окремо від DOCINFO-TITLE-MISSING, який перевіряє /Info /Title).TRAPNET-ANNOT:Nпозначає анотації TrapNet (§7.18.2 їх забороняє).ANNOT-PAGE-NO-TABS-S:Nпозначає сторінки з анотаціями, у яких сторінковий словник /Tabs не є /S (§7.18.3 вимагає порядок вкладок за деревом структури на цих сторінках)
Version 3.56.4
Змінено
- Writer-side і reader-side аудити PDF/UA-1 тепер приблизно на рівні паритету: кожна проблема, яку reader-side audit піднімає для збереженого файла, також доступна з in-memory діагностики, з поправкою на формати кожної функції (текст, розділений новими рядками, проти списку рядків коду NNNNN)
- Аудит PDF/UA-1 отримує свої перевірки шрифтів §7.21.
10020повідомляє про будь-який шрифт, не належний до Standard 14, якщо FontDescriptor не маєFontFile/FontFile2/FontFile3(§7.21.4.1: кожен виводимий шрифт має вбудовувати свою програму).10021повідомляє про нащадків CIDFontType2 без запису/CIDToGIDMap(§7.21.3.2).10022вказує на шрифти Standard 14 (Helvetica, Times, Courier, Symbol, ZapfDingbats і жирні / похилі варіанти), на які є посилання без вбудованої програми — §7.21.4 NOTE 5 прямо каже, що для цих шрифтів немає винятку з правила вбудовування.10023повідомляє про шрифти, яким бракує CMap/ToUnicodeі які не відповідають списку винятків §7.21.7 (заздалегідь визначені кодування MacRoman / MacExpert / WinAnsi, Type 0 з колекціями символів Adobe-GB1 / CNS1 / Japan1 / Korea1, неманіфольдний TrueType)
Version 3.56.3
Змінено
- Огляд PDF/UA-1 отримує перевірки шрифтів із §7.21.
10020повідомляє про будь-який шрифт, відмінний від Standard 14, для якого FontDescriptor не міститьFontFile/FontFile2/FontFile3(§7.21.4.1: кожен відтворюваний шрифт має вбудовувати свій програмний код).10021повідомляє про нащадків CIDFontType2 без запису/CIDToGIDMap(§7.21.3.2).10022позначає шрифти Standard 14 (Helvetica, Times, Courier, Symbol, ZapfDingbats і жирні / похилі варіанти), на які посилаються без вбудованого програмного коду — §7.21.4 NOTE 5 чітко вказує, що для цих шрифтів немає винятку з вимоги вбудовування.10023повідомляє про шрифти без CMap/ToUnicode, які не відповідають списку винятків §7.21.7 (заздалегідь визначені кодування MacRoman / MacExpert / WinAnsi, Type 0 з набором символів Adobe-GB1 / CNS1 / Japan1 / Korea1, ненасичені TrueType) - Складені шрифти Type 0 перевіряються на обох рівнях:
/ToUnicodeу самому батьківському словнику Type 0 і вбудовування //CIDToGIDMapу першому дочірньому CIDFont. Шрифти Type 3 пропускають перевірку вбудовування (їхні гліфи є вбудованими CharProcs), але все одно беруть участь у перевірці/ToUnicode - Помічники PDFlibPDFA для подібної роботи зі шрифтами навмисно не були спільними — з десяток коротких процедур (відсікання префікса підмножини, таблиця назв Standard 14, наявність FontFile, прапорець Symbolic) продубльовано локально як допоміжні
UA*, щоб аудит PDF/A міг далі розвиватися без поломки PDF/UA, і навпаки
Version 3.56.2
Змінено
- Аудит PDF/UA-1 отримує ще п’ять перевірок ISO 14289-1, що охоплюють анотації, вбудовані файли та додатковий вміст.
10015повідомляє про анотації Link без непорожнього альтернативного опису/Contents(§7.18.5), щоб програми читання з екрана могли озвучувати цілі посилань.10016і10017позначають словники FileSpec для вбудованих файлів, у яких відсутні обов’язкові ключі імені файлу/Fабо/UF(§7.11).10018позначає словники налаштувань додаткового вмісту, у яких пропущено непорожній текстовий рядок/Name(§7.10).10019позначає словники налаштувань додаткового вмісту, що містять заборонений ключ/AS(§7.10) - Пошук анотацій на кожній сторінці, який уже забезпечував перевірки TrapNet і
/Tabs /S, тепер у тому ж проході збирає також дані Link //Contents, зберігаючи аудит O(N) за кількістю об’єктів
Version 3.56.1
Змінено
- Аудит PDF/UA-1 отримує п’ять нових перевірок ISO 14289-1.
10010перевіряє дозвіл на витягування для доступності (біт 10 ключа шифрування/P) у зашифрованих файлах (§7.16).10011виявляє динамічні форми XFA через елемент<dynamicRender>required</dynamicRender>усередині пакета XDP XFA (§7.15).10012позначає Form XObjects, які містять запис/Ref— reference XObjects заборонені (§7.20).10013позначає анотаціїTrapNet(§7.18.2).10014проходить усі сторінки й повідомляє про будь-яку сторінку з анотаціями, у словнику сторінки якої не задано/Tabs /S(§7.18.3), щоб порядок вкладок відповідав дереву структури - Усі п’ять нових кодів проходять через ту саму пару дескрипторів CheckFileCompliance + GetStringListItem, яку додано в попередньому випуску — нового публічного API немає
Version 3.56.0
Додано
- Новий аудит на боці читання
CheckCompliancePDFUAперевіряє зовнішній PDF на відповідність ISO 14289-1 (PDF/UA-1). Він доповнює наявну перевірку на боці запису GetPDFUADiagnostics, приймаючи будь-який вхідний PDF (власний вивід, сканований вивід, сторонній вміст) і перелічуючи порушення PDF/UA-1 так само, як CheckFileCompliance уже повідомляє про проблеми PDF/A
Змінено
- CheckFileCompliance тепер приймає
ComplianceTest = 2для запуску нового аудиту PDF/UA-1. Перевірка PDF/A зComplianceTest = 1не змінена, а список проблем і далі повертається через наявну пару дескрипторів GetStringListCount / GetStringListItem - Початкова версія охоплює базові ворота відповідності PDF/UA-1 з §5 (ідентифікація XMP
pdfuaid:part) і §7.1 (потік Catalog/Metadata, позначка tagged-PDF, дерево структури, перевага заголовка у переглядачі, мова документа, XMPdc:title, значення/Suspectsта заборона на переназначення стандартних тегів структури). Видається вісім діагностичних кодів — від10001до10009— що візуально відокремлює цей числовий діапазон від кодів PDF/A00xxx - Глибші пункти PDF/UA-1 (безпека, анотації, XObjects, підмножини шрифтів) відстежуються для наступних патч-випусків поверх тієї самої основи аудиту
Version 3.55.6
Змінено
- Кожен щойно згенерований пакет XMP тепер містить властивість xmpMM:InstanceID у форматі uuid:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX. Ідентифікатор генерується через Win32 CoCreateGuid і дає кожному створеному документу унікальний, незалежний від версії відбиток, як рекомендують ISO 19005-1 §6.7.2 (Cor2) і настанови з найкращих практик PDF/A. Збірки не для Windows (де пакет XMP лишається порожнім) не зачеплені
- Простір імен xmpMM (http://ns.adobe.com/xap/1.0/mm/) тепер є частиною SelectionNamespaces пакета XMP; нові допоміжні функції SetXMPMM і GenerateInstanceID лежать в основі виведення InstanceID і створюють фундамент для майбутньої підтримки xmpMM:History / xmpMM:DerivedFrom
- Схему опису PDF/A Extension Schema (pdfaExtension / pdfaSchema / pdfaProperty / pdfaType / pdfaField) у цьому випуску не додано. Створення власної схеми розширення потребує багатокрокового формування bag / seq / structured-property понад поточну схему SetDublinCore / SetXMPBasic; ця робота запланована на майбутній випуск. Документи, яким потрібно оголошувати власні властивості XMP, і далі переходять на шлях LoadFromString
Version 3.55.5
Змінено
- У документах PDF/A тепер нормалізуються прапорці анотацій /F під час збереження. ISO 19005-1 §6.5.3 вимагає, щоб біт Print був 1, а біти Hidden / Invisible / NoView були 0 у кожній анотації; тепер записувач застосовує цю маску під час збереження, тож викликачам не потрібно пам’ятати розклад бітів. Випадок /Subtype /Popup є винятком — спливаючі вікна є дочірніми елементами інших анотацій і традиційно не друкуються
- Прапорець AcroForm /NeedAppearances тепер примусово встановлюється в false під час збереження, коли документ перебуває в будь-якому режимі PDF/A. ISO 19005-1 §6.9 вимагає, щоб цей прапорець був відсутній або false; раніше записувач залишав те значення, яке встановив викликач, через що створювалися документи, що просили переглядач заново згенерувати вигляд під час відкриття, і непомітно порушували специфікацію, якщо викликач ставив true. Виправлення також працює для документів, де прапорець раніше був відсутній — записувач явно виводить /NeedAppearances false, щоб не лишати двозначності для валідатора
Version 3.55.4
Змінено
- AddStandardFont тепер відхиляє виклики в режимі PDF/A. ISO 19005-1 §6.3.4 скасовує виняток у специфікації PDF щодо того, що Standard 14 можна не вбудовувати: кожна програма шрифту у відповідному файлі має бути вбудована, а бібліотека не постачає контури Standard 14. Фасад мовчки повертає 0; викликачам слід перейти на AddTrueTypeFont або AddType1Font із реальним файлом шрифту
- AddTrueTypeFont тепер мовчки підвищує Embed=0 (без вбудовування) до Embed=1 (вбудувати весь шрифт), коли активний режим PDF/A. Невбудований довідковий шлях створював PDF, який залежав від запасного вибору шрифту у переглядачі до системної установки Arial / Times / Courier, що порушує ISO 19005-1 §6.3.4. Наявні виклики, що вже просили вбудовування (Embed=1 або 2), не зачеплені
- Перевірку відповідності Non-symbolic TrueType /Encoding (ISO 19005-1 §6.3.7 Cor2 вимагає WinAnsi або MacRoman як назву кодування чи BaseEncoding без /Differences) у цьому випуску не додано, бо бібліотека вже виводить /WinAnsiEncoding для непозначених підмножин TrueType, а глибше примушення вимагало б відстежувати розгалуження symbolic / non-symbolic крізь шлях підмножин. CheckCompliancePDFA 00034 / 00035 (додані у v3.51.0) позначають будь-який невідповідний вивід під час перевірки
Version 3.55.3
Змінено
- Словники шрифтів CIDFontType2 на основі TrueType тепер явно містять /CIDToGIDMap /Identity. ISO 19005-1 §6.3.3.2 (Cor2) вимагає, щоб цей запис був присутній для кожного вбудованого CIDFont Type 2; специфікація PDF дозволяє неявне значення Identity за замовчуванням, але PDF/A потребує явного значення. Раніше записувач повністю пропускав цей ключ, через що veraPDF (і CheckCompliancePDFA 00033, доданий у v3.51.0) позначав файл. Назва /Identity відповідає розкладці GID-as-CID, яку записувач і так неявно створював, тому наявні документи відтворюються однаково
- FontDescriptor /CharSet (для підмножин Type 1) і /CIDSet (для підмножин CIDFont) лишаються TODO; записувачу довелося б відстежувати, які назви гліфів / CID врешті потрапили до підмножини, щоб заповнювати їх точно. CheckCompliancePDFA 00031 і 00032 (також додані у v3.51.0) позначать цю відсутність, щоб користувачі бачили проблему під час перевірки
Version 3.55.2
Змінено
- AddImageDirectFromString тепер відхиляє несумісні з PDF/A фільтри на вході. Передача Filter = 'LZWDecode' відхиляється для кожної частини PDF/A (ISO 19005-1 §6.1.10 плюс відповідні правила ISO 19005-2 / -3). Передача Filter = 'JBIG2Decode' або 'JPXDecode' відхиляється для PDF/A-1 (режими 1 і 2). PDF/A-2 і PDF/A-3 допускають JPXDecode за ISO 19005-2 §6.2.8.3 із підвимогами специфікації (кількість колірних каналів, однорідність глибини бітів, вимоги METH/APPROX), які ворітця на боці запису не примушують — викликачам у цих режимах усе одно треба забезпечити відповідність потоку JPEG 2000. Фасад мовчки повертає 0, коли запитується заборонений фільтр
- Вхідні TIFF, PNG, JPEG і JPEG 2000, завантажені через AddImageFromFile / AddImageFromStream, не зачеплені: імпортер розпаковує вихідні байти й повторно кодує їх через FlateDecode (або DCTDecode для JPEG-навантажень), тож вхідний LZW ніколи не потрапляє до вихідного ланцюга Filter. Валідатор CheckCompliancePDFA, доданий у v3.50.0 (00004) і v3.52.0 (00022, 00023), дає другий рубіж захисту під час перевірки для будь-якого непрямого шляху, який усе ж пропускає заборонений фільтр у вихід
Version 3.55.1
Змінено
- AddLinkToHideField тепер відхиляє виклики в режимі PDF/A. У попередньому випуску лишився коментар, що цей action сумісний із PDF/A, але ISO 19005-1 Cor2 додав /Hide до списку заборонених дій (§6.6.1), а ISO 19005-2 / -3 успадковують це обмеження. Фасад мовчки повертає 0 у режимі PDF/A, як і AddLinkToJavaScript та AddLinkToImportData
- AddSWFAnnotationFromFile тепер відхиляє виклики в режимі PDF/A. Анотації SWF / RichMedia обгортають Flash-медіа, яке заборонене ISO 19005-1 §6.5.2 (без підтипів Movie / Sound) і додатково закріплене ISO 19005-2 §6.3.1 (без 3D / Sound / Screen / Movie). Фасад мовчки повертає 0
- AddEmbeddedFile і AddLinkToEmbeddedFile тепер відхиляють виклики в режимах PDF/A-1 і PDF/A-2. ISO 19005-1 §6.1.11 забороняє /EF, а ISO 19005-2 §6.8 допускає лише вбудовані файли PDF/A; замість перевірки рекурсивної PDF/A-сумісності вкладеного навантаження записувач просто відмовляє у виклику в цих режимах. PDF/A-3 (SetPDFAMode 5 або 6) лишається дозволеним — див. v3.55.0 щодо автоматичного вприскування /AFRelationship
- SetOpenActionMenu тепер відхиляє значення MenuItem поза білим списком {NextPage, PrevPage, FirstPage, LastPage}, коли документ перебуває в режимі PDF/A. ISO 19005-1 §6.6.1 обмежує іменовані дії саме цим набором, тож раніше API мовчки створював невідповідні словники Open-Action для Find / Print / FullScreen, які veraPDF відхилив би
- NewOptionalContentGroup тепер відхиляє виклики в режимах PDF/A-1 (SetPDFAMode 1 або 2). ISO 19005-1 §6.1.13 забороняє ключ Catalog /OCProperties. PDF/A-2 (режими 3/4) і PDF/A-3 (режими 5/6) допускають додатковий вміст із обмеженнями у відповідних §6.9, тож перевірка спрацьовує лише для PDF/A-1
Version 3.55.0
Змінено
- Документи PDF/A-3 тепер автоматично отримують запис /AFRelationship у кожному вбудованому файлі. Раніше файл PDF/A-3, створений бібліотекою, міг не пройти перевірку, бо ISO 19005-3 Annex E, Table E.1 вимагає AFRelationship у кожній специфікації вбудованого файла. Тепер записувач вставляє налаштоване значення за замовчуванням ('Unspecified' із коробки) у будь-який словник FileSpec, якому цього запису бракує під час збереження, повторюючи автоматичне вприскування AFRelationship для PDF/UA, додане раніше. Лише режими PDF/A-3 (SetPDFAMode 5 = PDF/A-3b або 6 = PDF/A-3a) запускають автоматичне вприскування; PDF/A-1 і PDF/A-2 і далі повністю відхиляють вбудовані файли згідно з ISO 19005-1 §6.1.11 і ISO 19005-2 §6.8
- SetPDFA3DefaultAFRelationship — це новий API, який перевизначає значення за замовчуванням, що його записувач виводить, коли у вбудованому файлі немає запису /AFRelationship. Приймає значення ISO 19005-3 Table E.1: 'Source' (вбудований файл є джерельним матеріалом, що породив вміст PDF), 'Data' (файл є структурованими даними, на яких базується візуальна таблиця чи діаграма), 'Alternative' (альтернативне подання, наприклад аудіоверсія), 'Supplement' (додаткове подання, наприклад MathML-форма рівняння), 'Unspecified' (зв’язок не можна охарактеризувати жодним із наведених варіантів), або будь-яке зареєстроване ім’я другого класу. Порожній рядок скидає значення до 'Unspecified'. Переважні значення для окремих файлів і далі доступні через SetEmbeddedFileAFRelationship
- Нові API доступні на фасаді Delphi як TPDFlib.SetPDFA3DefaultAFRelationship, а через DLL — як DLSetPDFA3DefaultAFRelationship (PWideChar) і DLSetPDFA3DefaultAFRelationshipA (PAnsiChar)
Version 3.54.0
Змінено
- LoadOutputIntentProfile — це новий API, який замінює вбудований профіль sRGB OutputIntent зовнішнім ICC-профілем, завантаженим із диска. Потрібний під час створення документів PDF/A у колірних просторах DeviceCMYK або DeviceGray, оскільки бібліотека постачається лише з профілем sRGB. Типовий сценарій: спочатку викликати SetPDFAMode (що ініціалізує каркас OutputIntent), а потім LoadOutputIntentProfile('C:\path\to\FOGRA39.icc', 'DeviceCMYK'), щоб підмінити байти профілю й позначити документ новим колірним простором. Повертає 1 у разі успіху, 0 при file-not-found або невідомому колірному просторі. Доступний на фасаді Delphi як TPDFlib.LoadOutputIntentProfile і через DLL як DLLoadOutputIntentProfile (форма PWideChar) та DLLoadOutputIntentProfileA (форма PAnsiChar). ISO 19005-1 §6.2.2 дозволяє будь-який зареєстрований ICC-профіль у потоці DestOutputProfile
- SetFillColorCMYK, SetTextColorCMYK, SetTextHighlightColorCMYK, SetTextUnderlineColorCMYK, AddSeparationColor, SetFillColorSep, SetLineColorSep, SetTextHighlightColorSep і SetTextColorSep тепер успішно працюють у режимі PDF/A, коли профіль OutputIntent документа є DeviceCMYK. Раніше ці API відхиляли кожен виклик у режимі PDF/A незалежно від OutputIntent, через що не можна було створити сумісні документи CMYK. Тепер перевірка є PDFAMode = 0 OR OutputIntentColorSpace = 'DeviceCMYK', що відповідає правилу ISO 19005-1 §6.2.3.3 про дозволеність DeviceCMYK, коли OutputIntent використовує профіль CMYK, і ISO 19005-1 §6.2.3.4, який дозволяє альтернативи Separation, якщо їхній базовий колірний простір також сумісний
- SetTextShader тепер успішно працює в режимі PDF/A, коли профіль OutputIntent є або DeviceRGB, або DeviceCMYK. Самі shader’и не заборонені PDF/A; валідатор (на боці читання) перевіряє, що внутрішній колірний простір shader відповідає OutputIntent. Попередня жорстка заборона відхиляла й сумісне використання shader
- Розблокування CMYK / Separation / Shader залежить від тега OutputIntentColorSpace, який задають AddOutputIntent і LoadOutputIntentProfile (додані у v3.53.0). Виклик SetPDFAMode без LoadOutputIntentProfile залишає колірний простір як DeviceRGB (вбудований профіль sRGB), тож виклики CMYK і далі відхиляються за замовчуванням — нова поведінка вмикається лише через LoadOutputIntentProfile
Version 3.53.0
Змінено
- Словник OutputIntent тепер містить повний набір полів каркаса PDF/A, рекомендований ISO 19005-1 §6.2.2 і Adobe Acrobat preflight: /OutputCondition (людиночитаний опис колірної умови), /Info (розгорнутий ідентифікаційний текст) і /RegistryName (URL реєстру, за замовчуванням http://www.color.org). Для старих однопараметрових точок виклику значення за замовчуванням — "sRGB IEC61966-2.1" / "sRGB IEC61966-2.1" / "http://www.color.org"; нове перевантаження AddOutputIntent приймає чотири власні поля напряму, щоб викликачі могли заповнювати їх для своїх колірних умов
- AddOutputIntent отримує нове п’ятиаргументне перевантаження: AddOutputIntent(ColorSpace, OutputConditionIdentifier, OutputCondition, Info, RegistryName). Старий однопараметровий варіант і далі працює без змін; тепер він делегує новому перевантаженню зі значеннями sRGB за замовчуванням. Аргумент ColorSpace також вибирає кількість компонентів /N, яку записують у словник вбудованого ICC-профілю (3 для DeviceRGB, 4 для DeviceCMYK, 1 для DeviceGray); сам вбудований профіль і далі лишається вбудованим потоком sRGB до виходу майбутнього API LoadOutputIntentProfile у v3.54.0
- TPDFDocument відкриває OutputIntentColorSpace як властивість читання/запису, що відстежує колірний простір останнього виклику AddOutputIntent. Це стане умовою перевірки для обмежень на боці запису CMYK / Separation / Shader у v3.54.0, де колірні API, які сьогодні відхиляють кожен виклик у режимі PDF/A, відхилятимуть лише тоді, коли колірний простір не збігається з OutputIntent
Version 3.52.0
Змінено
- CheckCompliancePDFA тепер перевіряє анотації, графічний стан, дії та form XObjects, завершуючи покриття читального валідатора PDF/A для розділів ISO 19005-1 6.2-6.6 та відповідних диференційних правил PDF/A-2/-3. Валідатор повідомляє 14 нових класів проблем (00050-00067): заборонені підтипи анотацій (00050; ISO 19005-1 §6.5.2 забороняє FileAttachment / Sound / Movie для PDF/A-1, а ISO 19005-2 §6.3.1 забороняє 3D / Sound / Screen / Movie для PDF/A-2 і PDF/A-3), annotation /CA, відмінний від 1.0 (00051; §6.5.3), annotation /F без значення або з Print=0 / Hidden=1 / Invisible=1 / NoView=1 (00052; §6.5.3, із винятком /Subtype /Popup), annotation /AA (00054; §6.6.2), словник вигляду анотації з ключами, відмінними від /N, або невідповідним значенням /N (00055; §6.5.3 Cor2), анотація Widget з /A (00056; §6.9), ExtGState /TR (00058; §6.2.8), ExtGState /TR2, відмінний від /Default (00059; §6.2.8), а в PDF/A-1 лише: ExtGState /SMask, відмінний від /None (00061; §6.4), /BM, відмінний від Normal або Compatible (00062; §6.4), /CA або /ca, відмінний від 1.0 (00063; §6.4)
- Аудит action-anywhere (00064, 00065) замінює перевірку лише OpenAction із v3.50.0 повним проходом, який позначає заборонені значення дій /S (Launch, Sound, Movie, ResetForm, ImportData, JavaScript, Hide, SetState, NOP, Trans, GoTo3DView, Rendition, SetOCGState) та іменовані дії, у яких /N виходить за межі {NextPage, PrevPage, FirstPage, LastPage}, незалежно від того, де саме живе дія (annotation /A, widget /A, outline /A, catalog /OpenAction тощо). ISO 19005-1 §6.6.1
- undefined
Version 3.51.0
Змінено
- undefined
- undefined
- undefined
Version 3.50.0
Змінено
- undefined
- undefined
Виправлено
- undefined
Version 3.49.0
Змінено
- undefined
Version 3.48.0
Змінено
- undefined
Version 3.47.0
Змінено
- undefined
Version 3.46.1
Змінено
- undefined
- undefined
Version 3.46.0
Змінено
- undefined
- undefined
Version 3.45.0
Змінено
- undefined
- undefined
- undefined
- undefined
Version 3.44.1
Змінено
- undefined
- undefined
Version 3.44.0
Змінено
- undefined
- undefined
- undefined
Version 3.43.0
Змінено
- undefined
- undefined
- undefined
Виправлено
- undefined
Version 3.42.0
Змінено
- undefined
Виправлено
- undefined
- undefined
Version 3.41.0
Змінено
- undefined
- undefined
- undefined
- undefined
Version 3.40.0
Додано
- undefined
Змінено
- undefined
Виправлено
- undefined
Version 3.39.0
Змінено
- undefined
- undefined
Version 3.38.0
Змінено
- undefined
- undefined
- undefined
Version 3.37.2
Змінено
- undefined
Version 3.37.1
Змінено
- undefined
Version 3.37.0
Змінено
- undefined
Version 3.36.1
Змінено
- undefined
Version 3.36.0
Змінено
- undefined
Version 3.35.1
Змінено
- undefined
Version 3.35.0
Змінено
- undefined
Version 3.34.0
Змінено
- undefined
Version 3.33.1
Додано
- undefined
Version 3.33.0
Змінено
- undefined
Version 3.32.0
Змінено
- undefined
Version 3.31.1
Змінено
- undefined
- undefined
Version 3.31.0
Виправлено
- undefined
Version 3.30.1
Додано
- undefined
Version 3.30.0
Змінено
- undefined
Version 3.29.1
Додано
- undefined
Version 3.29.0
Змінено
- undefined
Version 3.28.5
Змінено
- undefined
Version 3.28.4
Змінено
- undefined
Version 3.28.3
Змінено
- undefined
Version 3.28.2
Змінено
- undefined
Version 3.28.1
Змінено
- undefined
- undefined
Version 3.28.0
Змінено
- undefined
Version 3.27.2
Виправлено
- undefined
Version 3.27.1
Змінено
- undefined
Version 3.27.0
Змінено
- undefined
Version 3.26.0
Змінено
- undefined
Version 3.25.1
Змінено
- undefined
- undefined
Version 3.25.0
Змінено
- undefined
Version 3.24.0
Змінено
- undefined
Version 3.23.1
Змінено
- undefined
- undefined
- undefined
Виправлено
- undefined
Version 3.23.0
Змінено
- undefined
- undefined
- undefined
Version 3.22.0
Змінено
- undefined
- undefined
- undefined
- undefined
- undefined
- undefined
Version 3.21.0
Змінено
- undefined
- undefined
- undefined
- undefined
Виправлено
- undefined
Version 3.20.3
Змінено
- undefined
- undefined
Version 3.20.2
Змінено
- undefined
Version 3.20.1
Змінено
- undefined
- undefined
- undefined
- undefined
- Оновлено вбудовані необов'язкові DLL середовища виконання PDFium для Win32 і Win64. GDI+ лишається типовим рендерером; PDFium і далі вмикається через SetPDFiumFileName і SelectRenderer(3)
- Перевірка: набори DUnitX для Delphi Win32 і Win64 успішно пройшли по 207/207 кожен, а C++Builder Win64x GoogleTest пройшов 61 тест із пропуском 2 наявних тестів, залежних від зразків
Version 3.20.0
Змінено
- Ще вісім точок входу записувача PDFlib тепер проходять через Phase 3 EnsureMinVersion, тож версія документа автоматично підвищується до мінімуму, потрібного для можливості, що генерується: SetDocumentMetadata (PDF 1.4 - /Metadata XMP stream) SetPDFAMode(1 or 2) (PDF 1.4 - /MarkInfo + /OutputIntents) PageJavaScriptAction (PDF 1.5 - Page /AA + JavaScript) DocJavaScriptAction (PDF 1.4 - Catalog /AA + JavaScript) SetTabOrderMode (PDF 1.5 - Page /Tabs) NewOptionalContentGroup (PDF 1.5 - /Type /OCG) SetNeedAppearances (PDF 1.5 - AcroForm /NeedAppearances) NewFormField(ftSignature) (PDF 1.5 - AcroForm /SigFlags AppendOnly)
- У поєднанні з набором v3.15.0 (SetTransparency, SetPageUserUnit, Encrypt, SetPageLayout) і набором v3.17.0 (вісім записів JavaScript / embedded-file / XFA / SWF) PDFlib тепер автоматично підвищує FVersion для двадцяти одного пункту входу записувача
- Раніше NewOptionalContentGroup підвищував FVersion напряму; тепер він проходить через EnsureMinVersion, тож LockSaveVersion враховується, а підвищення записується в AutoBumpedFeatures
Version 3.19.0
Змінено
- Відповідність версії PDF під час збереження і завантаження тепер також розпізнає чотири раніше відкладені можливості: Btn /Ff bit 15 NoToggleToOff (лише для радіокнопок) -> PDF 1.4 DeviceN /Subtype /NChannel (уточнення простору кольорів) -> PDF 1.6 FontFile3 /Subtype /OpenType (тип шрифтової програми) -> PDF 1.6 Sig /SubFilter ETSI.CAdES.detached or ETSI.RFC3161 -> PDF 1.7
- Правило NChannel відповідає формі масиву простору кольорів DeviceN [/DeviceN names alternateSpace tintTransform attributes], коли словник атрибутів під індексом 4 містить /Subtype /NChannel
- Правило FontFile3 OpenType спрацьовує лише тоді, коли до потоку переходять через батьківський ключ із назвою 'FontFile3', тож непов'язані потоки, які випадково містять /Subtype /OpenType, не позначаються
- Таблиця PDFFeatureRules тепер містить 103 правила (99 + 4 нові)
Version 3.18.6
Змінено
- Відповідність версії PDF під час збереження і завантаження тепер розпізнає /AA (additional actions) з урахуванням типу контейнера: Catalog /AA (тригери на рівні документа) -> PDF 1.4 Annot /AA (тригери анотацій) -> PDF 1.4 Page /AA (тригери сторінки) -> PDF 1.5
- /AA полів форми (PDF 1.2) і далі покривається наявним контрактом збереження PDF 1.3; окреме правило не потрібне
- Таблиця PDFFeatureRules тепер містить 99 правил (96 + 3 нові)
Version 3.18.5
Додано
- Нова перевірка: AcroForm /NeedAppearances розпізнається як можливість PDF 1.5 згідно з PDF 1.5 Table 218
Змінено
- Таблиця PDFFeatureRules тепер містить 96 правил (95 + 1 нове)
Виправлено
- Відповідність версії PDF під час збереження і завантаження тепер правильно класифікує Page /Tabs як можливість PDF 1.5; раніше її помилково відносили до PDF 1.4. Документ змін специфікації PDF 1.4 (Adobe TN #5409) не перелічує /Tabs, а PDF 1.5 Table 8.10 вводить "Tabs (Optional; PDF 1.5)"
Version 3.18.4
Додано
- Покриття регресійних тестів zlib-ng тепер охоплює корисні навантаження граничного розміру, дані сканліній у стилі PNG, збережені багатоблокові потоки та відомі потоки zlib у тестових раннерах Delphi і C++Builder
Змінено
- PDFlibZLib тепер завжди використовує вбудований статичний backend об'єктів zlib-ng у звичайних збірках бібліотеки, прибираючи решту резервного шляху System.ZLib
- Перевірка: набори DUnitX для Delphi Win32 і Win64 успішно пройшли по 194/194 кожен, а C++Builder Win64x GoogleTest пройшов 58 тестів із пропуском 2 наявних тестів, залежних від зразків
Version 3.18.3
Змінено
- Демо Delphi і C++Builder, які генерують PDF або текстовий вивід, тепер автоматично відкривають створений документ після успішного збереження
- Пакування інсталятора тепер не кладе артефакти збірки до папок демо і робить зразки C++Builder, а також модулі DLL і ActiveX/OCX, компонентами за вибором; відповідні файли встановлюються лише тоді, коли вибрано компонент
Version 3.18.2
Змінено
- Демо EditFormField для Delphi і C++Builder тепер очищають /NeedAppearances перед оновленням значень полів, тож кожне відредаговане текстове поле отримує оновлений нормальний потік вигляду у збереженому PDF
- Це узгоджує збережений потік /AP із записаним значенням /V і дає змогу уникнути відмінностей, що залежать від переглядача, коли фокус на полі показує текст, якого бракувало у статичному вигляді поля
Version 3.18.1
Змінено
- Відповідність версії PDF під час збереження і завантаження тепер також розпізнає бітові прапорці полів форми /Ff і біт AppendOnly у AcroForm /SigFlags: /Ff bit 21 (FileSelect, mask 1048576) -> PDF 1.4 /Ff bit 22 (MultiSelect, mask 2097152) -> PDF 1.4 /Ff bit 23 (DoNotSpellCheck, mask 4194304) -> PDF 1.4 /Ff bit 24 (DoNotScroll, mask 8388608) -> PDF 1.4 /Ff bit 25 (Comb, mask 16777216) -> PDF 1.5 /Ff bit 26 (RichText / RadiosInUnison, 33554432) -> PDF 1.5 /Ff bit 27 (CommitOnSelChange, mask 67108864) -> PDF 1.5 /SigFlags bit 2 (AppendOnly, mask 2) -> PDF 1.5
- Наслідування /Parent не відстежується: лише словники, які явно містять /Ff або /SigFlags, запускають правила
- Таблиця PDFFeatureRules тепер містить 95 правил (87 + 8 нових бітового рівня)
- Перевірка: набори DUnitX для Delphi Win32 і Win64 успішно пройшли по 191/191 кожен, а C++Builder Win64x GoogleTest успішно пройшов 57/57
Version 3.18.0
Змінено
- Відповідність версії PDF під час збереження і завантаження тепер також розпізнає ще дев'ять можливостей на рівні підключів і бітів: бітові прапорці анотацій (/F mask): Locked (128) -> PDF 1.4 ToggleNoView (256) -> PDF 1.5 LockedContents (512) -> PDF 1.7 характерні підключі каталогу і сторінки: /BoxColorInfo (page) -> PDF 1.4 /Permissions, /Legal, /PresSteps -> PDF 1.5 /VP (page geospatial viewport) -> PDF 1.6 /Collection (catalog portable collection) -> PDF 1.7
- Таблиця PDFFeatureRules тепер містить 87 правил (78 на рівні глав + 9 на рівні підключів / бітів)
- Перевірка: набори DUnitX для Delphi Win32 і Win64 успішно пройшли по 189/189 кожен, а C++Builder Win64x GoogleTest успішно пройшов 57/57
Version 3.17.0
Змінено
- Ще вісім точок входу записувача PDFlib тепер проходять через Phase 3 EnsureMinVersion, тож версія документа автоматично підвищується до мінімуму, потрібного для відповідної можливості: AddLinkToJavaScript, SetOpenActionJavaScript, AddGlobalJavaScript, FormFieldJavaScriptAction (PDF 1.3 - JavaScript actions) AddEmbeddedFile, AddFileAttachment (PDF 1.3 - file attachments) SetXFAFromString (PDF 1.5 - XFA forms) AddSWFAnnotationFromFile (PDF 1.7 - RichMedia annotation)
- У поєднанні з набором v3.15.0 (SetTransparency, SetPageUserUnit, Encrypt, SetPageLayout) PDFlib тепер покриває тринадцять точок входу записувача для високих версій від початку до кінця
- Перевірка: набори DUnitX для Delphi Win32 і Win64 успішно пройшли по 187/187 кожен, а C++Builder Win64x GoogleTest успішно пройшов 57/57
Version 3.16.3
Додано
- Новий API PDFlib: LockSaveVersion(Version) фіксує документ на значенні Version і зупиняє автоматичне підвищення вище нього з боку Phase 3 writer-side EnsureMinVersion. UnlockSaveVersion знімає блокування
Змінено
- Правило збереження не змінилося: можливості, що генеруються записувачем і перевищують заблоковану версію, і далі дають LastErrorCode 602 під час збереження замість мовчазного підвищення заголовка
- Перевірка: набори DUnitX для Delphi Win32 і Win64 успішно пройшли по 184/184 кожен, а C++Builder Win64x GoogleTest успішно пройшов 57/57
Version 3.16.2
Змінено
- Завантажені PDF тепер через GetInformation(103) ("ContributorFeatures") показують подання виявлення можливостей під час завантаження, яке містить лише можливості, що підвищують версію. Список містить лише можливості, чия мінімальна потрібна версія строго більша за HeaderVersion (key 100), тож він прямо відповідає на запитання "why is the effective version higher than the file header?"
- GetInformation(101) ("DetectedFeatures") не змінився і й досі перелічує кожну знайдену можливість незалежно від внеску
- Перевірка: набори DUnitX для Delphi Win32 і Win64 успішно пройшли по 181/181 кожен, а C++Builder Win64x GoogleTest успішно пройшов 57/57
Version 3.16.1
Додано
- Розширено покриття тестів виявлення на боці завантажувача шістьма додатковими синтетичними фікстурами: прозорість ExtGState на сторінці (без підвищення версії), Catalog /MarkInfo (PDF 1.3 -> PDF 1.4), вміст /OCProperties + OCG (PDF 1.4 -> PDF 1.5), /Type /3DStream (PDF 1.5 -> PDF 1.6), фікстура з кількома можливостями та перевірка стабільності знімка
Змінено
- Перевірка: набори DUnitX для Delphi Win32 і Win64 успішно пройшли по 179/179 кожен, а C++Builder Win64x GoogleTest успішно пройшов 57/57
Version 3.16.0
Додано
- Нові ключі GetInformation: 100 повертає HeaderVersion (літеральний %PDF-X.Y), 101 повертає DetectedFeatures (можливості, розділені CRLF, що збіглися під час завантаження), 102 повертає AutoBumpedFeatures (можливості, розділені CRLF, що спричинили підвищення на боці записувача EnsureMinVersion)
Змінено
- Завантажені PDF-документи тепер проходять перевірку версії, керовану вмістом: кожен непрямий об'єкт проглядається через таблицю відповідності можливостей мінімальній версії, яку використовує правило збереження, і FVersion підвищується понад літеральне значення заголовка %PDF-X.Y, коли вміст справді вимагає вищої версії. Наприклад, запис сторінки /UserUnit підвищує ефективну версію до PDF 1.6 навіть тоді, коли заголовок файлу каже PDF 1.4
- Правило збереження не змінюється: документи, чию ефективну версію було підвищено під час завантаження, а потім явно знижено через SetInformation(0, ...), і далі дають LastErrorCode 602 під час збереження
- Перевірка: набори DUnitX для Delphi Win32 і Win64 успішно пройшли по 173/173 кожен, а C++Builder Win64x GoogleTest успішно пройшов 57/57
Version 3.15.0
Змінено
- Точки входу записувача, які створюють можливості, що вимагають певної мінімальної версії PDF, тепер автоматично підвищують версію PDF документа. Виклик SetTransparency для документа, позначеного як PDF 1.3, тепер піднімає заголовок до PDF 1.4 замість помилки збереження з LastErrorCode 602
- Таке саме автоматичне підвищення додано до SetPageUserUnit (>=1.6), Encrypt із Strength 1/2/3/4 (відповідно >=1.4/1.6/1.7/1.7) і двосторінкових варіантів SetPageLayout (>=1.5)
- Зміна поведінки порівняно з 3.14.x: застосунки, які раніше покладалися на правило v3.12.6 "save target rejects writer-emitted features", тепер успішно працюють на підвищеній версії. Завантажені PDF, які вже містять можливості вищої версії, і далі проходять через наявне правило під час збереження, тож завантаження tagged PDF і вибір PDF 1.3 усе ще завершується помилкою LastErrorCode 602
- Перевірка: набори DUnitX для Delphi Win32 і Win64 успішно пройшли по 170/170 кожен, а C++Builder Win64x GoogleTest успішно пройшов 57/57
Version 3.14.3
Змінено
- Відповідність версії PDF під час збереження тепер також розпізнає решту типів 3D-словників PDF 1.6 (/Type /3DStream /3DRef /3DBackground /3DRenderMode /3DLightingScheme /3DCrossSection /3DNode) і підтипи анотацій PDF 1.7 Redact, RichMedia та Projection, а також супровідні словники /Type /Requirement і /ReqHandler
- Перевірка: набори DUnitX для Delphi Win32 і Win64 успішно пройшли по 168/168 кожен, а C++Builder Win64x GoogleTest успішно пройшов 57/57
Version 3.14.2
Змінено
- Відповідність версії PDF під час збереження тепер також розпізнає можливості PDF 1.5: форми /XFA, /AlternatePresentations, дерево імен /Renditions, мультимедійні словники /Type /Rendition /MediaCriteria /MediaPermissions /MediaPlayers і підтип анотації Screen
- Збереження як PDF 1.4 тепер відхиляє документи, що містять ці можливості, з LastErrorCode 602
- Перевірка: набори DUnitX для Delphi Win32 і Win64 успішно пройшли по 166/166 кожен, а C++Builder Win64x GoogleTest успішно пройшов 57/57
Version 3.14.1
Змінено
- Відповідність версії PDF під час збереження тепер також розпізнає можливості PDF 1.4: tagged-PDF словники /StructTreeRoot /MarkInfo і StructElem, записи документа /Lang і сторінки /Tabs, словники /OutputIntents і /OutputIntent, підпис прав використання /UR3, а також підтипи анотацій PDF 1.4 Polygon, PolyLine, Caret, Ink, Popup і Watermark
- Збереження як PDF 1.3 тепер відхиляє документи, що містять ці можливості, з LastErrorCode 602
- Перевірка: набори DUnitX для Delphi Win32 і Win64 успішно пройшли по 165/165 кожен, а C++Builder Win64x GoogleTest успішно пройшов 57/57
Version 3.14.0
Змінено
- Відповідність версії PDF під час збереження тепер також розпізнає можливості PDF 1.3, такі як smooth shading, function objects, ICCBased і DeviceN color spaces, записи сторінки /TrimBox /BleedBox /ArtBox, /ToUnicode CMaps, вкладення файлів і анотації /Sound та /Movie, словники /Type /Filespec і /Type /EmbeddedFile, ключі /Group /EF /Alternates /Mask і дії JavaScript
- Виклики з PDF 1.2 тепер зберігаються за контрактом PDF 1.3: літеральний заголовок %PDF-1.2 зберігається, але правило приймає можливості PDF 1.3. Можливості PDF 1.4 і новіші і далі відхиляються з LastErrorCode 602
- Перевірка: набори DUnitX для Delphi Win32 і Win64 успішно пройшли по 162/162 кожен, а C++Builder Win64x GoogleTest успішно пройшов 57/57
Version 3.13.0
Змінено
- Перероблено правило відповідності версії PDF, яке відхиляє можливості пізніших версій під час збереження, в окремий модуль, щоб набір правил міг розширюватися без зайвих змін у ядрі документа
- Жодних видимих для користувача змін поведінки порівняно з v3.12.7: ті самі можливості поза версією і далі відхиляються з LastErrorCode 602
- Перевірка: набори DUnitX для Delphi Win32 і Win64 успішно пройшли по 155/155 кожен, а C++Builder Win64x GoogleTest успішно пройшов 57/57
Version 3.12.7
Додано
- Розширено автоматичне покриття тестами для робочого процесу прямого рендерингу PdfToImage в наборах Delphi DUnitX і C++Builder GoogleTest
Змінено
- Тепер тестовий раннер Delphi VCL GUI реєструє фікстури Syntax і XRef, узгоджуючись із покриттям консольного раннера
- Перевірка: набори DUnitX для Delphi Win32 і Win64 успішно пройшли по 147/147 кожен, а C++Builder Win64x GoogleTest успішно пройшов 57/57
Version 3.12.6
Змінено
- Збереження як PDF 1.3, 1.4, 1.5, 1.6 або 1.7 тепер примусово застосовує вибрану версію як контракт повного збереження
- Повні збереження прибирають перевизначення /Version у каталозі, прибирають непідтримувані записи розширення каталогу та метаданих для нижчих цілей і пригнічують потоки XMP-метаданих PDF 1.4 під час збереження як PDF 1.3
- SaveToFile, SaveToString і SaveToStream тепер завершуються помилкою LastErrorCode 602, коли вибрана цільова версія PDF нижча за можливості, що все ще є в документі, такі як transparency, optional content, JPX, UserUnit, 3D або AES crypt-filter
Version 3.12.5
Додано
- Додано регресійне покриття для невідомих escape-послідовностей у літеральних рядках і змішаних octal/non-octal escape-послідовностей
Змінено
- Поліпшено розбір літеральних рядків PDF 1.7, тож невідомі escape-послідовності ігнорують зворотну скісну риску, як того вимагає стандарт
- Вісімкові escape-послідовності в літеральних рядках тепер споживають лише вісімкові цифри і зберігають наступну не-вісімкову цифру як звичайні дані рядка
- Перевірка: набори DUnitX для Delphi Win32 і Win64 успішно пройшли по 141/141 кожен
Version 3.12.4
Додано
- Додано регресійне покриття для розділювачів імен правою дужкою і розріджених записів стиснених об'єктів у xref-потоці
Змінено
- Поліпшено лексичний розбір PDF 1.7, тож name-об'єкти тепер правильно зупиняються на розділювачі правою дужкою
- Перевірка: набори DUnitX для Delphi Win32 і Win64 успішно пройшли по 139/139 кожен
Виправлено
- Виправлено завантаження SmartAccess для записів стиснених об'єктів xref-потоку, номер object stream яких більший за байтову довжину PDF
Version 3.12.3
Додано
- Нові зашифровані AES PDF тепер записують значення Length crypt-filter як довжини в бітах, що відповідає контракту словника crypt filter у PDF 1.7
Змінено
- Поліпшено сумісність PDF 1.7 із зашифрованими документами для файлів стандартного security handler, які використовують StrF, StmF, EFF, Identity, None або іменовані crypt filters у стилі StdCF
- Потоки метаданих тепер поважають EncryptMetadata=false під час робочих процесів decrypt, encrypt і copy/save замість обробки як звичайні потоки
- Потоки вбудованих файлів тепер містять /Type /EmbeddedFile і використовують шлях ухвалення рішень embedded-file crypt-filter, коли зашифровані документи завантажуються або зберігаються
- Зовнішні потоки вбудованих файлів тепер підвищують FDecodeParms до DecodeParms, коли FFilter підвищується до Filter, зберігаючи параметри декодування потоку
- Значення Prev/XRefStm у xref-потоці та великі числові зміщення тепер зберігають 64-бітну точність у шляхах парсера і SmartAccess
- Перевірка: набори DUnitX для Delphi Win32 і Win64 успішно пройшли по 137/137 кожен
Version 3.12.2
Змінено
- Поліпшено сумісність декодування потоків PDF 1.7. Загальне декодування потоків тепер поважає /DP як псевдонім DecodeParms, розв'язує непрямі записи масиву параметрів декодування і приймає стандартні скорочення фільтрів /AHx і /LZW
- Вивід PDF для великих файлів тепер записує зміщення xref, startxref, linearization і ByteRange цифрового підпису через шляхи форматування 64-bit замість звуження цих значень через 32-бітні допоміжні функції цілих чисел
- Завантажені документи тепер трактують запис /Version у каталозі як ефективну версію PDF, коли вона новіша за версію заголовка файлу
- Перевірка: набори DUnitX для Delphi Win32 і Win64 успішно пройшли по 134/134 кожен
Виправлено
- Переписані xref-stream trailers більше не зберігають ключі DecodeParms лише для потоку, коли PDFlibPas зберігає їх як класичні словники трейлера
Version 3.12.1
Змінено
- Створені PDF тепер відкриваються з першою сторінкою, розмір якої дорівнює доступній висоті вікна переглядача, тож уся перша сторінка видима згори донизу на найбільшому масштабі, що вміщується у вікно. Налаштуйте на документі власний OpenAction (SetOpenActionDestination, SetOpenActionMenu, SetOpenActionJavaScript), щоб перевизначити це значення за замовчуванням
Version 3.12.0
Додано
- Додано CRT-заглушки malloc/calloc/realloc/free з вирівнюванням по 32 байти для статичних C-бібліотек і виправлено TPDFJPEGImage.Compress так, щоб звільняти буфери jpeg_mem_dest через той самий шлях C free, який їх виділив
- Розширено публічні примітки щодо перевірки, щоб окремо показати суворе автоматизоване покриття, яке стоїть за цим випуском: збірки бібліотеки, round trips стиснення, вивід HelloWorld /FlateDecode, рендеринг JPEG, image workflows, fonts, forms, security, signing, printing і робочі процеси, похідні від демо C++Builder
Змінено
- Статичні backend-и Windows тепер включають об'єкти libjpeg-turbo NASM SIMD для Win32 і Win64, а також об'єкти диспетчеризації zlib-ng x86 SIMD для набору Win64x zlib-ng
- Перероблено сценарії перебудови zlib-ng так, щоб збірки Win64x bcc64x і діагностичні збірки MSVC компілювали універсальні файли вихідного коду, SSE2, SSSE3, SSE4.1/SSE4.2, PCLMULQDQ і AVX2 з прапорцями можливостей для кожного файла, а не покладалися на один глобальний перемикач компілятора
Version 3.11.0
Додано
- Додано невеликий bridge-об'єкт zlib-ng для збірок Win64, щоб код Pascal зберігав стабільні zlib-сумісні точки входу, а Delphi і C++Builder споживали власні сумісні з лінкером набори об'єктів
Змінено
- Переведено стиснення і розпакування Flate у Windows на zlib-ng у zlib-сумісному режимі. Win32, Delphi Win64 і C++Builder Win64x тепер лінкують ABI-узгоджені статичні набори об'єктів zlib-ng із Lib\thirdparty\Win32, Lib\thirdparty\Win64 і Lib\thirdparty\Win64x
- Оновлено всі проєкти демо C++Builder, щоб вони визначали PDFLIB_CPPBUILDER, узгоджуючись із GoogleTest runner і не даючи демо Win64x лінкувати об'єкти zlib-ng для Delphi Win64
Виправлено
- Шлях Win64 більше не проходить через unit System.ZLib Delphi, тож стиснення і розпакування PDF-потоків може користуватися backend-ом zlib-ng так само, як і 32-бітна збірка
Version 3.10.3
Додано
- Розширено набір GoogleTest для C++Builder, щоб покрити кожне демо в Demo\C++Builder. План phase-1 із 7 фікстур виріс до 15 фікстур / 52 випадків GoogleTest, і всі вони проходять на Win64x. Додатково охоплені демо: AddFormattedTitle, AddTextImage, AddTrueTypeSubsettedFont, AddWebLink, CanvasText, CaptureToNewSize, CopyPageRanges, CreateWithImage, CreateWithImageToStream, DoInTheStream, DrawWrappedText, EditFormField, EmbeddedFonts, ExtractAnnotAttach, ExtractEmbeddedFonts, ExtractImage, ImageToPdf, ImportEMF, MultiFunction (renderer switch), PageOperations, PdfDecrypt, PdfPermission, PrintPDF, TextMeasure, TextPaging
Version 3.10.2
Додано
- Додано раннер GoogleTest для C++Builder під Tests\C++Builder, який перевіряє Lib\PDFlibrary.pas через ті самі HPP-заголовки, згенеровані {$JPHNE}, що й демо C++Builder. Перша фаза відтворює сім базових сценаріїв Delphi (HelloWorld, DrawShapes, CreateTable, PdfEncrypt, ExtractText, PdfSigning, PdfToImage rendering) як 17 випадків GoogleTest, і всі вони проходять на Win64x
- Розширено набір Delphi DUnitX набором Tests.Print, який охоплює демо PrintPDF і ShowPrinterBins (перелік принтерів за замовчуванням, налаштування користувацького принтера, параметри друку, завдання друку з перенаправленням у файл), а також тест зміни рендерера в Tests.Render, що перевіряє вибір рушія GDI+ / PDFium / Cairo у демо MultiFunction на одному й тому самому вихідному PDF
Version 3.10.1
Додано
- Додано 57 іменованих форматів сторінок до SetPageSize, тож ті самі канонічні назви форматів сторінок працюють і тут: SIZE8X11, QUADA0, DOUBA0, B0PLUS, ENVB4/B5/C6/DL/MONARCH, ENV9/10/11, ANSIA/B/C/D/E, ARCHA/B/C/D/E1/E, SHIROKU, G1K, USBC/EUBC/ASBC, ID1/ID2/ID3, ONEINCH/TWOINCH/L2INCH/USVISA, P2R..P24R / S8R / P4D photo prints, а також китайські / тайванські формати аркушів octavo і sextodecimo LARGE/STANDARD/CROWN/ROC 8K та відповідні половини 16K
Version 3.10.0
Додано
- Додано нативні версії C++Builder для кожного зразка Delphi в Demo. Демонстрації створення PDF, роботи зі сторінками, шрифтами, зображеннями, безпекою, підписуванням, рендерингом і друком тепер можна збирати й запускати з C++Builder без будь-якої Delphi-обгортки
- Додано короткий англомовний Readme.txt до кожної папки демо Delphi з описом того, що показує демо, на якому API воно зосереджене і як його запускати; HTML-огляд у Demo\Delphi\index.html посилається на всі ці файли, згруповані за темами
Змінено
- Кожне нове демо розташоване в Demo\C++Builder\<Name>\ як консольний проєкт, що безпосередньо використовує Lib\PDFlibrary.pas і постачається з файлами введення, потрібними для запуску
- Скопійовано той самий Readme.txt для кожного демо C++Builder із розділом Run, переписаним під консольний робочий процес (argv arguments замість Open/SaveDialogs); відповідний Demo\C++Builder\index.html перелічує кожне демо C++Builder з тими самими тематичними групами
Виправлено
- Виправлено витік пам'яті в демо ImportEMF (екземпляр TPDFlib створювався, але ніколи не звільнявся)
Version 3.9.14
Змінено
- Прибрано зайве в демо wrapped-text і HTML pagination, щоб кожне з них зосереджувалося на власному API і запускалося з однієї кнопки
- Перейменовано два проєкти демо (EmbeddedFonts і PdfPermission), щоб скомпільовані виконувані файли збігалися з назвами папок, а не зі старими прототипними назвами
Виправлено
- Виправлено демо копіювання діапазонів сторінок, щоб воно справді копіювало сторінки, а не завжди повідомляло про збій
Version 3.9.13
Додано
- Запроваджено автоматизований набір DUnitX (консольний і VCL GUI ранери), який покриває службові модулі — buffer, AES, ZLib, Unicode і digest hashing — а також робочі процеси рівня бібліотеки, включно зі створенням документа, save-to-file і save-to-stream, load round-trips та шифруванням AES-128/AES-256
Виправлено
- Виправлено помилку позиції потоку у внутрішньому читачі буфера: читання двобайтових слів зсувало курсор читання на чотири байти замість двох. У буферах довших за два байти наступні читання потрапляли не в той зсув і мовчки повертали неправильні дані. Ефект був особливо помітний під час розбору двійкових структур даних, що чергують байтові та словові читання
Version 3.9.12
Змінено
- Рендеринг зображень GDI+ тепер за замовчуванням використовує плавну високоякісну bicubic-інтерполяцію під час масштабування растрових зображень до роздільної здатності екрана або експорту. Раніше типовим був nearest-neighbor, що створював помітні сходинкові артефакти на малих зображеннях (логотипах, мініатюрах), збільшених для перегляду на екрані або експорту з високим DPI. Ті, хто віддає перевагу різкішому режиму nearest-neighbor, можуть відновити стару поведінку через SetGDIPlusOptions
Version 3.9.11
Виправлено
- Виправлено рендеринг Cairo для PDF-зображень, які використовують color-key transparency (масив діапазонів кольорів /Mask у словнику зображення). Раніше, коли сторінка містила зображення з такою формою прозорості, Cairo renderer повністю пропускав зображення замість композитингу його з фоном сторінки. Виправлення будує поканальний альфа-канал із оголошених діапазонів color-key і рендерить результат як прозоре зображення, що дає вихід, візуально узгоджений із renderer GDI+
Version 3.9.10
Виправлено
- Виправлено регресію рендерингу Cairo, коли весь вміст сторінки після послідовності з обрізаним зображенням помилково обмежувався прямокутником обрізання зображення. Сторінки PDF, які зберігають стан графіки, застосовують clip path, малюють зображення, а потім відновлюють стан — поширений прийом компонування для зображень у рамці чи з обводкою — рендерили б увесь подальший текст, фігури й графіку лише всередині обрізаної області. Збереження і відновлення стану Cairo тепер правильно зіставляються з операторами PDF q/Q, тож область обрізання скидається після малювання зображення
Version 3.9.9
Додано
- Додано рушій рендерингу PDF на основі Cairo як третій варіант рендерингу поряд із GDI+ і PDFium. Викличте SelectRenderer(2) перед рендерингом, щоб активувати його; рушій потребує cairo.dll із вбудованої папки DLL\Cairo. Рендеринг Cairo підтримує ті самі режими виводу, що й GDI+: експорт у bitmap file і stream (BMP, JPEG, PNG, GIF, TIFF, G4 TIFF), рендеринг через device context і прямий друк
Змінено
- Демо MultiFunction View/Print тепер показує трискладовий перемикач рендерера, щоб користувачі могли порівнювати вивід GDI+, PDFium і Cairo поруч на одному документі без жодних змін коду
Version 3.9.8
Виправлено
- Прибрано два хибні діагностичні повідомлення компілятора у Win32 C-runtime shim, що з'являлися в RAD Studio 13.1 і новіших версіях. Попередження про застарівання (W1000) виникало тому, що захист можливостей версії компілятора не було поширено на компілятори новіші за Delphi 2009, через що вони компілювалися проти застарілого API менеджера пам'яті. Підказка про невикористану змінну (H2164) виникала для внутрішньої змінної сумісності, потрібної лише для збірок Delphi 7; тепер вона обмежена умовним блоком тієї версії. Обидві проблеми були лише діагностичними й не впливали на виконання
Version 3.9.7
Додано
- Додано необов'язковий рендеринг сторінок на основі PDFium у Windows, включно з рендерингом BMP stream, рендерингом device context, memory rendering і друком
Змінено
- Оновлено демо Delphi MultiFunction View/Print перемикачем рендерера, щоб користувачі могли перемикатися між наявним рендерером GDI+ і PDFium
Version 3.9.6
Додано
- Додано окремі сценарії Inno Setup для повного пакета PDFlibPas і trial-пакета з релізно-орієнтованими винятками для метаданих системи керування вихідним кодом, результатів збірки, кешів IDE, локальних файлів агента та вбудованих сторонніх дерев вихідного коду, які не входять до постачаного пакета
Змінено
- Інсталятор trial тепер збирає й пакує trial-бібліотеки у бінарному вигляді для RAD Studio 11.3, 12.3 і 13.1, а також trial-демо Delphi, перед тим як генерується виконуваний файл setup
Version 3.9.5
Виправлено
- Виправлено збірки бібліотеки Win32 під RAD Studio 9.0 / Delphi XE2. Сценарій збірки передавав прапорець каталогу виводу DCU, який існує лише починаючи з Delphi 2010; компілятор XE2 тлумачив цей прапорець інакше, утворюючи спотворений шлях виводу і фатальну помилку ще до обробки будь-якого файла вихідного коду. Тепер сценарій автоматично вибирає потрібний прапорець залежно від версії цільового компілятора
- Виправлено пов'язаний захист версії компілятора у вихідному коді бібліотеки, який під умовою XE2+ викликав іменовану runtime-функцію, що з'явилася в XE4. Збірки для XE2 і XE3 тепер розв'язують правильний імпорт сумісності
Version 3.9.4
Виправлено
- Виправлено налаштування принтера для мережевих і спільних на сервері принтерів шляхом застосування лотка паперу, носія, двостороннього друку, якості та інших параметрів друку через handle DEVMODE принтера замість handle device context принтера
Version 3.9.3
Змінено
- Оновлено вбудований AES backend до джерел AES 2018 від Brian Gladman і для Win32, і для Win64. Сценарії відтворюваної збірки тепер дають змогу будь-коли перебудувати статичні об'єкти AES з вихідного коду. У процесі було виявлено й виправлено ABI-дефект у прив'язках Pascal: функціям AES-CBC encrypt і decrypt бракувало оголошення C calling convention, тож збірки Win32 мовчки передавали аргументи в неправильному порядку регістрів, що могло призводити до неправильного зашифрованого виводу. На Win64 це не впливало, бо платформа примусово використовує єдину угоду виклику
Безпека
- Посилено сценарії перебудови сторонніх компонентів, щоб MSVC-based сценарії zlib, JPEG і CRT-stub можна було запускати як з кореня репозиторію, так і з каталогу thirdparty; раніше вони вимагали, щоб поточний каталог був встановлений на папку thirdparty
Version 3.9.2
Виправлено
- Оновлено backend JPEG 2000 з застарілого OpenJPEG 1.5 до OpenJPEG 2.5.4 і для Win32, і для Win64. Обидві платформи тепер використовують статичне лінкування об'єктів, тож кодування і декодування JPEG 2000 працюють без додаткової DLL середовища виконання. Сучасний кодек приносить актуальну обробку заголовків JP2/J2K, API потоків на основі callback і накопичені виправлення помилок і безпеки з upstream-проєкту. Публічний API TJpeg2000Bitmap не змінився
Version 3.9.1
Виправлено
- Виправлено рендеринг JPEG-сторінок і експорт зображень після оновлення libjpeg-turbo, відновлено перетворення PdfToImage JPG і вивід TPDFJPEGImage.SaveToStream на Win32 і Win64
- Виправлено ABI-прив'язки libjpeg-turbo для Win32, щоб callback-и, вирівнювання структур, булеві поля та JPEG-цілі з пам'яті відповідали libjpeg-turbo 3.1.90
- Виправлено розпакування потоку FlateDecode у Win32 з вбудованим backend-ом zlib 1.3.2, відновлено завантаження xref-потоків PDF для файлів на кшталт зразка PdfToImage
Version 3.9.0
Змінено
- Оновлено вбудований backend JPEG 2000 із застарілого OpenJPEG 1.5 до OpenJPEG 2.5.4. Завантаження і збереження JPEG 2000 тепер використовують сучасний кодек, API потоків на основі callback і актуальну обробку заголовків JP2/J2K, зберігаючи публічний API TJpeg2000Bitmap
Виправлено
- Вивід JPEG 2000 тепер автоматично вибирає коректну кількість роздільностей OpenJPEG для малих зображень, а статичний backend Win32 більше не залежить від відсутніх допоміжних експортів MSVCRT
Version 3.8.1
Виправлено
- Усунуто всі 16 косметичних попереджень лінкера W1028 "Bad global symbol definition" на Win32 і Win64. Перейменування на рівні вихідного коду прибрало зайві дублікати на боці Pascal (jpeg_std_error і заглушки алокатора jmemnobs тепер розв'язуються лише з шару obj); у трьох решти символів obj bcc32 / vc64 (jpeg_natural_order, jpeg_aritab, jpeg_nbits_table), які мають і далі лінкуватися з даними на боці Pascal, тепер прибираються їхні COFF-імена символів через етап post-processing ObjConv під час thirdparty\build-jpeg-vc64.bat. Публічний API не змінився; чистий вивід лінкера для збірок Delphi Win32 і Win64
Version 3.8.0
Безпека
- Кодек JPEG для Win64 оновлено з IJG-style libjpeg до libjpeg-turbo 3.1.90, завершивши міграцію JPEG, розпочату у v3.7.0 (Win32). Тепер шляхи Win32 і Win64 використовують один і той самий сучасний кодек JPEG з тими самими SIMD-оптимізованими внутрішніми циклами та понад 30 накопиченими виправленнями CVE / fuzz з upstream. Публічний API PDFlibPas не змінився
Version 3.7.0
Безпека
- Кодек JPEG для Win32 оновлено з IJG libjpeg-6b до libjpeg-turbo 3.1.90. Значно швидше кодування/декодування JPEG завдяки SIMD-оптимізованим внутрішнім циклам, а також понад 30 виправленням CVE / fuzz, накопиченим в upstream libjpeg-turbo. Публічний API PDFlibPas (клас TPDFJPEGImage, функції DumpJPEG) не змінився; наявні шляхи PDF/JPEG працюють швидше без потреби змінювати вихідний код
Version 3.6.0
Змінено
- Шлях Win64 zlib у цьому випуску не змінився - він і далі використовує вбудований у Delphi модуль System.ZLib
- Увімкнено Win64 link-time CRT shim PDFlibCLibs.pas (введений у v3.5.0) для шляху Win32 zlib, що надає символи memcpy / memset / malloc / free, на які посилаються нові obj-файли zlib 1.3.2
Безпека
- Win32 zlib оновлено з 1.2.x до 1.3.2. Містить стандартні понад 25 виправлень CVE / fuzz, накопичених в upstream від 1.2.8, а також нові точки входу inflateBack9 / inflateTree9, які використовуються потоками з 64-бітним вікном. Публічний API PDFlibPas (DeflateStr / InflateStr / InflateStrParms) не змінився
Version 3.5.0
Додано
- Додано інфраструктуру збірки для OpenJPEG 2.5.4. Саме дерево вихідного коду OpenJPEG користувач отримує окремо (git clone uclouvain/openjpeg у Lib/thirdparty/OpenJPEG/), щоб його можна було оновлювати без змін у конфігурації збірки PDFlibPas
- Додано Lib/PDFlibCLibs.pas, Win64 link-time CRT shim, який використовує backend Win64. Він заповнює прогалину між C obj-файлами, зібраними MSVC, і Win64-лінкерами Delphi (dcc64 / Win64x ld.lld / BCB ilink64), які не підтягують msvcrt.dll автоматично
Змінено
- Додано в репозиторій свіжу інфраструктуру збірки для вбудованих C-бібліотек зображень / стиснення: zlib 1.3.2, libjpeg-turbo 3.1.90, libtiff 4.7.1. Сценарії збірки і для Embarcadero bcc32 (Win32), і для MSVC cl.exe (Win64) лежать у Lib/thirdparty/ поруч із деревами вихідного коду, тож будь-хто з RAD Studio + VS2022 може перебудувати статичні obj-файли з чистого source
Version 3.4.0
Безпека
- Посилено генерацію ключа шифрування, AES initialization vector і блока дозволів Perms проти передбачуваних джерел випадкових чисел. Зашифровані PDF, створені на системах, запущених приблизно в той самий час, більше не можна легко зіставити між собою; документи AES-256 тепер зберігають повну силу ключа
- Посилено розбір словника зображення проти некоректних або ворожих PDF, що оголошують нереалістичні значення Width, Height, BitsPerComponent або кількості компонентів DeviceN. Значення поза діапазоном обмежуються до допустимого ще до будь-якої арифметики буфера пікселів, що запобігає збоям під час відкриття таких файлів
- Посилено проходження по cross-reference і page-tree проти документів, у яких ланцюги xref /Prev або посилання сторінок /Parent утворюють цикл або є надто глибокими. Читач тепер акуратно відхиляє некоректні структури замість рекурсії, яка доходить до переповнення стека
Version 3.3.1
Додано
- Додано вбудовані коментарі з поясненням навколо виправлень рендерингу в PDFlibRenderer.pas, які вже були присутні у початковій Git-базі. Коментарі пояснюють, чому SetPen масштабує товщину штрихів активним перетворенням canvas, і чому оператори Type 3 font CharProc d0/d1 мають споживати свої операнди. Поведінка під час виконання не змінилася
Виправлено
- Спрощено покомпонентні сценарії збірки Windows. Папки DLL/, OCX/ і Dylib/ більше не мають окремих варіантів build12-* / build13-*: тепер для кожної платформи є один сценарій build-Win32 / build-Win64, який прив'язується до найновішого RAD Studio і приймає необов'язковий аргумент "debug"
Version 3.3.0
Виправлено
- Виправлено рендеринг перетворених штрихів у PDFlibRenderer.pas. SetPen тепер застосовує поточний масштаб canvas-transform до ширини ліній PDF перед викликом Picasso, запобігаючи надто товстим або надто тонким штрихам на шляхах, чиї координати вже були перетворені. Це виправляє контури glyph Type 3, які могли рендеритися як товсті нерівні блоки
- Виправлено обробку Type 3 font CharProc d0/d1 у парсері потоку вмісту. d0 тепер споживає свої два операнди ширини, а d1 споживає свої шість операндів ширини/обмежувального прямокутника перед виконанням подальших команд малювання, запобігаючи застарілим операндам, які псують геометрію glyph або шляху