Trys bibliotekos. Trys skirtingos užduotys. Pasirinkus netinkamą, prarasite kelias savaites kurdami aplinkinius sprendimus, o pasirinkus visas tris, kai reikia tik vienos, patirsite nenumatytų priežiūros išlaidų. Čia pateikiame tiesioginę apžvalgą, ką iš tikrųjų daro kiekviena „losLab“ PDF biblioteka, kur ji pritaikoma ir kada perduoda darbą kitoms.
HotPDF: PDF failų kūrimas nuo nulio naudojant Delphi
„HotPDF“ yra natūralus (native) VCL komponentas, skirtas PDF dokumentams generuoti. Jo modelis yra imperatyvus ir orientuotas į puslapius: sukuriate THotPDF egzempliorių, nustatote dokumento savybes, iškviečiate BeginDoc, piešiate CurrentPage, pridedate puslapius pagal poreikį ir užbaigiate naudodami EndDoc. Eiliškumas yra svarbus, nes BeginDoc įrašo šifravimo žodyną bei suspaudimo nustatymus iškvietimo momentu; bet kokie vėliau priskirti nustatymai yra tyliai ignoruojami, o ne taikomi atgaline data.
Piešimo sritis apima pilną PDF operatorių rinkinį „Delphi“ lygiu: TextOut skirtas pozicionuojamam Unicode tekstui, SetFont su TrueType šriftų įterpimu, vektoriniai primityvai (linijos, Bezjė kreivės, elipsės, stačiakampiai), paveikslėlių įkėlimas iš failo ar atminties ir brūkšninių kodų generavimas. Koordinatės nurodomos taškais nuo apatinio kairiojo kampo, o Y didėja į viršų, kas iš pradžių gali suklaidinti. Šrifto būsena neišlieka po AddPage, todėl po kiekvieno puslapio lūžio reikia iš naujo iškviesti SetFont.
„AcroForm“ laukai yra visateisiai dokumento elementai. Teksto laukus, žymimąsias varneles (checkboxes), radijo mygtukus, išskleidžiamuosius sąrašus (combo boxes), sąrašus (list boxes) ir paprastus mygtukus galite pridėti tiesiai prie puslapio objekto vienu iškvietimu. „HotPDF“ taip pat gali įkelti esamą PDF failą per LoadFromFile bei užpildyti arba nuskaityti laukų reikšmes, todėl šis komponentas yra naudingas dviejuose skirtinguose procesuose: kuriant formas ir automatizuojant jų užpildymą.
Šifravimas taip pat valdomas dokumento lygiu. CryptKeyLength parenka schemą (nuo 40 bitų RC4 iki AES-256), ActivateProtection ją įjungia, o ProtectOptions nustato ISO leidimų vėliavėles. Du AES-256 peržiūros režimai (R5 ir R6, valdomi per UseAES256R6) egzistuoja dėl to, kad 6-oji versija ištaiso žinomą 5-osios versijos trūkumą, tačiau jai reikalinga PDF 2.0 palaikanti peržiūros programa; pasirinkimas tarp jų yra suderinamumo, o ne patogumo klausimas.
Skaitmeninio parašo palaikymas „HotPDF“ apima bazinius PAdES profilius, todėl jis tinka procesams, kur parašas privalo atitikti ETSI EN 319 142 reikalavimus. Jei jūsų tikslas yra tik kurti naujus dokumentus, „HotPDF“ yra pirmoji biblioteka, kurią vertėtų pasirinkti.
PDFium VCL: esamų PDF failų atvaizdavimas, peržiūra ir skaitymas
„PDFium VCL“ apgaubia „Google PDFium“ variklį kaip VCL komponentą, todėl jo paskirtis iš esmės skiriasi nuo „HotPDF“. Ten, kur „HotPDF“ rašo, „PDFium VCL“ skaito ir atvaizduoja. Pagrindinis objektas yra TPdf, t. y. dokumentų tvarkyklė, kuri atidaro failą nustatant savybę FileName ir po to Active := True. Įkėlimo klaidos nekeliamos kaip išimtys (exceptions); Active tiesiog lieka reikšmės False, todėl jos patikrinimas po priskyrimo yra privalomas.
Atvaizdavimas vyksta per TPdfView – vizualų komponentą, kurį įkeliate į formą ir susiejate su TPdf egzemplioriumi per PdfView.Pdf := Pdf. Mastelis (zoom) ir talpinimo režimas (fit mode) yra susieti su peržiūros komponentu, o ne su pačiu dokumentu. Viena detalė, kuri dažnai suklaidina programuotojus: Pdf.PageNumber ir PdfView.PageNumber yra nepriklausomos savybės. Vienos nustatymas neatnaujina kitos, o peržiūra pagrįstos teksto išgavimo funkcijos (žodžių rėmeliai, skaitymo vienetai) naudoja dabartinį peržiūros puslapį, o ne paties dokumento puslapį.
Teksto išgavimo srityje „PDFium VCL“ neturi tiesioginio konkurento „losLab“ produktų šeimoje. ReadablePageContent grąžina struktūrizuotą tekstą atsižvelgiant į skaitymo tvarką, PageWordBoxes pateikia žodžio lygio ribojančius stačiakampius, o DocumentReadingUnits pereina visą dokumentą. Prieinamumo (accessibility) darbams savybė IsTagged praneša, ar yra struktūros medis, o ValidatePdfUa atlieka UA atitikties patikrą. Dėl šių programavimo sąsajų „PDFium VCL“ yra natūralus pasirinkimas bet kokiam procesui, kuriam reikia suprasti esamo PDF failo turinį, o ne kurti naują dokumentą.
Formų pildymas taip pat veikia „PDFium“ pusėje, naudojant tą patį „AcroForm“ sluoksnį, kurį suteikia po juo esantis variklis. Tai tinka tuomet, kai šaltinio dokumentas jau egzistuoja ir jūs automatizuojate jo užpildymą, o ne patys kuriate formos laukus.
PDFlibPas: manipuliavimas, atitikties pasirašymas ir tiesioginė prieiga prie failų
„PDFlibPas“ (versija 3.73.0) yra kitoje sudėtingumo spektro pusėje. Ši biblioteka suteikia tris API sluoksnius tam pačiam dokumentų modeliui: plokščią, rankenėlėmis (handles) pagrįstą sąsają (TPDFlib), suderinamą su „Quick-PDF“ iškvietimo konvencija, pilną objektų medžio sluoksnį (TPDFDocument) bei srautinį analizatorių (TSmartPDFReader / TSmartPDFWriter), kuris veikia tiesiogiai su failo baitais, neįkeldamas viso objektų grafo į atmintį.
Srautinis sluoksnis yra tai, dėl ko „PDFlibPas“ yra tinkamas pasirinkimas dideliems dokumentams. TSmartPDFWriter gali pridėti inkrementinį atnaujinimą prie diske esančio failo neatstatydamas visos kryžminių nuorodų lentelės (cross-reference table). Šis mechanizmas yra naudojamas tiek efektyviam pakartotiniam išsaugojimui, tiek PAdES ilgalaikio patvirtinimo (long-term validation) žymoms taikyti. Atitikties lygio pasirašymo procesams, kur pasirašyta maiša (hash) turi apimti tam tikrą baitų rėžį, o parašas taikomas neperrašant viso dokumento, šis sluoksnis yra vienintelis tinkamas būdas.
Dokumentų manipuliavimas TPDFDocument lygyje apima sujungimą su Merge, atskirų puslapių kopijavimą per CopyPagesFromDoc naudojant puslapių rėžio eilutę bei versijos kontrolę per SetMinimumVersion ir LockSaveVersion. Versijos užrakinimas iškelia klaidą 602, jei bandysite išsaugoti funkciją, kuri viršytų užrakintos versijos ribas. Tai naudinga, kai reikia užtikrinti, kad dokumentas atitiktų tam tikrą PDF reviziją archyvavimo tikslais.
PDF/A palaikymas (ISO 19005) yra integruotas į „PDFlibPas“ atitikties modulį. Atminkite, kad pagal specifikaciją šifravimas ir PDF/A vienas kitą atmeta: viename faile negalite turėti abiejų. Jeigu jūsų procesams reikalinga šifruota platinimo kopija ir PDF/A archyvinė kopija, turite sukurti du atskirus failus.
Kaip pasirinkti tinkamą biblioteką
Tipinis sprendimų priėmimo kelias yra trumpas. Jei generuojate naują dokumentą iš duomenų, naudokite „HotPDF“. Jei atvaizduojate arba išgaunate tekstą iš esamo dokumento „Delphi“ VCL aplikacijoje, naudokite „PDFium VCL“. Jei manipuliuojate, jungiate arba pasirašote esamus PDF failus dideliu mastu arba naudojate inkrementinio išsaugojimo semantiką, pasirinkite „PDFlibPas“. Daugelyje gamybinių sistemų naudojamos dvi iš trijų bibliotekų: pavyzdžiui, „HotPDF“ naudojama dokumento generavimui, o „PDFlibPas“ taikoma ilgalaikio patvirtinimo žymai uždėti prieš archyvavimą, arba „PDFium VCL“ naudojama „HotPDF“ sugeneruoto failo peržiūrai prieš jį išsiunčiant toliau.
Visos trys bibliotekos platinamos kaip natūralus „Pascal“ pirminis kodas, skirtas „Delphi“ ir „C++Builder“, be jokių papildomų priklausomybių paleidimo metu (runtime dependencies), išskyrus VCL. „PDFium VCL“ papildomai pateikia „PDFium“ DLL failą, kuris atlieka variklio atvaizdavimo ir analizavimo darbus. Kiekvienos bibliotekos produkto puslapyje pateikiama išsami API dokumentacija ir dabartinė versijų istorija.
Išsami informacija apie kiekvieną biblioteką: „HotPDF“ komponentas, „PDFium VCL“ komponentas ir „PDFlibPas“.