Tri knižnice. Tri odlišné úlohy. Voľba nesprávnej vás stojí týždne obíśania, a voľba všetkých troch, keď potrebujete len jednu, vás stojí prevádzkovú réžiu, ktorú ste neplánovali. Tu je priamy prehľad toho, čo každá knižnica PDF od losLab skutone robí, kde sa hodí a kde odovzdáva štatafetu svojim súrodencom.
HotPDF: tvorba PDF od nuly v Delphi
HotPDF je natívny komponent VCL na generovanie dokumentov PDF. Jeho model je imperatívny a stránkocentrický: vytvoríte inštanciu THotPDF, nastavíte vlastnosti dokumentu, zavoláte BeginDoc, kreslíte na CurrentPage, pridávate stránky podľa potreby a zatvoríte pomocou EndDoc. Poradie je dôležité, pretože BeginDoc uloží slovník šifrovania a nastavenia kompresie v okamihu spustenia; čokoľvek priradené po tomto bode sa ticho ignoruje namiesto spätnej aplikácie.
Kresliaci povrch pokrýva celý operátorský set PDF na úrovni Delphi: TextOut pre pozicionóvaný text Unicode, SetFont s vklaním TrueType, vektorové primitívy (čiary, Bezierove krivky, elipsy, obdľžniky), umiestovanie obrázkov zo súboru alebo pamäte a generovanie čiarových kódov. Súradnice sú v bodoch od ľavého dolného rohu s Y rastúcim nahor, čo zachytí každého aspoň raz. Stav písma neprežije AddPage, takže volaní SetFont je potrebné po každom zalamani strany.
Polia AcroForm sú plnopráavnymi občanmi. Môžete pridať textové poličká, zaškrtávacie poličká, rádiové tlačidlá, combo boxy, zoznamy a tlačidlá priamo k objektu strany jedným volaním. HotPDF môže tiež načítať existujúci PDF cez LoadFromFile a vypľňať alebo čítať hodnoty polí, čo ho robí užitočným v dvoch oddelených pracovných postupoch: budovanie formulárov a automatizácia ich vypľňania.
Šifrovanie sa tiež rieši na úrovni dokumentu. CryptKeyLength vyberie schému (40-bitový RC4 cez AES-256), ActivateProtection ho aktivuje a ProtectOptions nastaví príznaky povolení ISO. Dva režimy revízie AES-256 (R5 a R6, riadené pomocou UseAES256R6) existujú preto, že revízia 6 opravuje známu slabinu revízie 5, ale vyžaduje prehliad ač schopný PDF 2.0; voľba medzi nimi je rozhodnutím o kompatibilite, nie o pohodlí.
Podpora digitálnych podpisov v HotPDF pokrýva základné profily PAdES, takže je vhodná pre pracovné postupy, kde podpis musí spľňať požiadavky ETSI EN 319 142. Ak vašou potrebou je iba generovanie výstupu, HotPDF je knižnica, po ktorú treba siahnuť ako prvú.
PDFium VCL: vykresľovanie, zobrazovanie a čítanie existujúcich PDF
PDFium VCL zabali motor Google PDFium ako komponent VCL, čo mu dáva zásadne odlišnú úlohu od HotPDF. Kde HotPDF píše, PDFium VCL číta a vykresľuje. Jadrovým objektom je TPdf, správca dokumentov, ktorý otvorí súbor nastavením FileName a potom Active := True. Neúspešné načítanie sa nevyvolávajú ako výnimky; Active jednoducho zostane False, takže jeho kontrola po priradení nie je voliteľná.
Vykresľovanie prebeží cez TPdfView, vizuálny komponent, ktorý umiestujete na formulár a prepájate s inštanciou TPdf cez PdfView.Pdf := Pdf. Zoom a režim prispôsobenia sú na pohľade, nie na dokumente. Jedno jemné úskalie: Pdf.PageNumber a PdfView.PageNumber sú nezávislé vlastnosti. Nastavenie jednej neaktualizuje druhú a API extrakcie založené na pohľade (slovné boxy, čítacie jednotky) používajú aktuálnu stranu pohľadu, nie dokumentu.
Extrakcia textu je miestom, kde PDFium VCL nemá priaú konkurenciu v portfóliu losLab. ReadablePageContent vráti štruktúrovaný text s uvedomením si poradia čítania, PageWordBoxes dáva ohrádné obdľžniky na úrovni slov a DocumentReadingUnits prechádza celým dokumentom. Pre prácu s prístupnosťou IsTagged hovorí, či je prítomný strom štruktúry, a ValidatePdfUa spustí kontrolu súladu s UA. Tieto API robí z PDFium VCL prirodzenú voľbu pre akýkoľvek pracovný postup, ktorý potrebuje pochopiť, čo je vo vnútri existujúceho PDF, nie vytvoriť nový.
Vypľňanie formulárov funguje aj na strane PDFium, cez rovnakú vrstvu AcroForm, ktorú vystavuje podkladový motor. Je to vhodné vtedy, keď zdrojový dokument už existuje a automatizujete jeho vypľňanie namiesto toho, aby ste sami vytvárali polia formulára.
PDFlibPas: manipulácia, súladové podpisovanie a priamy prístup k súborom
PDFlibPas (verzia 3.73.0) sa nachádza na opačnom konci spektra zložitosti. Vystavuje tri vrstvy API nad rovnakým modelom dokumentu: ploché rozhranie založené na identifikátoroch (TPDFlib) kompatibilné s volávacou konvenciou Quick-PDF, plnú vrstvu objektového stromu (TPDFDocument) a streamingový analýzátor (TSmartPDFReader / TSmartPDFWriter), ktorý pracuje priamo na bajtoch súboru bez načítania celého objektového grafu.
Streamingová vrstva je to, čo robí z PDFlibPas správnu voľbu pre veľké dokumenty. TSmartPDFWriter môže pripojiť inkrementálnu aktualizáciu k súboru na disku bez rekonštrukcie celej tabuľky križových odkazov, čo je mechanizmus podkladajúci efektívne uloženie aj pečiatky dlhodobej platnosti PAdES. Pre pracovné postupy podpisovania triedy súladu, kde podpísaný hash musí pokrývať konkrétny rozsah bajtov a podpis je aplikovaný bez prepisu dokumentu, je táto vrstva jediná prichodzia cesta.
Manipulácia dokumentu na úrovni TPDFDocument zahrňa zlúčenie pomocou Merge, selektívne kopírovanie strán cez CopyPagesFromDoc s ret äzcom rozsahu a riadenie verzie cez SetMinimumVersion a LockSaveVersion. Zámok verzie vyvolá chybu 602, ak sa pokúsite uložiť funkciu, ktorá by posunula výstup nad zablokovanú verziu, čo je užitočné, keď potrebujete garantovať, že výstup zostane v rámci konkrétnej revízie PDF pre archivačnú súladnosť.
Podpora PDF/A (ISO 19005) sídlí v pracovnej stanici súladnosti PDFlibPas. Poznámka: šifrovanie a PDF/A sú definíciou vzájomne vylúčujúce: v jednom súbore nemôžete mať obe. Pracovné postupy, ktoré potrebujú šifrovanú distribučnú kópiu a archivnú kópiu PDF/A, musia vytvoriť dva oddelené artefakty.
Voľba medzi nimi
Typický rozhodovací strom je krátky. Ak generujete nový dokument z dát, použite HotPDF. Ak vykresľujete alebo extrahujete text z existujúceho dokumentu v aplikácii Delphi VCL, použite PDFium VCL. Ak manipulujete, zlučujete alebo súladovo podpisujete existujúce PDF vo veľkom meradle alebo s inkrementálnou sémantikou ukladania, použite PDFlibPas. Mnohé produkné systémy používajú dve z troch: HotPDF na generovanie výstupu a PDFlibPas na aplikáciu pečiatky dlhodobej platnosti pred archivovaním, napríklad, alebo PDFium VCL na náhľad toho, čo HotPDF vyprodukovalo pred odoslaním.
Všetky tri sú dodávané ako natívny zdrojový kód Pascal pre Delphi a C++Builder, bez závislostí za behu okrem VCL. PDFium VCL naviac bundluje DLL PDFium, ktoré pokrýva vykreslovaciu a analýzátorovu prácu motora. Stránka produktu každej knižnice nesie jej celú referenciu API a aktuálnu históriu verzií.
Podrobnosti o jednotlivých knižniciach: Komponent HotPDF, Komponent PDFium VCL a PDFlibPas.