Необов'язкові обробники документів
THPDFDocumentHandlerRegistry обирає замінні обробники за проаналізованим вмістом перед слабкими підказками розширення чи MIME, після чого перетворює вибране джерело на один незмінний кеш PDF, спільний для експорту та рендерингу
Вбудовані необов'язкові обробники
- XPS та OpenXPS зберігають розміри фіксованих сторінок і візуальний порядок, перетворюють самозамикальну чи з елементами властивостей скорочену геометрію
Pathна нативні векторні шляхи PDF та суцільні пензлі з елементів властивостей, багатостопові патерни затіненняLinearGradientBrushі еліптичніRadialGradientBrush, а також заповнюють шляхи через пакетні ресурсиImageBrushз JPEG, PNG, TIFF чи JPEG XR ізTileMode=None - Заповнення зображеннями XPS підтримує абсолютне чи
RelativeToBoundingBoxвідображенняViewboxіViewport, режими плиткиNone,Tile,FlipX,FlipYіFlipXY, нативне обрізання шляху та розміщення, скінченні шестипараметрові атрибутиTransformчи елементиImageBrush.TransformMatrixTransform, непрозорість пензля й шляху, альфа PNG soft-mask, DPI зображення та кешування ресурсів пакета - Маска
Path.OpacityMaskXPS підтримує суцільні, багатостопові лінійні чи еліптичні радіальні градієнти та маски PNGImageBrush, включно з повторюваними та відбитими комірками зображень; рівномірна альфа згортається в наявні графічні стани, тоді як змінна альфа використовує обмежені нативні групи прозорості DeviceGray, які поділяють патерни затінення та потоки soft-mask зображень Opacityполотна XPS іCanvas.OpacityMaskкомпонують перекривні нащадки один раз через ізольовані Form XObjects DeviceRGB замість незалежного послаблення кожного нащадка; рівномірна альфа маски згортається в стан групи, змінна градієнтна чи PNG альфа зображення повторно використовує нативні ресурси soft-mask, а вкладені групи зберігають трансформовані обрізання, володіння ресурсами та обмежені анотації посилань у межах 4 096 груп і 16 МіБ захопленого вмісту на групуVisualBrushXPS рекурсивно перетворює вбудовані чи ресурсні переглядиCanvas,PathіGlyphs, розв'язує вкладені та віддалені областіResourceDictionary, відображає абсолютнийViewboxна абсолютний чи відноснийViewportі повторно використовує один обмежений Form XObject PDF для прямих, плиткових і відбитих розміщеньCanvas.ClipXPS приймає обмежену скорочену геометрію, локальні чи віддалені значенняPathGeometryзStaticResourceі прямі елементи властивостей зі структурованими лініями, кривими Безьє, квадратичними чи дуговими фігурами, перетвореннями геометрії, порожньою геометрією та правилами заповненняEvenOddчиNonZero; вкладені обрізання стають нативними шляхами PDFW*чиW, прямокутники навігації перетинаються з активними трансформованими межами обрізання, розбір обмежений 100 000 числових значень, а пошкоджені чи сингулярні обрізання зазнають безпечної невдачі до малювання дочірніх переглядівGlyphsXPS приймає щонайбільше 65 536 строгих відображеньIndices, зберігає прогресію кластерів один-до-багатьох і багатьох-до-одного, явні просування в сотих частках em, горизонтальні та вертикальні зміщення, зворотну прогресію непарногоBidiLevel, суцільні заповнення атрибутами чи елементами властивостей, непрозорість, витяг Unicode і діагностику пошкодженого вводу з безпечною невдачею; прості прогони використовують нативні масиви PDFTJ, а великі буфери відображень ростуть з амортизованою лінійною вартістю- Ресурси
FontUriпакета підтримують програми TrueType і OpenType, фрагменти членів TTC та GUID-обфусковані шрифти XPS; точні glyph ID, прогони, derived з cmap, кластери, просування, зміщення, початки RTL, повторне використання ресурсів шрифтів, права вбудовування, опційний субсетінг і карти витягуToUnicodeзалишаються нативними даними шрифтів PDF без підміни GDI FixedPage.NavigateUriXPS на трансформованих переглядахPathіGlyphsстає нативною анотацією посилання PDF з межами, derived з геометрії чи метрик; посилання HTTP, HTTPS та пошти залишаються URI-діями, тоді як сторінки, відносні до пакета, і процент-декодовані фрагментиLinkTargetстають прямыми чи зворотними діями GoTo після доступності кожної сторінкиFixedPage.NavigateUriполотна стає успадкованою ціллю кожного дочірнього переглядуPath,Glyphsчи вкладеного полотна, доки нащадок не подає власний URI; обсяжні цілі відновлюються після вкладених перевизначень, слідують за геометрією та перетворенням кожного перегляду, залишаються обмеженими активними обрізаннями полотна, переживають ізольоване захоплення груп непрозорості та залишаються придушеними всередині багаторазових FormsVisualBrush- Навігація обмежена 65 536 посиланнями з 8 192 символами на URI, перевіряється на скасування під час публікації, придушується під час багаторазового захоплення
VisualBrushі відхиляється для керуючих символів, небезпечних схем, відсутніх цілей чи невідповідностей шляхів і фрагментів - Нестандартний
RelativeTransform, нерозв'язані матричні ресурси, поширення градієнта Repeat чи Reflect, інтерполяція поза sRGB, малювальні пензлі зі змінною альфою, перетворення кольору, штрихи зображень, відносні viewboxVisualBrush, імітація стилю, бічні гліфи та розширені властивості штрихів залишаються явними діагностиками - EPUB розв'язує
container.xml, маніфест і порядок spine, після чого використовує обмежений імпортер пейджінованих медіа HTML5 із ресурсами пакета лише через зворотні виклики - CBZ розпізнає підтримувані записи зображень, застосовує детермінований природний порядок назв файлів та створює одну сторінку на зображення за налаштованого DPI зображення
Бюджети та ізоляція збоїв
Один перевірений скан центрального каталогу ZIP забезпечує межі записів, стиснених байтів, розгорнутих байтів, на запис, шифрування, дубльованих шляхів, небезпечних шляхів і коефіцієнта стиснення до перетворення
Класичні записи ZipCrypto PKZIP можуть запитувати облікові дані через ArchivePasswordCallback; зворотний виклик отримує назву джерела, назву запису та номер спроби з основи одиниця, тоді як MaxPasswordAttempts обмежує повторні спроби діапазоном від 1 до 16
Облікові дані та частково декодовані байти запису залишаються в пам'яті й очищуються між спробами, скасування перевіряється до та після кожного зворотного виклику, а відсутні зворотні виклики, відхилені облікові дані, вичерпані спроби чи непідтримуване шифрування зазнають безпечної невдачі
ZipCrypto — це застарілий захист паролем, а не сучасне автентифіковане шифрування, і домовленості про байти не-ASCII паролів можуть відрізнятися між виробниками ZIP
Записи, захищені паролем, потребують Delphi 12 або новішої версії, чиїй System.Zip доступний гачок розшифрування; зібрані з давнішою версією Delphi, обробники все одно читають незашифровані записи, але відхиляють зашифровані як непідтримувані до виклику ArchivePasswordCallback
Записи, чиї розміри або зсуви потребують полів ZIP64, вимагають Delphi 11 або новішої версії; давніші версії Delphi відхиляють їх як непідтримувані
Межі ресурсів, перекомпонування, сторінок, пікселів, DPI, виводу та скасування залишаються активними протягом перетворення та рендерингу, а невдала публікація виводу відновлює потоковий потік призначення із можливістю пошуку
Реєстрація та використання
var
Registry: THPDFDocumentHandlerRegistry;
Options: THPDFDocumentHandlerOptions;
Handled: IHPDFHandledDocument;
Info: THPDFDocumentHandlerInfo;
begin
Registry:= THPDFDocumentHandlerRegistry.Create;
try
Registry.RegisterStandardHandlers;
Options:= THPDFDocumentHandlerOptions.Default;
if Registry.OpenFromFile('book.epub', '', Options, Handled, Info) then
Handled.WritePDF(OutputStream, Options, Info);
finally
Registry.Free;
end;
end;