Підтримка фільтрів PDF

Огляд

Потоки PDF та вбудовані зображення визначають своє кодування за допомогою назв фільтрів. HotPDF в основному працює з наступними сімействами фільтрів при генерації документів або декодуванні зовнішнього вмісту

Загальні фільтри

  • FlateDecode: Основний фільтр стиснення для згенерованих потоків та основний шлях декомпресії на основі zlib
  • LZWDecode: Підтримується для застарілих сценаріїв та сценаріїв сумісності через модуль HPDFLZW.pas
  • DCTDecode: Використовується для стандартних даних зображень JPEG, що обробляються шляхами завантаження зображень HotPDF
  • CCITTFaxDecode: Поширений у монохромних TIFF та даних зображень у стилі факсу
  • ASCIIHexDecode / ASCII85Decode / RunLengthDecode: Допоміжні засоби кодування, доступні в модулі HPDFTypes.pas (_ASCIIHexEncode, _ASCII85Encode, _RunLengthEncode) з версії HotPDF v2.4.0. Корисно при обгортанні довільного двійкового вмісту для 7-бітних каналів або для прямої підтримки зворотного ходу PDF 1.7 7.4
  • JBIG2Decode / JPXDecode: Назви фільтрів, визначені стандартом PDF 1.7 7.4.7 / 7.4.9. Вбудовані помічники JBIG2 та JPEG 2000 у HotPDF є заглушками, які повідомляють про відсутність підтримки (повертають False), доки не буде підключено реальний бекенд OpenJPEG / JBIG2. Раніші збірки повертали фейковий успіх розміром 100x100, що призводило до нечитабельних зображень; тепер це виправлено

Практичні примітки

  • Не кожен фільтр доступний через один загальний API; доступ до деяких здійснюється через спеціальні допоміжні модулі зображень або потоків
  • Для згенерованого вмісту PDF властивість THotPDF.Compression залишається головним параметром для користувача
  • При завантаженні зовнішніх даних застосовний фільтр залежить від формату вихідного файлу та класу помічника, який використовується
  • Зашифровані PDF-файли поєднують ці фільтри з обробником безпеки; див. CryptKeyLength щодо підтримуваних параметрів AES-128 (V=4 R=4 / CFM=AESV2) та RC4 (V=1/V=2)
  • Інтерактивні поля форм виводяться як анотації віджетів, які малює переглядач; див. Підтримка AcroForm
  • Анотації розмітки тексту (Highlight, Underline, Squiggly, StrikeOut) та посилання для переходу всередині документа (GoTo, GoToR, Launch) доступні як нові методи THPDFPage.Add*Annotation / AddGoToLink / AddGoToRLink / AddLaunchLink з версії HotPDF v2.6.0
  • Вивід DeviceCMYK доступний через THPDFPage.SetCMYKColor / SetCMYKFillColor / SetCMYKStrokeColor; колірні простори під керуванням ICC реєструються за допомогою THotPDF.RegisterICCProfile та застосовуються через SetFillColorSpace / SetStrokeColorSpace + SetFillColor / SetStrokeColor з версії HotPDF v2.7.0
  • Встановіть THotPDF.UseXRefStream у значення true перед збереженням, щоб вивести один стиснений за допомогою FlateDecode потік перехресних посилань /Type /XRef замість текстової послідовності xref / trailer / startxref (PDF 1.7 7.5.8); доступно з версії HotPDF v2.8.0
  • Встановіть THotPDF.EnableXMPMetadata у значення true, щоб прикріпити потік метаданих XMP /Type /Metadata /Subtype /XML до каталогу (PDF 1.7 14.3.2); будується автоматично з полів словника Info або надайте вручну створений пакет через CustomXMP. Доступно з версії HotPDF v2.9.0
  • Фільтрація версій PDF для кожного методу (з версії HotPDF v2.24.0). Кожен метод функції, представлений у v2.4.0+, звертається до RequirePDFVersion перед виведенням; при StrictVersionLock=false (за замовчуванням) версія документа Version автоматично та непомітно підвищується до мінімуму, якого вимагає функція, а при StrictVersionLock=true виклик відхиляється, щоб збережений файл суворо відповідав обраній специфікації 1.3 / 1.4 / 1.5 / 1.6 / 1.7
  • Кодери-предиктори PNG та TIFF для стиснених за допомогою FlateDecode даних зображень (PDF 1.7 7.4.4.4): _PNGPredictorEncode застосовує евристику фільтра мінімальної абсолютної різниці libpng (Predictor=15), а _TIFFPredictor2Encode застосовує горизонтальну різницю (Predictor=2). Доступно з версії HotPDF v2.10.0
  • Точки входу тегованого PDF (PDF 1.7 14.7-14.8): THotPDF.Lang заповнює /Lang у каталозі, EnableTaggedPDF виводить /MarkInfo <> та заглушку /StructTreeRoot, а нові методи THPDFPage.BeginMarkedContent / BeginMarkedContentMCID / EndMarkedContent записують оператори потоку вмісту BMC / BDC / EMC. Доступно з версії HotPDF v2.11.0
  • Осьові та радіальні градієнти (PDF 1.7 7.10 / 8.7): THotPDF.RegisterAxialGradient / RegisterRadialGradient будують повний стек Function Type 2 / Shading Type 2-3 / Pattern Type 2 та повертають стабільне ім'я шаблону; THPDFPage.SetFillPattern / SetStrokePattern встановлюють його на сторінку. Кількість компонентів початкового / кінцевого кольору вибирає DeviceGray (1) / DeviceRGB (3) / DeviceCMYK (4). Доступно з версії v2.13.0; багатоточковий осьовий градієнт через Function Type 3 доступний через метод RegisterMultiStopAxialGradient з версії v2.18.0
  • Вбудовані зображення (PDF 1.7 8.9.7) через THPDFPage.DrawInlineImage; необроблені байти автоматично обгортаються ASCIIHex, коли фільтр не надано, тому потік вмісту залишається 7-бітним. Доступно з версії HotPDF v2.18.0
  • Наміри виводу OutputIntents (PDF 1.7 14.11) через THotPDF.AddOutputIntent; кожен виклик додає словник /Type /OutputIntent до каталогу з необов'язковим /DestOutputProfile, що посилається на зареєстрований профіль ICC. Доступно з версії HotPDF v2.18.0
  • Автоматична генерація потоку оформлення AcroForm (PDF 1.7 12.5.5 / 12.7.3.3 / 8.10): встановіть THotPDF.AutoFormAppearances у значення true перед додаванням інтерактивних полів форм, і HotPDF попередньо побудує об'єкт Form XObject /Subtype /Form для кожного запису віджета /AP /N (підсловники Yes / Off для кнопок), заповнить ресурси за замовчуванням AcroForm /DR словниками непрямих шрифтів Helvetica / ZapfDingbats та перемкне /NeedAppearances у false, щоб рендерери враховували вбудовані потоки. Доступно з версії HotPDF v2.28.0
  • Налаштування ViewerPreferences /ViewArea та /ViewClip (PDF 1.4 12.2 Таблиця 152) тепер доступні через властивості THotPDF.ViewArea / THotPDF.ViewClip (з відповідними членами множини vpViewArea / vpViewClip). Обидва приймають значення THPDFPageBoundary (MediaBox / CropBox / BleedBox / TrimBox / ArtBox) та завершують охоплення HotPDF чотирьох меж сторінок PDF 1.4 ViewerPreferences. Доступно з версії HotPDF v2.29.0
  • Переходи сторінок (PDF 1.1 / 1.5 12.4.4): метод THPDFPage.SetPageTransition записує словник /Trans на сторінці, щоб переглядачі PDF в режимі /PageMode /FullScreen анімували навігацію. Стилі PDF 1.1 (Split, Blinds, Box, Wipe, Dissolve, Glitter, R) та стилі PDF 1.5 (Fly, Push, Cover, Uncover, Fade) доступні через перелічення THPDFTransitionStyle; також доступні супутні підпараметри /Dm, /M та /Di. THPDFPage.SetPageDuration записує затримку автоматичного переходу /Dur у секундах. Доступно з версії HotPDF v2.30.0
  • Група прозорості на рівні сторінки (PDF 1.4 11.6.6 / 7.5.5): метод THPDFPage.SetTransparencyGroup прикріплює словник /Group (/Type /Group /S /Transparency), щоб рендерери передбачувано компонували вміст з альфа-каналом. Виберіть колірний простір пристрою через перелічення THPDFGroupColorSpace (DeviceGray / DeviceRGB / DeviceCMYK або пропустіть) або викличте THPDFPage.SetTransparencyGroupICC з ім'ям профілю ICC, раніше зареєстрованого через THotPDF.RegisterICCProfile. Необов'язкові прапорці /I (Isolated) та /K (Knockout) керують компонувальником; THPDFPage.ClearTransparencyGroup видаляє раніше доданий запис. Доступно з версії HotPDF v2.32.0
  • Інкрементне оновлення (PDF 1.7 ISO 32000-1 7.5.6): метод THotPDF.BeginIncrementalUpdate(SourceFile) завантажує існуючий PDF у режимі лише додавання; наступні виклики CreateIndirect* автоматично позначають нові об'єкти як змінені, а THotPDF.MarkDirty(Obj) позначає існуючі завантажені об'єкти для повторного виведення. Метод THotPDF.SaveIncrementalUpdate(TargetFile) записує вихідні байти джерела дослівно, додає лише змінені об'єкти зі збереженням їхніх номерів об'єктів, виводить новий підрозділ xref та завершує роботу трейлером, що містить /Prev з посиланням на попередній xref. Поєднайте це з існуючим конвеєром AddSignedSignatureField + PreparePDFForSigning + InsertSignatureHex, щоб додавати наступні поля підписів до вже підписаного документа без анулювання попередніх підписів (їхні хеші /ByteRange залишаються дійсними, оскільки вихідні байти не змінюються). Доступно з версії HotPDF v2.35.0
  • Нормалізація імен вбудованих шрифтів TrueType: HotPDF зчитує вбудовану таблицю імен TrueType та узгоджує /BaseFont, /FontDescriptor /FontName, /FontFamily та імена дочірніх шрифтів CID з іменем PostScript програми шрифту. Це запобігає збоям Adobe Acrobat Font Capture, спричиненим невідповідністю між словником шрифту PDF та вбудованими даними TTF. Доступно з версії HotPDF v2.35.1
  • Виділення підмножини шрифтів TrueType (PDF 1.7 ISO 32000-1 9.6.4 / 9.8.2): встановіть THotPDF.EnableFontSubsetting у значення true перед викликом BeginDoc, і HotPDF перебудує вбудовані дані TrueType, щоб вони містили лише ті гліфи, які фактично використовуються в документі. Для типових латинських документів обсяг вбудованого шрифту зменшується приблизно на 90% (1 МБ Arial -> ~70 КБ для одного рядка "Hello, world."). Залежності композитних гліфів відстежуються рекурсивно, нумерація GID зберігається (тому існуючі потоки вмісту Type0 / Identity-H продовжують працювати), а новий /BaseFont автоматично отримує обов'язковий шестилітерний префікс із суфіксом "+" (наприклад, /BaseFont /AAAAAA+ArialMT). Вимкнено за замоввуванням; увімкніть, щоб зберегти вбудовування повного шрифту для процесів редагування. Доступно з версії HotPDF v2.36.0
  • Засіб виділення підмножин CFF (Compact Font Format) (PDF 1.7 ISO 32000-1 9.7.4 / 9.9): аналог засобу для TrueType для шрифтів OpenType-CFF (.otf, sfntVersion OTTO) та Type 1 / Type 1C. Функція HPDFSubsetCFF(CFFBytes, KeepGlyph) перебудовує INDEX CharStrings із заміною невикористаних гліфів на мінімальну 1-байтову заглушку endchar, зберігаючи нумерацію GID байт-в-байт. Доступно з версії HotPDF v2.37.0
  • Шлях вбудовування OpenType-CFF (.otf), інтегрований у StoreFont (PDF 1.6+ 9.7.4 Таблиця 117). Якщо завантажений через GDI бінарний файл шрифту є контейнером sfnt OTTO, HotPDF виділяє підмножину вбудованої таблиці 'CFF ' через HPDFSubsetOTFContainer, виводить програму шрифту через /FontFile3 /Subtype /OpenType та записує словник похідного шрифту з /Subtype /CIDFontType0 замість /CIDFontType2. Шрифти TrueType продовжують використовувати існуючий шлях /FontFile2 + /CIDFontType2 без змін у поведінці. Доступно з версії HotPDF v2.38.0
  • Наскрізне виділення підмножин підпрограм CFF (PDF 1.7 9.7.4 §6 / Adobe Tech Note #5177 §3.1): засіб виділення підмножин CFF тепер видаляє невикористовувані записи ЯК з Global Subr INDEX (розташованого відразу після String INDEX у бінарному файлі CFF), ТАК і з Local Subr INDEX (вкладеного під Private DICT, доступ до якого здійснюється через оператор Top DICT 18 + оператор Private DICT 19). Єдине замикання з фіксованою точкою транзитивно слідує за ланцюжками callsubr (команда 0x0A) ТА callgsubr (команда 0x1D), тому CharString, що викликає Local Subr, яка викликає Global Subr, що викликає іншу Local Subr, обробляється за одну ітерацію. Кожен невикористаний запис замінюється на 1-байтову заглушку return, а INDEX перезаписується на місці з нульовим заповненням кінцевого залишку. Ця поведінка відкрита через публічні допоміжні функції HPDFSubsetCFF та HPDFSubsetOTFContainer; сканери CFF нижчого рівня залишаються внутрішніми. Доступно з версії HotPDF v2.39.0
  • Виділення підмножин CFF з ключами CID (PDF 1.7 ISO 32000-1 9.7.4 / Adobe Tech Note #5176 §18-19): засіб виділення підмножин CFF тепер розпізнає оператор Top DICT ROS (12-30), який позначає шрифт OpenType-CFF з ключами CID, та обходить INDEX словників Font DICT FDArray (12-36), кожен з яких містить власний Private DICT + Local Subr INDEX. Карта відповідності гліфів до FD FDSelect (12-37) зберігається байт-в-байт. Сканування замикання підпрограм відстежує контекст FD кожної збереженої CharString, тому гліф у FD #5 позначає Local Subrs лише у FD #5 - глобальні підпрограми залишаються спільними для всіх FD. Local Subr INDEX кожного FD перезаписується на місці згортанням невикористаних записів у 1-байтові заглушки return. Шрифти OTF CJK / індійських / арабської мов (Adobe Fan/Gothic/Heiti/Ming/Myungjo/Song Std, Kozuka Pr6N, Source Han Sans тощо) тепер проходять через повний конвеєр виділення підмножин замість вбудовування як є. Доступно з версії HotPDF v2.40.0
  • Потоки об'єктів (PDF 1.5 ISO 32000-1 7.5.7): встановлення властивості THotPDF.UseObjectStreams у значення true на додачу до UseXRefStream та SaveToStream пакує відповідні непрямі об'єкти (все, крім потоків, словника шифрування та словників Catalog і Info) в один або більше контейнерних потоків /Type /ObjStm. Потік перехресних посилань потім посилається на упаковані об'єкти через записи типу 2 (поле 2 = номер об'єкта host ObjStm; поле 3 = індекс запису всередині потоку). Це суттєво зменшує розмір файлів PDF з великою кількістю малих словників (багатосторінкові документи, анотації, віджети AcroForm, елементи дерева структури, шари Optional Content) - 30-сторінковий документ лише з графікою зменшується з 14502 до 8488 байт (на 41.5%). Автоматично вимикається до false, коли UseXRefStream вимкнено (записи типу 2 не можуть бути представлені в текстовій таблиці xref відповідно до специфікації) або коли версія Version є нижчою за PDF 1.5. Доступно з версії HotPDF v2.41.0
  • Зображення з м'якою маскою / SMask (PDF 1.4 ISO 32000-1 8.9.5.4): метод THotPDF.AddImageWithSMask(Width, Height, RGB, Alpha) виводить кольорове зображення XObject плюс 8-бітне зображення м'якої маски DeviceGray XObject та автоматично зв'язує перехресне посилання /SMask, щоб кожен піксель міг мати повну прозорість для кожного каналу замість двійкового обмеження увімкнено/вимкнено застарілого шляху /ImageMask. Спеціальне перевантаження THotPDF.AddImageWithSMask32(Bitmap32) витягує канали RGB та альфа з 32-бітного BGRA TBitmap для вбудовування PNG з альфа-каналом за один виклик. Обидва виклики проходять перевірку RequirePDFVersion(pdf14), тому вивід у суворому режимі 1.3 залишається сумісним. Доступно з версії HotPDF v2.42.0
  • Малювання некольорових мозаїчних шаблонів (PDF 1.7 ISO 32000-1 8.6.6.1): метод THotPDF.RegisterTilingPattern виводить як /PaintType 1 (кольоровий), так і /PaintType 2 (некольоровий) з версії v2.19.0, але відповідна послідовність операторів на стороні сторінки була правильною лише для кольорового варіанту. Шість нових методів THPDFPage - SetFillPatternRGB / SetStrokePatternRGB / SetFillPatternGray / SetStrokePatternGray / SetFillPatternCMYK / SetStrokePatternCMYK - тепер керують некольоровим шляхом, автоматично реєструючи відповідний колірний простір тонування [/Pattern /BaseCS] у словнику сторінки Resources/ColorSpace та виводячи визначену специфікацією послідовність tint_components /Pn scn. Використовуйте початкові SetFillPattern / SetStrokePattern для кольорового варіанту, коли плитка несе власний колір. Доступно з версії HotPDF v2.43.0
  • Колірний простір CIELab (PDF 1.3+ ISO 32000-1 8.6.5.3): метод THotPDF.RegisterLabColorSpace(Xw, Yw, Zw, aMin, aMax, bMin, bMax) створює вбудований масив колірного простору [/Lab << /WhitePoint /BlackPoint /Range >>], зберігає його під автоматично згенерованим ім'ям (Lab1, Lab2, ...) та повертає це ім'я для використання зі звичайним конвеєром THPDFPage.SetFillColorSpace / SetStrokeColorSpace + SetFillColor([L, a, b]) / SetStrokeColor([L, a, b]). Передайте джерело світла D50 [0.9505, 1.0, 1.089] для друку за стандартом ICC або джерело світла D65 [0.95047, 1.0, 1.08883] для дисплеїв з sRGB, а потім малюйте з L* у діапазоні [0..100] та a*, b* у вибраному діапазоні (зазвичай [-128..127]). Доступно з версії HotPDF v2.44.0
  • Колірний простір Separation для плашкових кольорів (PDF 1.3+ ISO 32000-1 8.6.6.4): метод THotPDF.RegisterSeparation(ColorantName, AlternateCS, TintC1) оголошує однокомпонентне плашкове чорнило, чий єдиний операнд відтінку в [0..1] керує лінійним перетворенням відтінку Function Type 2, створеним внутрішньо. Використовуйте повернуте ім'я (Sep1, Sep2, ...) зі звичайним конвеєром SetFillColorSpace / SetStrokeColorSpace + SetFillColor([tint]) / SetStrokeColor([tint]). Параметр AlternateCS приймає значення DeviceGray, DeviceRGB або DeviceCMYK; TintC1 надає компоненти альтернативного колірного простору при відтінку = 1.0. Назви кольорів Pantone та інші назви чорнил з пробілами приймаються безпосередньо - HotPDF замінює пробіли на #20 відповідно до PDF 1.7 7.3.5 при записі імені колірного простору. Доступно з версії HotPDF v2.45.0
  • Потоки оформлення багаторядкового тексту та тексту "гребінки" AcroForm (PDF 1.7 ISO 32000-1 12.7.4.3): коли увімкнено THotPDF.AutoFormAppearances, текстові поля, чиї прапорці Flags містять ffMultiline, отримують об'єкт Form XObject /AP /N з перенесенням слів (компонування Td + T* + /TL, що враховує роздільники CR / LF / CRLF та обрізає текст на видимій кількості рядків). Поля, чиї прапорці Flags містять ffComb разом із позитивним MaxLen, відображають кожен символ у власній комірці однаквої ширини за допомогою абсолютної матриці Tm на гліф. Однорядкове компонування з версії v2.28.0 зберігається байт-в-байт для полів без таких прапорців. Міжнародні символи в початковому значенні все одно потрапляють на шлях перерахунку /NeedAppearances переглядача - повна генерація оформлення з вбудованими шрифтами CID залишається завданням на майбутнє. Доступно з версії HotPDF v2.46.0
  • Шрифт Unicode AcroForm /AP (PDF 1.7 ISO 32000-1 12.7.2 + 12.7.4.3): метод THotPDF.SetFormUnicodeFontDict(LogicalName, FontDict) реєструє наданий викликаючою програмою композитний шрифт Type 0 / CIDFontType2 + Identity-H у словнику стандартних ресурсів AcroForm /DR/Font. Після реєстрації рівень AcroForm /DA, /DA кожного віджета Tx та потік /AP /N, створений AutoFormAppearances для не-ASCII початкових значень Tx, переходять на логічне ім'я; підсловник /Resources/Font об'єкта Form XObject також посилається на той самий непрямий шрифт, тому AP є самодостатнім і не залежить від роздільної здатності /DR під час рендерингу. Супутній помічник THotPDF.CreateIndirectFontDict повертає новий порожній об'єкт THPDFDictionaryObject, зареєстрований як непрямий об'єкт PDF, щоб розробники могли створювати власні словники шрифтів (або будь-який інший словник, що вимагає непрямої серіалізації "N G R") без доступу до внутрішніх помічників. Передайте порожній LogicalName та nil FontDict, щоб повернутися до поведінки /Helv лише з ASCII версії v2.46.0. Поля ASCII Tx продовжують використовувати /Helv з байт-ідентичним виводом до версій v2.46.0 / v2.55.0. Багаторядкові та "гребінчасті" не-ASCII /AP та bidi-формування RTL (UAX #9 + контекстне з'єднання арабської) залишаються завданням на майбутнє. Доступно з версії HotPDF v2.56.0; підтримка не-ASCII /AP ffMultiline (покомандний UTF-16BE hex Tj з Td / T* / /TL переносом та переносом слів з урахуванням CJK) з версії v2.57.0; підтримка не-ASCII /AP ffComb (однакові за шириною абсолютні осередки Tm для кожного CID + окрема комірка Tj для кожної кодової точки з обробкою сурогатних пар UTF-16) з версії v2.58.0; властивість THotPDF.FormUnicodeRTL для напрямку справа наліво (реверсує порядок UTF-16 у шістнадцятковому виразі /AP Tj, зберігаючи /V у логічному порядку; викликаюча програма заздалегідь формує арабську мову в презентаційні форми Unicode U+FB50..U+FDFF + U+FE70..U+FEFF; повне bidi-формування UAX #9 та автоматичне формування GSUB очікуються в майбутньому) з версії v2.59.0
  • Багатий текстовий віджет AcroForm Tx (PDF 1.5+ ISO 32000-1 12.7.4.3 + Додаток L): метод THPDFPage.AddRichTextField(FieldName, InitialValue, RichValue, DefaultStyle, Rectangle, [MaxLen], [Flags]) виводить віджет тексту з /RV (тіло XHTML з форматованим текстом), /DS (стиль за замовчуванням у стилі CSS), автоматично об'єднаним за допомогою OR прапорцем біта 26 ffRichText /Ff, а також резервним простим текстом /V + /DV, що використовується переглядачами, які не розбирають /RV. Acrobat та Foxit відтворюють вміст безпосередньо з /RV, коли ввімкнено біт RichText, підбираючи альтернативні шрифти з встановлених у користувача шрифтів Unicode - тому багатобайтний вміст (CJK / кирилиця / арабська / латиниця з діакритикою) відображається правильно без необхідності вбудовування CID-шрифту в ресурси /DR з боку HotPDF. Як /V, так і /RV автоматично визначають багатобайтний вивід та перемикаються на кодування UTF-16BE hex-string (FE FF BOM + big-endian одиниці коду) за потреби. Генерація потоків оформлення шрифтів CID для власного шляху /AP HotPDF залишається завданням на майбутнє; переглядачам з підтримкою форматованого тексту це не потрібно. Доступно з версії HotPDF v2.55.0
  • Колірний простір DeviceN для робочих процесів з багатоколірними плашковими чорнилами (PDF 1.3+ ISO 32000-1 8.6.6.5): метод THotPDF.RegisterDeviceN(ColorantNames, AlternateCS, TintC1Matrix) узагальнює RegisterSeparation з одного плашкового чорнила до N. Перетворення відтінку - це функція калькулятора PostScript Type 4, яка виводить лінійне зважене змішування по наданій матриці N x M (рядок n стовпець m - це внесок кольору n в канал m AlternateCS, коли колір n дорівнює 1.0). Повертає назву колірного простору (DevN1, DevN2, ...), яка керує звичайним конвеєром SetFillColorSpace + SetFillColor([t0, t1, ..., t_{N-1}]). AlternateCS приймає значення DeviceGray, DeviceRGB або DeviceCMYK; назви чорнил з пробілами екрануються у #20 відповідно до PDF 1.7 7.3.5; спеціальне ім'я None позначає невикористаний слот кольору. Доступно з версії HotPDF v2.47.0
  • Вільна сітка трикутників із затіненням Гуро (PDF 1.3+ ISO 32000-1 8.7.4.5.4): метод THotPDF.RegisterFreeFormGouraudShading(XMin, YMin, XMax, YMax, NumComponents, Vertices) оголошує потік /ShadingType 4 з /BitsPerCoordinate 16 + /BitsPerComponent 8 + /BitsPerFlag 8, обгортає його у вбудований запис Pattern Type 2 у словнику сторінки Resources/Pattern та повертає автоматично згенероване ім'я шаблону (Sh1, Sh2, ...) для звичайного конвеєра SetFillPattern / SetStrokePattern. Кожна вершина пакується як 1 байт прапорця (завжди 0 для незалежних трикутників) + 2 байти X big-endian + 2 байти Y big-endian + NumComponents 8-бітних колірних компонентів. Аргумент NumComponents приймає значення 1 (DeviceGray), 3 (DeviceRGB) або 4 (DeviceCMYK); кожна вершина додає 2 + NumComponents значень типу Extended до Vertices у порядку (X, Y, c1...cN); кількість вершин має бути кратною 3. Параметр /Decode відображає 16-бітні координати назад у [XMin, XMax] x [YMin, YMax], а колірні компоненти - в діапазон [0, 1]. Затінення сітки типу 5 (гратка), типу 6 (патч Кунса) та типу 7 (тензорний добуток) залишаються завданням на майбутнє. Доступно з версії HotPDF v2.48.0
  • Граткова сітка трикутників із затіненням Гуро (PDF 1.3+ ISO 32000-1 8.7.4.5.5): метод THotPDF.RegisterLatticeFormGouraudShading(XMin, YMin, XMax, YMax, NumComponents, VerticesPerRow, Vertices) оголошує потік /ShadingType 5, який упорядковує вершини в гратку з M рядків та N стовпців і дозволяє рендереру автоматично тріангулювати кожну пару сусідніх рядків у стрічку трикутників. На відміну від RegisterFreeFormGouraudShading (тип 4), тут немає байта прапорця для кожної вершини; /BitsPerFlag відсутній у словнику затінення, і кожна вершина займає лише 4 + NumComponents байт (2 big-endian X + 2 big-endian Y + N компонентів кольору). Словник затінення замість цього містить обов'язковий запис /VerticesPerRow N. Використовуйте його для вихідних даних, які вже знаходяться на регулярній сітці вибірки (рельєф, результати FEA, наукові теплові карти) - додаток надає вершини по рядках, а конвеєр рендерингу автоматично збирає топологію стрічки трикутників. VerticesPerRow має бути не менше 2, а загальна кількість вершин повинна бути кратною VerticesPerRow щонайменше з двома рядками. Доступно з версії HotPDF v2.49.0
  • Затінення сітки патчами Кунса (PDF 1.3+ ISO 32000-1 8.7.4.5.6): метод THotPDF.RegisterCoonsPatchMesh(XMin, YMin, XMax, YMax, NumComponents, Patches) оголошує потік /ShadingType 6 патчів Кунса, кожен з яких обмежений чотирма кубічними кривими Безьє і містить один колір на кут. Рендерер вписує поверхню Кунса між чотирма ребрами, даючи довільно викривлений кольоровий чотирикутник - корисно для фольгових та металевих градієнтів на вигнутих шляхах, градієнтних сіток SVG та будь-яких чотирикутників із викривленими ребрами, які в іншому випадку потребували б багатьох дрібних трикутників для наближення. Кожен патч вносить 12 контрольних точок (24 значення X+Y типу Extended, упорядковані за годинниковою стрілкою по межі c1..c12 з c1 / c4 / c7 / c10 на чотирьох кутах та рештою 8 як внутрішніми маркерами Безьє), за якими слідують 4 кутові кольори (4 * NumComponents значень Extended), тому крок Patches становить 24 + 4 * NumComponents. Словник затінення містить ті самі параметри /BitsPerCoordinate 16 + /BitsPerComponent 8 + /BitsPerFlag 8, що й тип 4 (і на відміну від типу 5, /VerticesPerRow відсутній). Кожен виведений патч має прапорець flag = 0 (незалежний патч); прапорці продовження 1 / 2 / 3 (спільне використання ребер) не представлені в цьому зручному перевантаженні. Доступно з версії HotPDF v2.50.0
  • Колірний простір Separation з вибірковим перетворенням відтінку LUT (PDF 1.3+ ISO 32000-1 8.6.6.4 + 7.10.2): метод THotPDF.RegisterSeparationLUT(ColorantName, AlternateCS, Samples) обгортає RegisterSampledFunction, щоб викликаючі програми могли виразити повну нелінійну криву відтінок -> alt-CS у вигляді плоского потоку байтів 8-бітних (M-компонентних) відліків без ручного створення словника Function Type 0. Використовуйте варіант LUT, коли колірний перехід є нелінійним - градієнти відтінків у стилі PANTONE Hexachrome, гамма-коректовані криві щільності, намальовані вручну криві тону, що відповідають друкованим характеристикам, LUT-таблиці перетворення sRGB у плашковий колір без повного механізму профілів ICC; точка входу RegisterSeparation версії v2.45.0 все ще покриває випадок лінійного кінцевого пункту. AlternateCS приймає значення DeviceGray, DeviceRGB або DeviceCMYK; довжина Samples має бути кратною M щонайменше з 2 * M байтами для наявності діапазону інтерполяції, а кількість точок сітки S визначається з Length(Samples) / M. Лінійна інтерполяція є типовою відповідно до PDF 1.7 /Order 1. Повертає зареєстроване ім'я колірного простору (Sep1, Sep2, ...) для використання з регулярним конвеєром SetFillColorSpace + SetFillColor([tint]). Доступно з версії HotPDF v2.53.0
  • Реєстрація Function Type 0 (Sampled) (PDF 1.3+ ISO 32000-1 7.10.2): метод THotPDF.RegisterSampledFunction(Domain, Range, Size, BitsPerSample, Samples, [Order]) оголошує непрямий потік /FunctionType 0, який виражає довільне відображення входу на вихід у вигляді регулярної N-вимірної сітки M-вимірних вихідних відліків, що інтерполюються між точками сітки. Використовуйте його, коли механізм ICC профілів є надмірним, но потрібна ручна таблиця кольорів LUT - тональні криві для /TransferFunction (ExtGState /TR), вибіркові перетворення відтінків для /Separation / /DeviceN поза лінійними Type 2 / арифметичними Type 4 шляхами, порогові криві півтонів або будь-яка інша структура PDF, що приймає словник Function. Domain складається з 2N записів (одна пара [min, max] на кожну вхідну розмірність); Range складається з 2M записів (одна пара на вихідну розмірність); Size складається з N значень кількості точок сітки; BitsPerSample приймає значення 1, 2, 4, 8, 12, 16, 24 або 32 відповідно до PDF 1.7 Таблиці 38; Samples - це необроблений упакований потік відліків (MSB-first для кожного відліку, без відступів між відліками поза кінцевим нульовим заповненням байта, з входом 0, що змінюється найшвидше відповідно до правил порядку відліків специфікації); Order за замовчуванням дорівнює 1 (лінійна) і приймає 3 (інтерполяція кубічними сплайнами, з версії v2.54.0) відповідно до PDF 1.7 Таблиці 38. HotPDF перевіряє кількість байт відліків відповідно до ceil(GridPoints * M * BitsPerSample / 8). Повертає непрямий THPDFStreamObject, тому розробники можуть додавати його всюди, де очікується словник Function. Доступно з версії HotPDF v2.52.0; кубічний /Order 3 + наскрізне покриття з кількома входами / кількома виходами з версії v2.54.0
  • Затінення сітки тензорними патчами (PDF 1.3+ ISO 32000-1 8.7.4.5.7): метод THotPDF.RegisterTensorProductPatchMesh(XMin, YMin, XMax, YMax, NumComponents, Patches) оголошує потік /ShadingType 7 тензорних патчів, кожен з яких визначений повною сіткою 4 x 4 кубічних контрольних точок Безьє p[i][j] плюс один колір на кут. Розширює RegisterCoonsPatchMesh (тип 6), додаючи 4 явні внутрішні контрольні точки (p[1][1], p[1][2], p[2][2], p[2][1]) поверх 12 граничних точок, даючи точніший контроль внутрішньої частини патча, ніж може виразити згладжений за Кунсом метод. Корисно для зворотних переходів сітчастих градієнтів SVG та будь-яких художніх робіт, які потребують тензорної поверхні Безьє. Кожен патч вносить 16 контрольних точок (32 значення X+Y типу Extended, упорядковані згідно з Таблицею 88 специфікації: p[0][0..3], p[1][3], p[2][3], p[3][3], p[3][2..0], p[2][0], p[1][0], а потім 4 внутрішні точки p[1][1], p[1][2], p[2][2], p[2][1]), за якими слідують 4 кутові кольори (4 * NumComponents значень Extended при p[0][0] / p[0][3] / p[3][3] / p[3][0]), тому крок Patches становить 32 + 4 * NumComponents. Кожен виведений патч має прапорець flag = 0 (незалежний патч). З цим випуском охоплено все сімейство затінення сіток ISO 32000-1 8.7.4.5 (типи 4 / 5 / 6 / 7). Доступно з версії HotPDF v2.51.0
  • Стиль рамки анотацій та зв'язок з спливаючими вікнами (PDF 1.7 12.5.4 / 12.5.6.14): метод THPDFPage.SetAnnotationBorderStyle(Annot, Width, Style, DashPattern) прикріплює словник /BS з вибраним стилем THPDFAnnotBorderStyle (absSolid / absDashed / absBeveled / absInset / absUnderline). Метод THPDFPage.AddPopupAnnotationFor(ParentAnnot, Rect, Open) виводить анотацію /Popup, яка зв'язана в обох напрямках (parent /Popup -> popup, popup /Parent -> parent), щоб переглядач міг відображати спливаючу виноску. Нова властивість THPDFPage.LastAnnotation наповнює обидва методи без зміни сигнатури існуючих процедур Add*Annotation. Доступно з версії HotPDF v2.34.0
  • Обробник безпеки з відкритим ключем (PDF 1.7 7.6.5): методи THotPDF.EnablePubKeyEncryption(seed, KeyType, EncryptMetadata) + THotPDF.AddPubKeyRecipient(envelope) виводять словник шифрування /Filter /Adobe.PubSec (/SubFilter /adbe.pkcs7.s4 для V=1 RC4-40 / /adbe.pkcs7.s5 для V=2 RC4-128 / V=4 AESV2). Викликаюча програма надає 20-байтне випадкове число і один двійковий об'єкт PKCS#7 envelopedData на кожного отримувача (створений зовні за допомогою Windows CryptoAPI, OpenSSL або pycryptodome). HotPDF обчислює ключ шифрування файлу за допомогою алгоритму 9 (SHA-1 від seed, об'єднаного з кожним конвертом) та повторно використовує стандартне отримання ключів для кожного об'єкта для потоків AES-128 / RC4. Доступно з версії HotPDF v2.33.0

See Also