Tri biblioteke. Tri razlicita posla. Odabir pogresne kosta vas nedelje zaobilaznih resenja, a odabir sve tri kada vam je potrebna samo jedna kosta vas rezijskog odrzavanja za koji niste budzetirali. Evo direktnog pregleda sta svaka losLab PDF biblioteka zapravo radi, gde se uklapa i gde predaje posao svojoj sestrici.
HotPDF: pisanje PDF-a od nule u Delphi-ju
HotPDF je nativna VCL komponenta za generisanje PDF dokumenata. Njen model je imperativni i usmeren na stranicu: konstruisite instancu THotPDF, postavite svojstva dokumenta, pozovite BeginDoc, crtajte na CurrentPage, dodajte stranice po potrebi i zatvorite sa EndDoc. Redosled je vazan jer BeginDoc potvrduje recnik sifrovanja i podesavanja kompresije u trenutku izvrsavanja; sve sto se dodeli posle tog trenutka se tiho ignorise umesto da se retroaktivno primeni.
Povrsina za crtanje pokriva pun skup PDF operatora na nivou Delphi-ja: TextOut za pozicionirani Unicode tekst, SetFont sa TrueType ugradnjom, vektorske primitive (linije, Bezier krive, elipse, pravougaonike), postavljanje slika iz datoteke ili memorije i generisanje barkodova. Koordinate su u tackama od donjeg levog ugla sa Y koji raste prema gore, sto svakoga jednom zbuni. Stanje fonta ne prezivi AddPage, pa je poziv SetFont obavezan posle svakog preloma stranice.
AcroForm polja su punopravni gradani. Mozete direktno dodati tekstualna polja, polja za potvrdu, radio dugmad, kombinovana polja, okvire s listom i komandna dugmad na objekat stranice jednim pozivom svako. HotPDF takodje moze ucitati postojeci PDF putem LoadFromFile i popuniti ili procitati vrednosti polja, sto ga cini korisnim u dva odvojena toka rada: izgradnja formulara i automatizacija njihovog popunjavanja.
Sifrovanje se takodje obraduje na nivou dokumenta. CryptKeyLength bira semu (40-bitni RC4 do AES-256), ActivateProtection je aktivira, a ProtectOptions postavlja ISO oznake dozvola. Dva rezima AES-256 revizije (R5 i R6, kontrolisana pomocu UseAES256R6) postoje jer revizija 6 ispravlja poznatu slabost revizije 5, ali zahteva PDF preglednik kompatibilan s PDF 2.0; biranje izmedju njih je odluka o kompatibilnosti, a ne o pogodnosti.
Podrska za digitalni potpis u HotPDF-u pokriva PAdES bazicne profile, pa je pogodan za tokove rada u kojima potpis mora da ispunjava zahteve ETSI EN 319 142. Ako vam je potrebno samo generisanje izlaza, HotPDF je biblioteka kojoj cete se prvo okrenuti.
PDFium VCL: renderovanje, pregledanje i citanje postojecih PDF-ova
PDFium VCL obmotava Google-ov PDFium motor kao VCL komponentu, sto mu daje fundamentalno drugaciju ulogu od HotPDF-a. Tamo gde HotPDF pise, PDFium VCL cita i renderuje. Osnovni objekat je TPdf, menadzер dokumenta koji otvara datoteku postavljanjem FileName a zatim Active := True. Neuspesi ucitavanja se ne bacaju kao izuzeci; Active jednostavno ostaje False, pa provjera posle dodele nije opcionalna.
Renderovanje se odvija kroz TPdfView, vizuelnu komponentu koju stavljate na formu i povezujete s instancom TPdf putem PdfView.Pdf := Pdf. Zum i rezim prilagodjavanja zive na pogledu, ne na dokumentu. Jedna suptilnost koja zbunjuje ljude: Pdf.PageNumber i PdfView.PageNumber su nezavisne osobine. Postavljanje jedne ne azurira drugu, a API-ji za ekstrakciju zasnovani na pogledu (okviri reci, jedinice citanja) koriste trenutnu stranicu pogleda, ne dokumenta.
Ekstrakcija teksta je oblast gde PDFium VCL nema direktnog konkurenta u losLab ponudi. ReadablePageContent vraca strukturirani tekst sa svesnoscu o redosledu citanja, PageWordBoxes daje ogranicavajuce pravougaonike na nivou reci, a DocumentReadingUnits prolazi kroz ceo dokument. Za rad s pristupacnoscu, IsTagged govori da li je stablo strukture prisutno, a ValidatePdfUa pokrece proveru uskladjenosti UA. Ovi API-ji cine PDFium VCL prirodnim izborom za svaki tok rada koji treba da razume sta se nalazi unutar postojeceg PDF-a, a ne da produkuje novi.
Popunjavanje formulara takodje radi na PDFium strani, kroz isti AcroForm sloj koji izlaze podlezeci motor. Prikladno je kada izvorni dokument vec postoji i automatizujete njegovo popunjavanje a ne konstruisite polja formulara sami.
PDFlibPas: manipulacija, potpisivanje za uskladjenost i direktan pristup datotekama
PDFlibPas (verzija 3.73.0) se nalazi na drugom kraju spektra slozеnosti. Izlaze tri API sloja na vrhu istog modela dokumenta: ravnu fasadu zasnovanu na rukovaoцima (TPDFlib) kompatibilnu s Quick-PDF konvencijom pozivanja, pun sloj stabla objekata (TPDFDocument) i parser toka (TSmartPDFReader / TSmartPDFWriter) koji direktno radi na bajtovima datoteke bez ucitavanja kompletnog grafа objekata.
Sloj toka je ono sto cini PDFlibPas pravim izborom za velike dokumente. TSmartPDFWriter moze da doda inkrementalno azuriranje datoteci na disku bez rekonstruisanja cele tabele unakrsnih referenci, sto je mehanizam koji stoji iza i efikasnog ponovnog snimanja i PAdES stampova za dugorocnu validaciju. Za tokove rada s potpisivanjem na nivou uskladjenosti gde potpisani hez mora da pokriva specificni raspon bajtova i potpis se primenjuje bez prepisivanja dokumenta, ovaj sloj je jedini izvodljivi put.
Manipulacija dokumentima na nivou TPDFDocument ukljucuje spajanje s Merge, selektivno kopiranje stranica putem CopyPagesFromDoc s nizom opsega i upravljanje verzijama kroz SetMinimumVersion i LockSaveVersion. Zakljucavanje verzije baca gresku 602 ako pokusate da sacuvate funkciju koja bi gurnula izlaz iznad zakljucane verzije, sto je korisno kada trebate garantovati da izlaz ostaje unutar specificne PDF revizije za uskladjenost arhiviranja.
Podrska za PDF/A (ISO 19005) je u PDFlibPas-ovom radnom stolu za uskladjenost. Primetite da su sifrovanje i PDF/A medjusobno iskljucivi po specifikaciji: ne mozete imati oboje u jednoj datoteci. Tokovi rada koji trebaju sifrovanu kopiju za distribuciju i PDF/A kopiju za arhiviranje moraju producirati dva odvojena artefakta.
Odabir izmedju njih
Tipicno stablo odlucivanja je kratko. Ako generisete novi dokument iz podataka, koristite HotPDF. Ako renderujete ili ekstraktujete tekst iz postojeceg dokumenta u Delphi VCL aplikaciji, koristite PDFium VCL. Ako manipulisete, spajate ili potpisujete postojece PDF-ove na velikoj skali ili sa semantikom inkrementalnog snimanja, koristite PDFlibPas. Mnogi proizvodni sistemi koriste dva od troja: HotPDF za generisanje izlaza i PDFlibPas za primenu stampа za dugorocnu validaciju pre arhiviranja, na primer, ili PDFium VCL za pregled onoga sto je HotPDF producirao pre slanja nizvodno.
Sve tri se isporucuju kao nativni Pascal izvorni kod za Delphi i C++Builder, bez zavisnosti od izvrsnog okruzenja izvan VCL-а. PDFium VCL takodje sadrzi PDFium DLL, koji pokriva renderovanje i parsiranje motora. Stranica proizvoda svake biblioteke sadrzi pun API prirucnik i istoriju trenutne verzije.
Detalji o pojedinim bibliotekama: HotPDF komponenta, PDFium VCL komponenta i PDFlibPas.