Native Linux C ABI
HotPDFLinuxABI.lpr bouwt een native x86_64 ELF shared library genaamd libhotpdf.so.1, met SONAME libhotpdf.so.1 en publieke symbolen toegewezen aan HOTPDF_1.0
De library gebruikt THPDFHeadlessDocument en CPU-rendering zonder een Windows-component, een actieve desktop, een PDF-viewer of een Python-proces tijdens runtime; Python wordt gebruikt door de build- en acceptatiescripts
Build en acceptatie
sh Tests/Linux/Build-LinuxABI.sh
sh Tests/Linux/Run-LinuxABIAcceptance.sh
FPC_EXE=/usr/local/bin/fpc HPDF_LINUX_OUTPUT=Tests/Linux/bin/linux-abi331 sh Tests/Linux/Run-LinuxABIAcceptance.sh
Gebruik native FPC 3.2.2 of nieuwer met FCL en paszlib, een C-compiler, binutils, Fontconfig en installed TrueType-fonts; de acceptatie-Python-omgeving vraagt daarnaast pypdf met diens AES-provider, PyMuPDF, Pillow en NumPy
FPC_EXE, HPDF_LINUX_OUTPUT en PYTHON_EXE kiezen toollocaties; de default acceptatie-Python-omgeving is /opt/hotpdf-python/bin/python
FPC schrijft normaal een anoniem exportblok in diens ELF linker-response; de build benoemt dat blok met de ingecheckte symbolenkaart vóór het linken, want het toevoegen van een tweede benoemde version script zou conflicteren met het anonieme blok
Publieke interface
Include Lib/hotpdf_abi.h voor de gedeelde record-layout en statusconstanten; hpdf_abi_io_v1_size en hpdf_abi_operation_v1_size rapporteren echte native recordgroottes
De Linux-library exporteert ABI-discovery, capability-discovery, documentcreatie en -destructie, callback loading en saving, pagina-telling, hpdf_document_execute_json_v1 en het twee-documenten-hpdf_document_compare_json_v1-entrypoint
Ontdek de huidige operaties via hpdf_capabilities_json_to_io in plaats van de Windows-operatieset aan te nemen
| Operatie | Gedrag |
|---|---|
info | Pagina-, formulier- en signed-field-aantallen |
text.extract | Unicode-paginatekst in JSON en optionele UTF-8-uitvoer, met een optionele zero-based pages-array |
forms.read | Volledig gekwalificeerde veldnamen, Unicode-waarden, complete choice-selecties, types, vlaggen en maximumlengtes |
forms.fill | Transactionele tekst-, choice-, multiselect-, checkbox- en radio-updates, pushbutton-captions, matchende embedded-font-appearances en incrementele PDF-uitvoer |
annotations.export / annotations.import | Begrensde annotation XFDF-uitwisseling met append-transacties, exacte Unicode, binaire streams, popup/reply-referenties, encryptie en geauthenticeerd certification-beleid |
forms.export / forms.import | Begrensde scalar- en rich FDF/XFDF-interchange met vier echte stijlen per geselecteerde geconfigureerde rich-family, versleutelde PDF-transacties, geregenereerde appearances, signature-policies en synchrone gefragmenteerde callbacks |
render | Cairo PNG-uitvoer met pagina, dpi, view- of print-usage, annotatie-options en de default optional-content-configuratie |
sign | Incrementele PEM- of PFX-signing, bestaande of nieuw aangemaakte velden, zichtbare appearances en certification, inclusief geauthenticeerde AES-256 R5/R6-invoer en digest-, metadata-, profiel- en gevalideerde evidence-options |
signatures.verify | Echte CMS-verificatie, signed-revisie-lengtes, optionele expliciete CA-trust-evaluatie en validatie van signed revocation-informatie |
compare / compare.contract | Two-handle page-count-, page-text-, object-count-, rendered-image-, structural- en full-vergelijking, plus semantische contractvergelijking met voorbereide JSON-, HTML- of geannoteerde PDF-review-uitvoer |
{"schemaVersion":1,"type":"render","page":0,"dpi":150,"usage":"print","annotations":false,
"limits":{"memoryBytes":268435456,"outputBytes":268435456,"pixels":100000000}}
Native signing-workflows accepteren een expliciete PEM- of Base64-PFX-identiteit, optionele nieuwe signature-velden en Unicode-appearances, en certification-permissions; geslaagde signing vervangt de geladen context door de voorbereide signed revisie, terwijl gefaalde signing of publicatie de oorspronkelijke context behoudt
Native signing-options binden echte SHA256-, SHA384- of SHA512-selectie, Unicode-signature-informatie, legal attestation, expliciete trust-bytes, gevalideerd signed revocation-bewijs, echte appearance-presets en door de applicatie geclaimde credential- of timestamp-transport-provenance
De optionele optional-content viewer state levert expliciete automatische View-, Print- of Export-usage-toepassingen, zoom, taal, gebruikerscontext en operation-lokale handmatige selecties via ongewijzigde V1-records
De render-operatie accepteert usage: "view" of usage: "print", defaultend naar view; ontdek de keuzes via de capability renderUsages-array, met ongewijzigde V1-callback- en operation-records
Annotation screen- en print-vlaggen volgen de gekozen usage; annotations: false onderdrukt annotaties in beide modi, en de default optional-content-configuratie geldt voor pagina-, XObject- en annotatie-content zonder interactieve viewer-usage-toepassingen uit te voeren
Tests/Linux/Run-LinuxABIRenderUsage.sh verifieert echte PNG-pixels voor plain- en AES R5/R6-bronnen, default-off content, callback-fouten, budgetten, annulering en same-handle-herstel; zie Tests/Linux/HeadlessRenderUsage.en-us.md voor fixture-dependencies en de optionele pre-gegenereerde fixture-directory
Callbacks en levensduur
Form appearance-options accepteren Unicode-tekst, exportwaarden of complete selectie-arrays, expliciete button-statussen, fontinstellingen en transactionele resourcelimieten
Read- en write-callbacks mogen partiele transfers teruggeven; geslaagde transfers moeten positieve voortgang maken en mogen het gevraagde aantal niet overschrijden
Alle callbacks draaien synchroon op de aanroepende thread, inclusief annuleringschecks binnen documentparsing, rendering en cryptografische checkpoints
Callback-invoer wordt gekopieerd naar een exclusief aangemaakt privé-tijdelijk bestand met mode 0600, dus Linux-invoer-callbacks en diens user data hoeven alleen geldig te blijven tot de load- of execute-aanroep terugkeert
Operaties op een gedeelde document-handle serialiseren intern; elke actieve aanroep houdt een onafhankelijke referentie vast, dus een handle uit een progress-callback vernietigen invalideert daaropvolgende opzoek terwijl de huidige aanroep veilig kan afronden
Voer niet recursief een andere operatie op dezelfde handle uit vanuit diens callback; houd de shared library geladen tot alle aanroepen zijn teruggekeerd en elke handle is vernietigd
Budgetten en publicatie
JSON-invoer is begrensd op 4 MiB en 64 nesting-niveaus en verwerpt ongeldige UTF-8, dubbele leden, misvormde numerieke limieten en Int64-naar-Int32-parameter-afkapping
Raw UTF-8 en Unicode-escapes dragen dezelfde stringwaarden, inclusief supplementary characters gerepresenteerd door geldige UTF-16-surrogate pairs; ongepaarde surrogate-escapes falen vóór documentmutatie of binaire publicatie
Operation-limieten omvatten memoryBytes, outputBytes, resultBytes en pixels; documentlimieten gelden ook voor eerder geladen handles, terwijl managed memory- en rendering-limieten geen proces-RSS-cap garanderen
PDF- en PNG-uitvoer is volledig voorbereid en gecheckt voordat output-callbacks beginnen; een output-callback in caller-eigendom kan een partiele transfer vasthouden na diens eigen I/O-fout, maar gefaalde binary- of resultaatpublicatie commit geen formulierbewerkingen en vervangt geen eerder geladen context
Geslaagde PDF-mutaties committen de voorbereide uitvoer als zowel het huidige document als diens privé-bron-snapshot, dus een daaropvolgende FDF- of XFDF-import met dezelfde waarde geeft de exacte gecommitte PDF-bytes terug met updated=0, met behoud van eerdere formulierinvullingen, getypeerde rich-appearances, getekende tekst en geïmporteerde pagina's
Privé staging-bestanden worden verwijderd wanneer de context wordt vervangen of vernietigd; geslaagde incrementele formulier- en signature-uitvoer behoudt de oorspronkelijke bronprefix en het encryptiebeleid
Bewijs
Optionele archival font repair zet begrensde Ghostscript-substitutie en -embedding aan met echte PDF/A-4-validatie vóór callbacks
Native annotated review PDF voegt echte voorbereide PDF-uitvoer, Unicode-highlights en geauthenticeerde P3-annotatiepermissions toe aan semantische vergelijking
Native contract comparison levert begrensde two-handle-semantische vergelijking, Unicode-review-HTML en echte bronregel-geometrie
Algemene native documentvergelijking normaliseert objectgrafen en stream-encoding, vergelijkt echte Cairo-pixels met expliciete drempels en behoudt documentstatus en callback-publicatiebudgetten
De acceptatie-client verifieert echte C header-layouts en versioned symbol-lookup, partiele callbacks, 80 concurrende shared-handle-operaties, annulering, Unicode-bewerkingen, rollback en versleutelde signing
Onafhankelijke pypdf-, MuPDF- en OpenSSL-readers verifiëren de echte PDF's, PNG-pixels, behouden wachtwoorden, security-dictionaries, document-ID's, exacte ByteRange-gaps, geldige signatures en rejectie van gewijzigde signed bytes
Headless document API · Native rendering · Remaining delivery plan