PDFium Delphi Component — это всеобъемлющая библиотека компонентов профессионального уровня, которая привносит мощные возможности обработки и просмотра PDF в приложения Delphi и C++Builder. Она использует движок рендеринга PDFium для отрисовки страниц и чтения документов и реализует на Object Pascal всё, чего этот движок не предоставляет
Это различие важно при оценке библиотеки. PDFium отрисовывает страницы, извлекает текст и читает существующие структуры. Он не может подписать документ, записать шифрование, проверить соответствие стандарту PDF или выпустить линеаризованную или инкрементальную редакцию. PDFium Delphi Component поставляется примерно с 115 000 строк Object Pascal в 55 модулях, и более 62 000 из этих строк находятся в 36 модулях, которые вообще не имеют аналога в API PDFium — криптография, подписи, шифрование, соответствие стандартам, сериализация PDF, обмен данными форм, компоновка и шейпинг текста. Всё это поставляется в виде исходного кода
Библиотека состоит из трёх зарегистрированных компонентов: TPdf для обработки и манипулирования документами с 475 публичными членами, TPdfView для интерактивного визуального представления со 152 публичными членами и TPdfThumbnailView для навигации по страницам. Независимо от того, нужно ли вам построить простой просмотрщик PDF, рабочий процесс подписанных документов, конвейер архивного преобразования или полноценную систему управления документами, PDFium Delphi Component предоставляет необходимые инструменты и гибкость
Перечисленные ниже возможности не имеют аналога в C API PDFium. Каждая из них реализована в PDFium Delphi Component на Object Pascal, проверена по опубликованным пунктам ISO, ETSI, IETF или FIPS и доступна в виде исходного кода
Полное подписание, а не чтение подписей. PDFium может лишь сообщить, что словарь подписи существует; PDFium Delphi Component его создаёт
SignPades, SignPadesToStream и SignPadesBytes/Certs, /OCSPs и /CRLs, словари VRI на каждую подпись и маркер /Extensions /ESIC/SubFilter /ETSI.RFC3161, охватывающие весь файл, для B-LTAICmsSigner, который может реализовать любой другой механизмPreparePadesRemoteSignature и CompletePadesRemoteSignature разделяют операцию, чтобы закрытый ключ оставался внутри удалённого сервиса или аппаратного модуляValidatePades сообщает самый высокий базовый уровень документа плюс коды проблем уровня пунктов; ValidatePadesTrust и ValidatePadesTrustAsync добавляют проверку доверия цепочки сертификатовSignPadesWithPdfA преобразует в PDF/A-4 и подписывает за один вызов согласно EN 319 142-1 Annex A.7PDFium открывает зашифрованные файлы, но не записывает шифрование. PDFium Delphi Component реализует сторону записи согласно ISO 32000-2 и его техническим спецификациям
SaveAsEncrypted с деривацией ключей V=5 / R=5 / R=6, включая итеративное хеширование алгоритма 2.B, и записи словаря /O /U /OE /UE /Perms/Length и перестроенной таблицей перекрёстных ссылок/AuthCode ISO/TS 32004 — CMS AuthenticatedData с деривацией ключей HKDF, обёртыванием ключей и проверкой HMACШесть семейств стандартов ISO, каждое с валидатором, возвращающим коды результатов уровня пунктов, и соответствующим путём сохранения или внедрения маркеров
Движок предлагает одно последовательное сохранение всего файла. Приложениям часто нужно больше, поэтому PDFium Delphi Component записывает собственные редакции поверх семантического вывода движка
SaveAsLinearized создаёт файлы Fast Web View с группировкой первой страницы, двумя секциями перекрёстных ссылок и таблицами подсказок смещений страниц и общих объектов по Annex FSaveAsObjectStream группирует подходящие объекты в /ObjStm с порядком, локальным для страницы, и полным покрытием перекрёстных ссылок типа 2BeginIncrementalSave и CommitIncrementalSave дописывают только изменённые и новые косвенные объекты, сохраняя предыдущий вывод байт в байт вместе с /Prev, /Encrypt, /Info и постоянным /ID; фиксация без изменений не увеличивает файлSaveAsRepaired записывает копию с одной редакцией и повторно проверяет её независимой строгой загрузкой перед выдачейTPdf.PdfVersion повторно использует состояние парсера PDFium и выполняет только восьмибайтовую проверку заголовка вместо повторного разбора исходного документаTPdfRandomAccessStore держит промежуточные данные в памяти до SaveMemoryLimit, затем переносит их в эксклюзивный временный файл с удалением при закрытии; постобработка базового сохранения применяет ту же политику ко всем трём рабочим областям, а обновления каталога для action по умолчанию и меток страниц используют ограниченные окна и разреженный индекс/AF ISO 32000-2 §7.11.4, прикреплённые к catalog или целевой странице, с восемью значениями связи из Table 45IPdfOcrProvider принимает любой движок распознавания — компонент поставляет битовые карты страниц и записывает итоговый доступный для поиска текстовый слой, со статусом на каждую страницу и пропуском существующего текстаGetStructuredText строит иерархию страница / блок / строка / стилизованный диапазон из геометрии символов и семантики Tagged PDF; ExtractTables и ExtractDocumentTables обнаруживают таблицы с рамками и выровненные по пробелам, сохраняют объединённые диапазоны, оценивают достоверность и выдают CSV или JSONBuildReflowDocument превращает PDF с фиксированной вёрсткой в дерево узлов, безопасный HTML-вывод которого сохраняет заголовки, абзацы, списки, иллюстрации, секции страниц и диапазоны таблицMeasureText и WrapText дают перенос по словам, не добавляя на страницу ничего лишнегоTPdfStreamInspector декодирует произвольные объекты-потоки под явными бюджетами источника, сырых и декодированных данных, коэффициента расширения и числа потоков, возвращая структурированный статус вместо исчерпания памяти на сконструированном файлеЯдро системы обработки PDF, TPdf обрабатывает все операции уровня документа, включая загрузку, сохранение, извлечение текста, обработку форм и управление метаданными
Развитый визуальный элемент управления, предоставляющий богатые возможности просмотра PDF с полной поддержкой взаимодействия с пользователем
TStream по требованию через LoadCustomDocument, с совместимым, строгим и восстановительным режимами плюс структурированной диагностикой xrefSaveAsRepairedSaveAsPdfA / SaveAsPdfAToStream со встроенным ICC-профилем sRGB и поддержкой пользовательских профилейValidatePdfA и свойство PdfAConformance только для чтенияMergeFiles (пакетное слияние с ограниченными источниками), ImportPagesByIndex (импорт подмножества), ImportNPagesToOne (сетка N-up), MovePages (изменение порядка на месте)CreateXObjectFromPage и InsertFormObjectFromXObjectRenderPageProgressive и IPdfCancellationTokenTPdfProgressiveDocument, включая разреженные подсказки байтовых диапазонов, приоритетное планирование диапазонов, ограниченные повторные попытки, отмену и контроль доступности документа, форм и страницSaveAsLinearized, включая группировку первой страницы, две секции перекрёстных ссылок и таблицы подсказок смещений страниц и общих объектов по Annex FSaveAsObjectStream, включая ограниченные группы ObjStm, порядок, локальный для страницы, и полное покрытие xref типа 2BeginIncrementalSave и CommitIncrementalSave, включая сохранение зашифрованного префикса, наследуемые параметры безопасности, фиксации без операций, строгую повторную проверку при открытии, надёжные боковые файлы, атомарную замену, откат и статистику на каждую фиксациюTPdfRandomAccessStore и SaveMemoryLimit, включая безопасный сброс во временный файл, позиционируемый ввод-вывод и диагностику пиковых значений на каждое сохранениеFitMode определяет, как страница располагается в области просмотра (ручное масштабирование, фактический размер, страница целиком, по ширине); автоматически применяется при изменении размера и смене страницыPageColor отделяет фон отрисованной страницы PDF от свойства Color окружающего элемента управления для просмотрщиков в тёмной темеHighlightSearchText и ClearHighlightPageShadowSize / PageShadowColor) и рамка страницы (PageBorderColor)LinkOptions) и события OnAnnotationLinkClick / OnWebLinkClickAllowUserPageChange, ChangePageOnMouseScrolling, AllowUserTextSelection) для киосков и встраивания в режиме только для чтенияTPdfThumbnailView| Аспект | Подробности |
|---|---|
| Движок рендеринга | Google PDFium — стандартный отраслевой, проверенный временем движок PDF |
| Поддержка PDF | Версии PDF от 1.0 до 1.7, зашифрованные и защищённые паролем файлы |
| Совместимость платформ | 32-разрядные и 64-разрядные приложения для Windows |
| Поддержка IDE | Delphi XE5 / C++Builder XE5 (RAD Studio XE5) — Delphi/C++Builder 13.1 Florence (RAD Studio 13.1), Lazarus 3.8+ |
| Кодировка символов | Полная поддержка Unicode, обработка многоязычного текста |
| Управление памятью | Оптимизировано для больших документов, эффективное использование ресурсов |
| Потокобезопасность | Однопоточный дизайн (согласно требованиям PDFium) |
PDFium Delphi Component следует многоуровневой архитектуре, которая чётко разделяет ответственность и максимизирует повторное использование кода:
| Уровень | Файлы | Ответственность |
|---|---|---|
| Компоненты VCL | PDFium.pas, FPdfThumbnail.pas | Компоненты Delphi VCL (TPdf, TPdfView, TPdfThumbnailView) с поддержкой времени проектирования |
| Привязки API | FPdfView.pas, FPdfDoc.pas, FPdfText.pas, FPdfEdit.pas, FPdfAnnot.pas, FPdfFormFill.pas, FPdfPageOps.pas, FPdfAttachment.pas, FPdfSignature.pas, FPdfStructTree.pas, FPdfDataAvail.pas, FPdfExtensions.pas, FPdfFWLEvent.pas, FPdfCompress.pas, FPdfUtils.pas | Объявления указателей на функции для вызовов DLL PDFium |
| Конвейер PDF/A | FPdfPdfa.pas | Создание PDF/A-1b (внедрение XMP, ICC OutputIntent sRGB, обновление catalog) и валидация (определение уровня соответствия, перечисление проблем) |
| Асинхронная инфраструктура | FPdfAsync.pas | IPdfCancellationToken / IPdfCancellationTokenSource, singleton PdfNoCancellationToken и помощник TPdfFuture<T> для длительных операций рендеринга и экспорта |
| Помощники геометрии | FPdfMatrix.pas | Объектно-ориентированная обёртка над FS_MATRIX с помощниками Translate, Scale, Rotate, Flip, Skew и Multiply |
| Операции со страницами | FPdfPageOps.pas | Обёртки для FPDF_ImportPagesByIndex, FPDF_ImportPages, FPDF_ImportNPagesToOne, FPDF_MovePages, масштабируемое файловое пакетное планирование плюс помощники Form-XObject (CreateXObjectFromPage / InsertFormObjectFromXObject) |
| Боковая панель миниатюр | FPdfThumbnail.pas | TPdfThumbnailView — прокручиваемая боковая панель миниатюр страниц с эффектами наведения, выделения и навигацией OnPageClick |
| Нативный движок | DLLs\Win32|Win64\pdfium.dll и pdfium.v8.dll | Нативный движок рендеринга Google PDFium с необязательными сборками с поддержкой V8 |
TPdf и 36 готовых к запуску проектов сокращают время разработкиPDFium Delphi Component разработана для немедленной продуктивности. Библиотека компонентов включает:
Создаёте ли вы простой просмотрщик PDF или сложную систему обработки документов — PDFium Delphi Component обеспечивает основу для профессиональных функций PDF в ваших приложениях на Delphi и C++Builder