PDFium Delphi Component — це комплексна компонентна бібліотека професійного рівня, яка приносить потужні можливості обробки та перегляду PDF у програми Delphi і C++Builder. Для рендерингу сторінок і читання документів бібліотека використовує рушій PDFium, а все, чого цей рушій не надає, реалізує на Object Pascal
Ця відмінність важлива, коли ви оцінюєте бібліотеку. PDFium малює сторінки, вилучає текст і читає наявні структури. Він не вміє підписувати документ, записувати шифрування, валідувати відповідність стандартам PDF або видавати лінеаризовану чи інкрементальну ревізію. PDFium Delphi Component містить приблизно 115 000 рядків Object Pascal у 55 модулях, з яких понад 62 000 рядків припадають на 36 модулів, що не мають жодного аналога в PDFium API — криптографія, підписи, шифрування, відповідність стандартам, серіалізація 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 і підписує його одним викликом, згідно з додатком A.7 EN 319 142-1PDFium відкриває зашифровані файли, але сам шифрування не записує. Сторону запису 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 з групуванням першої сторінки, двома секціями перехресних посилань і таблицями підказок зсувів сторінок та спільних об’єктів із додатка FSaveAsObjectStream групує відповідні об’єкти в /ObjStm із впорядкуванням за сторінками та повним покриттям перехресних посилань типу 2BeginIncrementalSave і CommitIncrementalSave дописують до зашифрованих або незашифрованих джерел лише змінені й нові непрямі об’єкти, зберігаючи попередній вивід байт-у-байт разом із /Prev, /Encrypt, /Info і постійним /ID; фіксація без змін не збільшує файлSaveAsRepaired пише копію з однією ревізією та повторно звіряє її незалежним строгим завантаженням, перш ніж віддати результатTPdf.PdfVersion повторно використовує стан парсера PDFium і виконує лише восьмибайтову перевірку заголовка замість повторного розбору вихідного документаTPdfRandomAccessStore тримає проміжні дані в пам’яті до SaveMemoryLimit, а потім переїжджає в ексклюзивний тимчасовий файл із видаленням після закриття; постобробка збереження в ядрі застосовує ту саму політику до всіх трьох робочих просторів, тоді як типові оновлення каталогу open-action і міток сторінок використовують обмежені вікна та розріджений індекс/AF за ISO 32000-2 §7.11.4, що кріпляться до каталогу чи цільової сторінки, з вісьмома значеннями зв’язків із Table 45IPdfOcrProvider приймає будь-який рушій розпізнавання — компонент постачає бітмапи сторінок і записує результуючий текстовий шар із можливістю пошуку, зі статусом на сторінку та пропуском наявного текстуGetStructuredText будує ієрархію сторінка / блок / рядок / стилізований фрагмент із геометрії символів і семантики Tagged PDF; ExtractTables і ExtractDocumentTables знаходять таблиці з лінійками та вирівняні пробілами, зберігають об’єднані діапазони, оцінюють впевненість і видають CSV або JSONBuildReflowDocument перетворює PDF із фіксованим компонуванням на дерево вузлів, чиї безпечні HTML-виводи зберігають заголовки, абзаци, списки, ілюстрації, секції сторінок і діапазони таблицьMeasureText і WrapText дають перенос слів, нічого не додаючи на сторінкуTPdfStreamInspector декодує довільні об’єкти потоків у межах явних бюджетів джерела, сирих даних, декодованих даних, коефіцієнта розширення та кількості потоків, повертаючи структурований статус замість вичерпання пам’яті на сконструйованому файліСерце системи обробки PDF, TPdf виконує всі операції на рівні документа, включно із завантаженням, збереженням, вилученням тексту, обробкою форм і керуванням метаданими
Вишуканий візуальний елемент керування, який забезпечує насичений перегляд PDF із повними можливостями взаємодії користувача
TStream на вимогу через LoadCustomDocument, з політиками compatible, strict і recovery плюс структурованою діагностикою xrefSaveAsRepairedSaveAsPdfA / SaveAsPdfAToStream із вбудованим профілем sRGB ICC та підтримкою власних профілівValidatePdfA і властивість лише для читання PdfAConformanceMergeFiles (пакетне об’єднання з обмеженими джерелами), ImportPagesByIndex (імпорт підмножини), ImportNPagesToOne (сітка N-up), MovePages (впорядкування на місці)CreateXObjectFromPage і InsertFormObjectFromXObjectRenderPageProgressive і IPdfCancellationTokenTPdfProgressiveDocument з розрідженими підказками byte-range, пріоритезованим плануванням діапазонів, обмеженими повторами, скасуванням і воротами доступності документа, форми та сторінокSaveAsLinearized з групуванням першої сторінки, двома секціями перехресних посилань і таблицями підказок зсувів сторінок та спільних об’єктів із додатка FSaveAsObjectStream з обмеженими групами ObjStm, впорядкуванням за сторінками та повним покриттям xref типу 2BeginIncrementalSave і CommitIncrementalSave зі збереженням зашифрованого префікса, успадкованими параметрами безпеки, фіксаціями без змін, строгою валідацією повторного відкриття, довговічними побічними файлами, атомарним заміщенням, відкатом і статистикою на кожну фіксаціюTPdfRandomAccessStore і SaveMemoryLimit із безпечним вивантаженням у тимчасовий файл, позиційним вводом-виводом і діагностикою піків на кожне збереженняFitMode визначає, як сторінка розміщується у вікні перегляду (ручний масштаб, фактичний розмір, умістити сторінку, умістити ширину); автоматично застосовується повторно під час Resize / зміни сторінки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, sRGB ICC OutputIntent, оновлення каталогу) і перевірка (визначення відповідності, перелік проблем) |
| Асинхронна інфраструктура | FPdfAsync.pas | IPdfCancellationToken / IPdfCancellationTokenSource, синглтон 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