Teknisk artikel

losLab PDF-biblioteker til Delphi: HotPDF, PDFium Component og PDFlibPas sammenlignet

Tre biblioteker. Tre forskellige opgaver. At vælge det forkerte koster dig ugevis af løsninger, og at vælge alle tre, når du kun har brug for et, koster dig vedligeholdelse, du ikke havde budgetteret med. Her er en direkte redegørelse for, hvad hvert losLab PDF-bibliotek faktisk gør, hvor det passer ind, og hvor det overlader til sine søskende

HotPDF: skrivning af PDF fra bunden i Delphi

HotPDF er en indbygget VCL-komponent til at generere PDF-dokumenter. Dens model er imperativ og sidecentreret: du konstruerer en THotPDF-instans, indstiller dokumentegenskaber, kalder BeginDoc, tegner til CurrentPage, tilføjer sider efter behov og lukker med EndDoc. Rækkefølgen betyder noget, fordi BeginDoc forpligter krypteringsordbogen og komprimeringsindstillinger i det øjeblik, den kører; alt tildelt efter det punkt ignoreres stille i stedet for at blive anvendt med tilbagevirkende kraft

Tegneoverfladen dækker det fulde PDF-operatørsæt på Delphi-niveau: TextOut til positioneret Unicode-tekst, SetFont med TrueType-indlejring, vektorprimitiver (linjer, Bezier-kurver, ellipser, rektangler), billedplacering fra fil eller hukommelse og stregkodegenerering. Koordinater er i punkter fra nederste venstre hjørne, hvor Y stiger opad, hvilket fanger alle på et tidspunkt. Skrifttypetilstand overlever ikke AddPage, så et opkald til SetFont er påkrævet efter hvert sideskift

AcroForm-felter er førsteklasses borgere. Du kan tilføje tekstfelter, afkrydsningsfelter, alternativknapper, kombinationsbokse, listebokse og trykknapper direkte til et sideobjekt med et enkelt opkald hver. HotPDF kan også indlæse en eksisterende PDF via LoadFromFile og udfylde eller læse feltværdier, hvilket gør den nyttig i to separate arbejdsgange: at bygge formularer og automatisere deres udfyldelse

Kryptering håndteres også på dokumentniveau. CryptKeyLength vælger ordningen (40-bit RC4 til AES-256), ActivateProtection aktiverer den, og ProtectOptions indstiller ISO-tilladelsesflagene. De to AES-256-revisionsfunktioner (R5 og R6, styret af UseAES256R6) eksisterer, fordi revision 6 retter en kendt svaghed i revision 5, men kræver en PDF 2.0-kompatibel fremviser; at vælge mellem dem er en kompatibilitetsbeslutning, ikke en bekvemmelighedsbeslutning

Support for digitale signaturer i HotPDF dækker PAdES-baselineprofilerne, så den er velegnet til arbejdsgange, hvor signaturen skal opfylde ETSI EN 319 142-kravene. Hvis dit behov kun er at generere output, er HotPDF det bibliotek, du skal gribe efter først

PDFium Component: gengivelse, visning og læsning af eksisterende PDF'er

PDFium Component indpakker Googles PDFium-motor som en VCL-komponent, hvilket giver den en fundamentalt anden rolle end HotPDF. Hvor HotPDF skriver, læser og gengiver PDFium Component. Kerneobjektet er TPdf, en dokumentmanager, der åbner en fil ved at indstille FileName og derefter Active := True. Indlæsningsfejl rejses ikke som undtagelser; Active forbliver simpelthen False, så det er ikke valgfrit at tjekke det efter tildelingen

Gengivelse kører gennem TPdfView, en visuel komponent, du slipper på en formular og forbinder til en TPdf-instans via PdfView.Pdf := Pdf. Zoom og tilpasningstilstand lever i visningen, ikke i dokumentet. En spidsfindighed, der spænder ben for folk: Pdf.PageNumber og PdfView.PageNumber er uafhængige egenskaber. Indstilling af den ene opdaterer ikke den anden, og de visningsbaserede ekstraktions-API'er (ordbokse, læseenheder) bruger visningens aktuelle side, ikke dokumentets

Tekstekstraktion er der, hvor PDFium Component ikke har nogen direkte konkurrent i losLab-sortimentet. ReadablePageContent returnerer struktureret tekst med opmærksomhed på læserækkefølge, PageWordBoxes giver begrænsningsrektangler på ordniveau, og DocumentReadingUnits gennemgår hele dokumentet. Til tilgængelighedsarbejde fortæller IsTagged dig, om et strukturtræ er til stede, og ValidatePdfUa kører en UA-overensstemmelseskontrol. Disse API'er gør PDFium Component til det naturlige valg for enhver arbejdsgang, der skal forstå, hvad der er inde i en eksisterende PDF snarere end at producere en ny

Udfyldning af formularer fungerer også på PDFium-siden via det samme AcroForm-lag, som den underliggende motor afslører. Det er passende, når kildedokumentet allerede eksisterer, og du automatiserer dets fuldførelse i stedet for selv at konstruere formularfelterne

PDFlibPas: manipulation, compliance-signering og direkte filadgang

PDFlibPas (version 3.73.0) sidder i den anden ende af kompleksitetsspektret. Den afslører tre API-lag oven på den samme dokumentmodel: en flad håndtagsbaseret facade (TPDFlib) kompatibel med Quick-PDF-kaldskonventionen, et fuldt objekttræslag (TPDFDocument) og en streaming-parser (TSmartPDFReader / TSmartPDFWriter), der opererer direkte på filbytes uden at indlæse den komplette objektgraf

Streaming-laget er det, der gør PDFlibPas til det rigtige valg for store dokumenter. TSmartPDFWriter kan tilføje en trinvis opdatering til en fil på disken uden at rekonstruere hele krydsreferencetabellen, hvilket er mekanismen bag både effektiv gengemning og PAdES langsigtede valideringsstempler. For signaturarbejdsgange af compliance-kvalitet, hvor den signerede hash skal dække et bestemt byte-område, og signaturen anvendes uden at omskrive dokumentet, er dette lag den eneste levedygtige vej

Dokumentmanipulation på TPDFDocument-niveau inkluderer fletning med Merge, selektiv sidekopiering via CopyPagesFromDoc med en områdestreng og versionsstyring gennem SetMinimumVersion og LockSaveVersion. Versionslåsen rejser fejl 602, hvis du forsøger at gemme en funktion, der vil skubbe outputtet over den låste version, hvilket er nyttigt, når du skal garantere, at outputtet forbliver inden for en bestemt PDF-revision for arkivoverholdelse

PDF/A-understøttelse (ISO 19005) sidder i PDFlibPas' conformance workbench. Bemærk, at kryptering og PDF/A udelukker hinanden i henhold til specifikationen: du kan ikke have begge dele i en fil. Arbejdsgange, der har brug for en krypteret distributionskopi og en PDF/A-arkivkopi, skal producere to separate artefakter

At vælge mellem dem

Det typiske beslutningstræ er kort. Hvis du genererer et nyt dokument fra data, skal du bruge HotPDF. Hvis du gengiver eller udtrækker tekst fra et eksisterende dokument i en Delphi VCL-applikation, skal du bruge PDFium Component. Hvis du manipulerer, fletter eller compliance-signerer eksisterende PDF'er i stor skala eller med trinvis gem-semantik, skal du bruge PDFlibPas. Mange produktionssystemer bruger to af de tre: HotPDF til at generere output og PDFlibPas til at anvende et langsigtet valideringsstempel til det før arkivering, for eksempel, eller PDFium Component til at forhåndsvise, hvad HotPDF producerede, før det sendes nedstrøms

Alle tre leveres som indbygget Pascal-kildekode til Delphi og C++Builder, uden runtime-afhængigheder ud over VCL. PDFium Component bundter derudover PDFium DLL, som dækker motorens gengivelses- og parsing-arbejde. Hvert biblioteks produktside indeholder dets fulde API-reference og aktuelle versionshistorik

Detaljer om de enkelte biblioteker: HotPDF Component, PDFium Component og PDFlibPas