Tri biblioteke. Tri različita zadatka. Odabir pogrešne koštat će vas tjedana rada na zaobilaznim rješenjima, a odabir sve tri kada vam je potrebna samo jedna donosi troškove održavanja koje niste planirali. U nastavku donosimo izravan pregled onoga što svaka losLab PDF biblioteka zapravo radi, gdje se uklapa i gdje predaje zadatak drugim bibliotekama.
HotPDF: pisanje PDF-a ispočetka u Delphiju
HotPDF je izvorna (native) VCL komponenta za generiranje PDF dokumenata. Njezin model je imperativan i usmjeren na stranice: kreirate instancu klase THotPDF, postavite svojstva dokumenta, pozovete BeginDoc, crtate na CurrentPage, dodajete stranice prema potrebi i zatvarate s EndDoc. Redoslijed je važan jer BeginDoc primjenjuje rječnik šifriranja i postavke kompresije u trenutku pokretanja; sve što se dodijeli nakon te točke tiho se zanemaruje umjesto da se primijeni retroaktivno.
Površina za crtanje pokriva cijeli skup PDF operatora na razini Delphija: TextOut za pozicionirani Unicode tekst, SetFont s ugradnjom TrueType fontova, vektorske primitive (linije, Bezierove krivulje, elipse, pravokutnike), postavljanje slika iz datoteke ili memorije te generiranje crtičnih kodova. Koordinate su izražene u točkama (points) s početkom u donjem lijevom kutu, pri čemu se Y povećava prema gore, što svakoga barem jednom zbuni. Stanje fonta se ne zadržava nakon poziva AddPage, stoga je poziv SetFont potreban nakon svakog prijeloma stranice.
Polja AcroForm su ravnopravni elementi. Možete dodati tekstualna polja, okvire za potvrdu, gumbe za odabir, kombinirane okvire, popise i gumbe izravno na objekt stranice jednim pozivom. HotPDF također može učitati postojeći PDF putem LoadFromFile te popuniti ili pročitati vrijednosti polja, što ga čini korisnim u dva odvojena tijeka rada: izradi obrazaca i automatizaciji njihovog popunjavanja.
Šifriranje se također rješava na razini dokumenta. Svojstvo CryptKeyLength odabire shemu (od 40-bitnog RC4 do AES-256), ActivateProtection je aktivira, a ProtectOptions postavlja ISO zastavice dopuštenja. Dva načina revizije AES-256 (R5 i R6, kontrolirani svojstvom UseAES256R6) postoje jer revizija 6 uklanja poznatu ranjivost u reviziji 5, ali zahtijeva preglednik koji podržava PDF 2.0; odabir između njih odluka je o kompatibilnosti, a ne o praktičnosti.
Podrška za digitalni potpis u HotPDF-u pokriva osnovne profile PAdES, pa je prikladna za tijekove rada u kojima potpis mora zadovoljiti zahtjeve norme ETSI EN 319 142. Ako trebate samo generirati izlazni PDF, HotPDF je prva biblioteka za kojom trebate posegnuti.
PDFium VCL: renderiranje, pregledavanje i čitanje postojećih PDF-ova
PDFium VCL omotava Googleov PDFium engine as a VCL komponentu, što joj daje potpuno drugačiju ulogu u usporedbi s HotPDF-om. Tamo gdje HotPDF piše, PDFium VCL čita i renderira. Središnji objekt je TPdf, upravitelj dokumenata koji otvara datoteku postavljanjem FileName i zatim Active := True. Pogreške pri učitavanju ne podižu iznimke; Active jednostavno ostaje na False, stoga provjera tog svojstva nakon dodjele nije opcionalna.
Renderiranje se odvija kroz vizualnu komponentu TPdfView koju postavljate na formu i povezujete s instancom TPdf putem PdfView.Pdf := Pdf. Zumiranje i način prilagodbe nalaze se na samom prikazu (view), a ne na dokumentu. Jedna suptilnost koja često zbunjuje developere: Pdf.PageNumber i PdfView.PageNumber su neovisna svojstva. Postavljanje jednog ne ažurira drugo, a API-jevi za izdvajanje na razini prikaza (okviri riječi, mjerne jedinice čitanja) koriste trenutnu stranicu prikaza, a ne dokumenta.
Izdvajanje teksta područje je u kojem PDFium VCL nema izravnog konkurenta u liniji losLab proizvoda. Svojstvo ReadablePageContent vraća strukturirani tekst prepoznajući redoslijed čitanja, PageWordBoxes daje pravokutnike koji uokviruju pojedine riječi, a DocumentReadingUnits prolazi kroz cijeli dokument. Za potrebe pristupačnosti, IsTagged govori je li prisutno stablo strukture, a ValidatePdfUa pokreće provjeru usklađenosti s UA standardima. Ovi API-jevi čine PDFium VCL prirodnim izborom za svaki tijek rada koji mora analizirati sadržaj postojećeg PDF-a umjesto stvaranja novog.
Popunjavanje obrazaca također radi na strani PDFium-a, kroz isti sloj AcroForm koji izlaže temeljni engine. To je prikladno rješenje kada izvorni dokument već postoji i automatizirate njegovo popunjavanje, umjesto da sami kreirate polja obrasca.
PDFlibPas: manipulacija, usklađeno potpisivanje i izravan pristup datoteci
PDFlibPas (verzija 3.73.0) nalazi se na drugom kraju spektra složenosti. Izlaže tri sloja API-ja na vrhu istog modela dokumenta: jednostavnu fasadu temeljenu na ručkama (handles) (TPDFlib) kompatibilnu s konvencijom pozivanja Quick-PDF, cijeli sloj stabla objekata (TPDFDocument) te strujni parser (TSmartPDFReader / TSmartPDFWriter) koji radi izravno na bajtovima datoteke bez učitavanja cijelog grafikona objekata.
Strujni sloj je ono što PDFlibPas čini pravim izborom za velike dokumente. TSmartPDFWriter može dodati inkrementalno ažuriranje datoteci na disku bez rekonstrukcije cijele tablice unakrsnih referenci (cross-reference table), što je mehanizam na kojem se temelju učinkovito ponovno spremanje i PAdES vremenske oznake za dugoročnu validaciju. Za tijekove potpisivanja visokog stupnja usklađenosti, gdje potpisani sažetak (hash) mora pokrivati određeni raspon bajtova, a potpis se primjenjuje bez ponovnog pisanja dokumenta, ovaj je sloj jedini izvedivi put.
Manipulacija dokumentom na razini TPDFDocument uključuje spajanje pomoću metode Merge, selektivno kopiranje stranica putem CopyPagesFromDoc s tekstualnim rasponom te upravljanje verzijama kroz SetMinimumVersion i LockSaveVersion. Zaključavanje verzije podiže pogrešku 602 ako pokušate spremiti značajku koja bi podigla izlaznu verziju iznad zaključane, što je korisno kada morate jamčiti da izlaz ostaje unutar određene revizije PDF-a radi usklađenosti s arhiviranjem.
Podrška za PDF/A (ISO 19005) nalazi se u PDFlibPas-ovom alatu za usklađenost. Imajte na umu da su šifriranje i PDF/A specifikacijom međusobno isključivi: ne možete imati oboje u istoj datoteci. Tijekovi rada koji zahtijevaju šifriranu distribucijsku kopiju i arhivsku PDF/A kopiju moraju stvoriti dvije zasebne datoteke.
Kako odabrati između njih
Tipično stablo odlučivanja je kratko. Ako generirate novi dokument iz podataka, koristite HotPDF. Ako renderirate ili izdvajate tekst iz postojećeg dokumenta u Delphi VCL aplikaciji, koristite PDFium VCL. Ako manipulirate, spajate ili usklađeno potpisujete postojeće PDF-ove u velikom opsegu ili s inkrementalnim spremanjem, koristite PDFlibPas. Mnogi produkcijski sustavi koriste dva od ova tri alata: primjerice, HotPDF za generiranje izlaza i PDFlibPas za primjenu dugoročne validacijske oznake prije arhiviranja, ili PDFium VCL za pregled onoga što je HotPDF stvorio prije slanja dalje u sustav.
Sve tri biblioteke isporučuju se kao izvorni Pascal kod za Delphi i C++Builder, bez ikakvih runtime ovisnosti izvan VCL-a. PDFium VCL dodatno pakira PDFium DLL koji obavlja renderiranje i parsiranje. Stranica svakog proizvoda sadrži potpunu referencu API-ja i povijest trenutnih verzija.
Pojedinosti o svakoj biblioteci: HotPDF Component, PDFium VCL Component i PDFlibPas.