Articol tehnic

Bibliotecile PDF losLab: HotPDF, PDFium și PDF Library

Trei biblioteci. Trei sarcini distincte. Alegerea celei greșite vă costă săptămâni de soluții ocolitoare, iar alegerea tuturor trei când aveți nevoie doar de una vă costă o povară de întreținere pe care nu ați bugetat-o. Iată o descriere directă a ceea ce face de fapt fiecare bibliotecă PDF losLab, unde se potrivește și unde predă ștafeta surorilor ei

Diagramă comparativă a celor trei biblioteci PDF losLab pentru Delphi: HotPDF care generează documente noi, PDFium Component care randează și extrage din fișiere existente și PDF Library for Delphi care îmbină și semnează pentru conformitate
HotPDF scrie PDF-uri noi din cod, PDFium Component citește și randează fișiere existente, iar PDF Library for Delphi îmbină, semnează și guvernează ceea ce există deja

HotPDF: scrierea unui PDF de la zero în Delphi

HotPDF este o componentă VCL nativă pentru generarea de documente PDF. Modelul ei este imperativ și centrat pe pagină: construiți o instanță THotPDF, setați proprietățile documentului, apelați BeginDoc, desenați pe CurrentPage, adăugați pagini după nevoie și închideți cu EndDoc. Ordinea contează, pentru că BeginDoc fixează dicționarul de criptare și setările de compresie în clipa în care rulează; orice este atribuit după acel punct este ignorat în tăcere, nu aplicat retroactiv

Suprafața de desenare acoperă întregul set de operatori PDF la nivel de Delphi: TextOut pentru text Unicode poziționat, SetFont cu încorporare TrueType, primitive vectoriale (linii, curbe Bézier, elipse, dreptunghiuri), plasare de imagini din fișier sau din memorie și generare de coduri de bare. Coordonatele sunt în puncte, măsurate din colțul din stânga jos, cu Y crescând în sus, ceea ce prinde pe toată lumea o dată. Starea fontului nu supraviețuiește lui AddPage, deci un apel SetFont este necesar după fiecare trecere la pagină nouă

Diagramă a ciclului de viață al generării PDF cu HotPDF în Delphi, de la crearea THotPDF prin BeginDoc, desenare, AddPage și EndDoc, cu regula că opțiunile documentului se fixează la BeginDoc
Opțiunile la nivel de document se blochează când rulează BeginDoc, coordonatele cresc din colțul din stânga jos, iar starea fontului se resetează la fiecare AddPage

Câmpurile AcroForm sunt cetățeni de rangul întâi. Puteți adăuga câmpuri de text, casete de bifat, butoane radio, casete combinate, casete de listă și butoane de apăsare direct pe un obiect-pagină, printr-un singur apel fiecare. HotPDF poate de asemenea încărca un PDF existent prin LoadFromFile și poate completa sau citi valori de câmpuri, ceea ce îl face util în două fluxuri de lucru separate: construirea formularelor și automatizarea completării lor

Criptarea este tratată tot la nivel de document. CryptKeyLength selectează schema (de la RC4 pe 40 de biți până la AES-256), ActivateProtection o armează, iar ProtectOptions setează indicatorii de permisiuni ISO. Cele două moduri de revizie AES-256 (R5 și R6, controlate prin UseAES256R6) există pentru că revizia 6 corectează o slăbiciune cunoscută din revizia 5, dar cere un vizualizator capabil de PDF 2.0; alegerea dintre ele este o decizie de compatibilitate, nu una de comoditate

Suportul pentru semnături digitale din HotPDF acoperă profilurile de bază PAdES, deci este potrivit pentru fluxuri în care semnătura trebuie să respecte cerințele ETSI EN 319 142. Dacă nevoia dumneavoastră este doar de a genera documente, HotPDF este biblioteca la care să apelați prima

PDFium Component: randarea, vizualizarea și citirea PDF-urilor existente

PDFium Component învelește motorul PDFium al Google ca o componentă VCL, ceea ce îi dă un rol fundamental diferit de al HotPDF. Acolo unde HotPDF scrie, PDFium Component citește și randează. Obiectul central este TPdf, un manager de documente care deschide un fișier prin setarea lui FileName și apoi Active := True. Eșecurile de încărcare nu sunt ridicate ca excepții; Active rămâne pur și simplu False, deci verificarea lui după atribuire nu este opțională

Randarea se face prin TPdfView, o componentă vizuală pe care o puneți pe un formular și o legați de o instanță TPdf prin PdfView.Pdf := Pdf. Zoomul și modul de încadrare stau pe vizualizare, nu pe document. O subtilitate care îi încurcă pe mulți: Pdf.PageNumber și PdfView.PageNumber sunt proprietăți independente. Setarea uneia nu o actualizează pe cealaltă, iar API-urile de extragere bazate pe vizualizare (casete de cuvinte, unități de citire) folosesc pagina curentă a vizualizării, nu pe cea a documentului

Extragerea de text este locul în care PDFium Component nu are niciun concurent direct în gama losLab. ReadablePageContent returnează text structurat, conștient de ordinea de citire, PageWordBoxes dă dreptunghiuri de încadrare la nivel de cuvânt, iar DocumentReadingUnits parcurge întregul document. Pentru munca de accesibilitate, IsTagged vă spune dacă este prezent un arbore de structură, iar ValidatePdfUa rulează o verificare de conformitate UA. Aceste API-uri fac din PDFium Component alegerea naturală pentru orice flux care trebuie să înțeleagă ce se află într-un PDF existent, nu să producă unul nou

Completarea formularelor funcționează și pe partea PDFium, prin același strat AcroForm pe care îl expune motorul subiacent. Este potrivită atunci când documentul-sursă există deja și automatizați completarea lui, nu construiți dumneavoastră câmpurile de formular

PDF Library for Delphi: manipulare, semnare de conformitate și acces direct la fișier

PDF Library for Delphi (versiunea 3.73.0) stă la celălalt capăt al spectrului de complexitate. Ea expune trei straturi de API deasupra aceluiași model de document: o fațadă plată bazată pe identificatori (TPDFlib), compatibilă cu convenția de apelare Quick-PDF, un strat complet de arbore de obiecte (TPDFDocument) și un analizor în flux (TSmartPDFReader / TSmartPDFWriter) care operează direct pe octeții fișierului, fără să încarce graful complet de obiecte

Diagramă de arhitectură a PDF Library for Delphi, care arată fațada TPDFlib, arborele de obiecte TPDFDocument și analizorul în flux TSmartPDFReader și TSmartPDFWriter deasupra unui singur fișier de document
Fațada plată se potrivește secvențelor scurte de apeluri, arborele de obiecte tratează editările structurale, iar analizorul în flux adaugă actualizări incrementale și ștampile PAdES fără o reîncărcare completă

Stratul în flux este cel care face din PDF Library for Delphi alegerea potrivită pentru documente mari. TSmartPDFWriter poate adăuga o actualizare incrementală la un fișier de pe disc fără să reconstruiască întregul tabel de referințe încrucișate, mecanismul care stă în spatele resalvării eficiente și al ștampilelor PAdES de validare pe termen lung. Pentru fluxuri de semnare de nivel de conformitate, în care hashul semnat trebuie să acopere un interval precis de octeți, iar semnătura se aplică fără rescrierea documentului, acest strat este singura cale viabilă

Manipularea documentelor la nivelul TPDFDocument include îmbinarea cu Merge, copierea selectivă de pagini prin CopyPagesFromDoc cu un șir de interval și guvernarea versiunii prin SetMinimumVersion și LockSaveVersion. Blocarea versiunii ridică eroarea 602 dacă încercați să salvați o funcționalitate care ar împinge ieșirea peste versiunea blocată, ceea ce este util când trebuie să garantați că ieșirea rămâne într-o revizie PDF anume, pentru conformitate arhivistică

Suportul PDF/A (ISO 19005) stă în atelierul de conformitate al PDF Library for Delphi. Rețineți că criptarea și PDF/A se exclud reciproc prin specificație: nu le puteți avea pe amândouă într-un singur fișier. Fluxurile care au nevoie de o copie de distribuție criptată și de o copie de arhivă PDF/A trebuie să producă două artefacte separate

Alegerea între ele

Arborele de decizie tipic este scurt. Dacă generați un document nou din date, folosiți HotPDF. Dacă randați sau extrageți text dintr-un document existent într-o aplicație Delphi VCL, folosiți PDFium Component. Dacă manipulați, îmbinați sau semnați pentru conformitate PDF-uri existente, la scară sau cu semantică de salvare incrementală, folosiți PDF Library for Delphi. Multe sisteme de producție folosesc două din cele trei: HotPDF pentru a genera documentele și PDF Library for Delphi pentru a le aplica o ștampilă de validare pe termen lung înainte de arhivare, de pildă, sau PDFium Component pentru a previzualiza ce a produs HotPDF înainte de a-l trimite mai departe

Toate trei sunt livrate ca sursă Pascal nativă pentru Delphi și C++Builder, fără dependențe la execuție dincolo de VCL. PDFium Component include în plus DLL-ul PDFium, care acoperă munca de randare și de analiză a motorului. Pagina de produs a fiecărei biblioteci poartă referința completă de API și istoricul curent de versiuni

Detalii despre bibliotecile individuale: HotPDF Delphi Component, PDFium Component și PDF Library for Delphi