Tre bibliotek. Tre distinkta jobb. Att välja fel kostar dig veckor av tillfälliga lösningar (workarounds), och att välja alla tre när du bara behöver ett kostar dig underhållsomkostnader du inte budgeterat för. Här är en direkt redogörelse för vad varje losLab PDF-bibliotek faktiskt gör, var det passar in och var det lämnar över till sina syskon
HotPDF: att skriva PDF från grunden i Delphi
HotPDF är en inbyggd (native) VCL-komponent för att generera PDF-dokument. Dess modell är imperativ och sidcentrerad: du konstruerar en THotPDF-instans, ställer in dokumentegenskaper, anropar BeginDoc, ritar på CurrentPage, lägger till sidor efter behov och stänger med EndDoc. Ordningen spelar roll eftersom BeginDoc fastställer krypteringsordboken och komprimeringsinställningarna i det ögonblick det körs; allt som tilldelas efter den punkten ignoreras tyst snarare än att tillämpas retroaktivt
Ritytan täcker hela uppsättningen av PDF-operatörer på Delphi-nivå: TextOut för positionerad Unicode-text, SetFont med inbäddning av TrueType, vektorprimitiver (linjer, Bezier-kurvor, ellipser, rektanglar), bildplacering från fil eller minne och streckkodsgenerering. Koordinaterna är i punkter från det nedre vänstra hörnet med Y ökande uppåt, vilket lurar alla någon gång. Typsnittstillståndet överlever inte AddPage, så ett anrop till SetFont krävs efter varje sidbrytning
AcroForm-fält är förstklassiga medborgare. Du kan lägga till textfält, kryssrutor, radioknappar, kombinationsrutor, listrutor och tryckknappar direkt till ett objekt med ett enda anrop vardera. HotPDF kan också ladda en befintlig PDF genom LoadFromFile och fylla i eller läsa fältvärden, vilket gör det användbart i två separata arbetsflöden: att bygga formulär och att automatisera ifyllandet av dem
Kryptering hanteras också på dokumentnivå. CryptKeyLength väljer schema (40-bitars RC4 till AES-256), ActivateProtection aktiverar det och ProtectOptions ställer in ISO-behörighetsflaggorna. De två AES-256-revisionslägena (R5 och R6, styrda av UseAES256R6) finns eftersom revision 6 åtgärdar en känd svaghet i revision 5 men kräver en PDF 2.0-kapabel läsare; att välja mellan dem är ett kompatibilitetsbeslut, inte ett bekvämlighetsbeslut
Stödet för digitala signaturer i HotPDF täcker PAdES baslinjeprofiler, så det är lämpligt för arbetsflöden där signaturen måste uppfylla kraven i ETSI EN 319 142. Om ditt enda behov är att generera utdata är HotPDF det bibliotek du bör sträcka dig efter först
PDFium-komponent: rendering, visning och läsning av befintliga PDF-filer
PDFium Component omsluter Googles PDFium-motor som en VCL-komponent, vilket ger den en i grunden annorlunda roll än HotPDF. Där HotPDF skriver, läser och renderar PDFium-komponenten. Kärnobjektet är TPdf, en dokumenthanterare som öppnar en fil genom att ställa in FileName och sedan Active := True. Laddningsfel höjs inte som undantag (exceptions); Active förblir helt enkelt False, så att kontrollera det efter tilldelningen är inte valfritt
Rendering körs genom TPdfView, en visuell komponent du släpper på ett formulär och länkar till en TPdf-instans via PdfView.Pdf := Pdf. Zoom och anpassningsläge ligger på vyn, inte på dokumentet. En subtilitet som snubblar till det för folk: Pdf.PageNumber och PdfView.PageNumber är oberoende egenskaper. Att ställa in den ena uppdaterar inte den andra, och de vybaserade extraherings-API:erna (ordrutor, läsenheter) använder vyns aktuella sida, inte dokumentets
Textutvinning är där PDFium Component inte har någon direkt konkurrent i losLabs sortiment. ReadablePageContent returnerar strukturerad text med medvetenhet om läsordning, PageWordBoxes ger avgränsande rektanglar på ordnivå och DocumentReadingUnits går igenom hela dokumentet. För tillgänglighetsarbete berättar IsTagged för dig om ett strukturträd är närvarande och ValidatePdfUa kör en UA-efterlevnadskontroll. Dessa API:er gör PDFium Component till det naturliga valet för alla arbetsflöden som behöver förstå vad som finns inuti en befintlig PDF snarare än att producera en ny
Formulärifyllning fungerar också på PDFium-sidan, genom samma AcroForm-lager som den underliggande motorn exponerar. Det är lämpligt när källdokumentet redan finns och du automatiserar färdigställandet av det snarare än att konstruera formulärfälten själv
PDFlibPas: manipulation, efterlevnadssignering och direktfilåtkomst
PDFlibPas (version 3.73.0) sitter i andra änden av komplexitetsspektrumet. Det exponerar tre API-lager ovanpå samma dokumentmodell: en platt handtagsbaserad fasad (TPDFlib) kompatibel med Quick-PDF-anropskonventionen, ett fullständigt objektträdslager (TPDFDocument) och en strömmande tolk (TSmartPDFReader / TSmartPDFWriter) som opererar direkt på filbyten utan att ladda hela objektgrafen
Det strömmande lagret är det som gör PDFlibPas till det rätta valet för stora dokument. TSmartPDFWriter kan lägga till en inkrementell uppdatering till en fil på disk utan att rekonstruera hela korsreferenstabellen, vilket är mekanismen som ligger till grund för både effektiv återskrivning och PAdES-långtidsvalideringsstämplar. För arbetsflöden med signering på efterlevnadsnivå (compliance-grade) där den signerade hashen måste täcka ett specifikt byteintervall och signaturen appliceras utan att dokumentet skrivs om, är detta lager den enda gångbara vägen
Dokumentmanipulation på TPDFDocument-nivån inkluderar sammanslagning med Merge, selektiv sidkopiering via CopyPagesFromDoc med en intervallsträng och versionsstyrning via SetMinimumVersion och LockSaveVersion. Versionslåset höjer fel 602 om du försöker spara en funktion som skulle pressa utdata över den låsta versionen, vilket är användbart när du behöver garantera att utdata stannar inom en specifik PDF-revision för arkiveringsefterlevnad
Stödet för PDF/A (ISO 19005) sitter i PDFlibPas efterlevnadsarbetsbänk (conformance workbench). Observera att kryptering och PDF/A utesluter varandra enligt specifikationen: du kan inte ha båda i en fil. Arbetsflöden som behöver en krypterad distributionskopia och en PDF/A-arkivkopia måste producera två separata artefakter
Att välja mellan dem
Det typiska beslutsträdet är kort. Om du genererar ett nytt dokument från data, använd HotPDF. Om du renderar eller extraherar text från ett befintligt dokument i en Delphi VCL-applikation, använd PDFium Component. Om du manipulerar, slår samman eller utför efterlevnadssignering av befintliga PDF-filer i stor skala eller med inkrementell spar-semantik, använd PDFlibPas. Många produktionssystem använder två av de tre: HotPDF för att generera utdata och PDFlibPas för att applicera en stämpel för långtidsvalidering på den innan arkivering, till exempel, eller PDFium Component för att förhandsgranska vad HotPDF producerade innan det skickas vidare nedströms
Alla tre levereras som inbyggd Pascal-källkod för Delphi och C++Builder, utan körtidsberoenden bortom VCL. PDFium Component buntar dessutom in PDFium-DLL:en, som täcker motorns renderings- och tolkningsarbete. Varje biblioteks produktsida innehåller dess fullständiga API-referens och aktuella versionshistorik
Detaljer om de enskilda biblioteken: HotPDF Component, PDFium Component, och PDFlibPas