THPDFHeadlessDocument
HPDFHeadlessDocument fournit une API documentaire console pour Linux et Windows natifs en s’appuyant sur le parser d’objets HotPDF existant, les helpers Direct File, les décodeurs de polices, l’interpréteur de contenu, les décodeurs de filtres et le writer xref
Le chargeur de documents accepte les tables de références croisées classiques, les flux xref, les sections xref hybrides, les chaînes Prev incrémentales, les objets directs et compressés, les ressources de pages héritées, les tableaux de contenu, les Form XObjects et les arbres de champs AcroForm
Les flux latéraux hybrides priment sur la table qui les accompagne, et les révisions plus récentes priment sur les plus anciennes ; les membres des object-streams sont décodés et analysés paresseusement via le parser d’objets partagé
Cycle de vie et propriété
Create utilise THPDFHeadlessDocumentOptions.Default, tandis que la surcharge d’options accepte des budgets explicites et un token d’annulation possédé par l’appelant
LoadFromFile ferme le document précédent, ouvre la source en lecture seule, charge le graphe d’objets courant et referme l’état partiel en cas d’échec ; Close libère la source et tous les objets chargés
LoadFromFile(FileName, Password) authentifie les documents Standard AES-256 R5 ou R6 via THPDFHeadlessAES256Security ; la surcharge originale à un argument utilise un mot de passe vide
Les mots de passe utilisateur doivent accorder l’extraction de texte ou le remplissage de formulaires avant l’exécution de ces opérations, tandis que les mots de passe propriétaire contournent les restrictions de permissions utilisateur ; mots de passe erronés, incohérences Perms authentifiées, opérations refusées et charges utiles de chiffrement mal formées ont des diagnostics de document distincts
Les chaînes et flux directs sont déchiffrés via le code cryptographique partagé, les membres compressés sont déchiffrés avec leur seul conteneur, et les remplacements incrémentaux chiffrés restent chiffrés sous les clés et la politique de permissions originales
Les mots de passe utilisent des octets UTF-8 tronqués à 127 octets sans normalisation SASLprep ; les handlers non pris en charge, les filtres Crypt explicites et les politiques PDF MAC sont diagnostiqués plutôt qu’ignorés
Les clés de dictionnaires encodées et les noms de ressources sont décodés avant usage, la casse reste significative et les clés décodées dupliquées sont rejetées ; les drapeaux de champs et MaxLen doivent tenir dans la plage non négative 32 bits prise en charge
Les instances ne sont pas thread-safe ; utilisez une instance par worker et gardez son token d’annulation vivant jusqu’à la destruction de l’instance
Pages et texte
PageCount rapporte le nombre de feuilles de l’arbre de pages ; ExtractPageText(PageIndex) accepte un index à base zéro et renvoie du texte Unicode assemblé par l’interpréteur de glyphes partagé
ExtractPageTextBounded applique des limites temporaires de glyphes et de flux avant la préparation du texte et restaure toutes les options de ressources originales après succès, échec ou annulation
GetObjectAccess expose un accès emprunté en lecture seule au catalogue, aux informations et aux objets avec une allocation d’index bornée pour la comparaison native structurelle et complète
Le décodage du texte suit les encodages de polices, les différences d’encodage, les CMaps ToUnicode embarquées, les largeurs explicites et le fournisseur de métriques de polices standard ; les Form XObjects imbriqués appliquent leurs matrices et utilisent leurs propres dictionnaires de ressources ou hérités
Le fallback de polices standard Linux exige Fontconfig et des polices TrueType installées ; les polices de documents complexes doivent fournir une stratégie de décodage prise en charge, et des ressources de polices manquantes produisent un diagnostic
AppendPageText ajoute du texte Unicode visible ou invisible ajusté tout en conservant le contenu de page original et les politiques de sécurité chiffrées
AppendImportedPages clone les graphes de ressources des pages sélectionnées, la géométrie héritée et les apparences normales visibles tout en préservant les révisions de destination existantes et la politique de chiffrement authentifiée
Valeurs de texte AcroForm
FormFieldCount, GetFormField(FieldIndex) et FindFormField(Name) énumèrent les champs terminaux via des noms fully qualified et les types, drapeaux, longueurs maximales et valeurs hérités ; les indices sont à base zéro et un nom absent renvoie -1
SetTextFieldValue(FieldIndex, Text) accepte les champs Tx inscriptibles, écrit une chaîne PDF UTF-16BE et positionne NeedAppearances=true sur le dictionnaire AcroForm
Cette méthode à valeur seule s’appuie sur la régénération par les viewers ; les viewers qui ne régénèrent pas les apparences peuvent continuer d’afficher une ancienne apparence ou un widget vide
SetTextFieldValueWithAppearance génère des apparences Unicode explicites pour chaque widget existant en utilisant une police TrueType fournie par l’appelant, les métriques de glyphes réelles, l’encodage Identity-H, ToUnicode et un embarquement FontFile2 complet
Le profil d’apparences prend en charge le texte simple ligne et multiligne, le wrap, les cellules comb, les rotations par quarts de tour, la taille fixe ou l’auto-fit, l’alignement et le shaping complexe natif HarfBuzz/FriBidi optionnel
SetChoiceFieldValuesWithAppearance gère les listes à sélection multiple, les options héritées, les tableaux d’export triés et chaque rangée sélectionnée visible ; le helper à valeur unique prend aussi en charge les libellés d’export/affichage des combos
GetChoiceFieldValues lit le tableau complet d’export sélectionné ; SetButtonFieldValueWithAppearance et SetPushButtonAppearance génèrent de vrais états de boutons et des captions
Les nouveaux objets et flux d’apparences sont bornés avant les changements de champs et restent chiffrés sous la politique de sécurité AES originale à la sauvegarde ; Cairo Linux natif et les lecteurs indépendants consomment les mêmes objets générés
Les champs en lecture seule, les valeurs plus longues que MaxLen en unités de code UTF-16, les champs non texte, les formulaires XFA, les champs signés et les permissions de documents certifiés sont rejetés à l’édition
Les documents signés utilisent des politiques DocMDP et FieldMDP authentifiées : les mises à jour de formulaires permises préservent les révisions signées existantes, tandis que les champs verrouillés, les restrictions P1 et les tentatives d’écrasement de champs de signature signés sont rejetés
Les preuves DSS/VRI validées ajoutent des données authentifiées de certificats et de révocation à une révision incrémentale sans modifier les signatures ByteRange existantes
Vérification de signatures
SignatureCount énumère les champs de signature AcroForm signés et VerifySignature(SignatureIndex, Options) valide les signatures à base zéro via le parser partagé et le provider CMS OpenSSL 3 en streaming
Le profil PDF accepte adbe.pkcs7.detached et ETSI.CAdES.detached reconnus automatiquement avec des Contents hexadécimaux ou literal standard ; CAdES authentifie toujours la liaison ESS du certificat signant, tandis que des réglages CA explicites évaluent la confiance séparément
DocTimeStamp avec ETSI.RFC3161 authentifie automatiquement le TSTInfo encapsulé authentique, ESS, l’objet TSA et le nom du signataire, ainsi que l’imprint PDF exact ; les racines d’horodatage et les CRL configurées évaluent séparément la confiance TSA
La vérification valide l’intervalle non signé exact, délimiteurs compris, et lie ses octets décodés au dictionnaire de signature courant avant la vérification cryptographique
Le résultat distingue intégrité, confiance CA explicitement évaluée et octets non signés après la révision authentifiée ; les profils de signatures PDF non pris en charge produisent un diagnostic typé
Voir HPDFVerifyHeadlessCMS pour les prérequis runtime et THPDFHeadlessCMSOptions pour les budgets et réglages de confiance
Signatures d’approbation incrémentales
SignToFile signe un champ Sig existant, inscriptible et non signé et publie un PDF indépendant incrémentalement mis à jour en utilisant un certificat PEM et une clé privée PEM non chiffrée fournis par l’appelant
AddSignatureField crée un widget de page et ses liens AcroForm, y compris un nouvel AcroForm sur un PDF importé brut ; SetSignatureFieldAppearance génère sa caption visible, et SignPFXToFile charge une identité certificat/clé PKCS12 avec sa chaîne
CertificationPermission crée la première signature de certification DocMDP ; P2 et P3 autorisent des signatures d’approbation ultérieures dans les champs existants, tandis que P1 rejette toute signature supplémentaire
Les octets sources originaux et le graphe d’objets chargé restent inchangés ; les signatures d’approbation ultérieures préservent les octets de signatures antérieurs et leurs frontières de révisions authentifiées
Le chiffrement Standard AES-256 R5 et R6, les mots de passe, les IDs et les permissions restent en vigueur, y compris pour les sources object-stream chiffrées ; la chaîne Contents de signature suit l’exemption de chiffrement du PDF
Les valeurs de signatures existantes, les champs en lecture seule, les politiques de documents certifiés, les permissions de remplissage refusées, les tokens d’annulation divergents et les budgets de sortie épuisés sont rejetés sans publier de sortie
Horodatages de documents
TimestampToFile crée un véritable horodatage de document RFC 3161 dans un champ de signature existant non signé, sans clé de signature applicative, en utilisant un transport TSA possédé par l’appelant et une confiance TSA explicite
Le writer préserve les révisions originales et la sécurité AES, déclare l’extension ESIC pour les entrées antérieures à PDF 2.0 et ne publie atomiquement qu’après que les vérifications de nonce, imprint, signature, certificat, révocation configurée et seeds sont passées
Les changements authentifiés nécessaires d’horodatage de document sont permis sous DocMDP et FieldMDP ; les éditions de formulaires ordinaires et les signatures d’approbation conservent leurs restrictions originales
Échange de formulaires FDF et XFDF
ExportAnnotationsFDF exporte des graphes d’objets d’annotations bornés et leurs ressources d’apparence partagées ; SaveAnnotationsFDFToFile prépare des remplacements nommés et des ajouts dans une révision PDF atomique indépendante
Le profil FDF d’annotations binaires préserve le chiffrement et la politique de signature du document authentifié, les références de pages GoTo locales sensibles au contexte et une publication exacte inchangée ; il laisse le document chargé inchangé après la sauvegarde
SaveAnnotationsXFDFToFile ajoute des annotations mappées bornées à une révision incrémentale indépendante ; HPDFExportHeadlessAnnotationsXFDF renvoie leurs octets XFDF
ExportFormData renvoie des données de champs Unicode bornées, y compris les tableaux choice réels et les états d’export checkbox ou radio
ImportFormDataToFile régénère de vraies apparences sur un graphe de révisions authentifié privé et publie atomiquement un PDF incrémental tout en préservant l’état de la source chargée
ImportRichFormDataToFile importe le profil XHTML borné depuis RV de FDF ou value-richtext de XFDF avec de vrais programmes de polices regular, bold, italic et bold-italic
SaveRichTextFieldUpdatesToFile applique champs scalaires et runs rich typés originaux en une seule révision atomique indépendante, en préservant les programmes de polices réels et la précision numérique PDF ; les champs protégés inchangés exigent des apparences décodées et des ressources résolues correspondantes pour chaque widget
Le chiffrement existant, les drapeaux lecture seule, les DocMDP et FieldMDP authentifiés, les signatures originales, l’annulation et les budgets de ressources restent appliqués ; voir Données de formulaires FDF et XFDF natives pour la syntaxe prise en charge et les frontières de l’échange scalaire
Accès de rendu emprunté
GetRenderAccess(PageIndex) fournit le dictionnaire de page existant, les ressources héritées, le résolveur de polices, la résolution d’objets, la vérification de permissions, le token d’annulation et les callbacks bornés de flux décodés via THPDFHeadlessRenderAccess
Il s’agit d’une vue empruntée série en lecture seule ; le document doit rester chargé et inchangé jusqu’à ce que le renderer termine, et les appelants ne doivent pas muter son graphe d’objets exposé
Le callback RequireOutputPath de la vue vérifie une sortie envisagée contre le chemin canonique de la source et l’identité physique du fichier sans créer ni modifier de fichier
Sortie indépendante
ExtractPageGlyphs renvoie des glyphes positionnés via le parcours borné de contenu imbriqué ; AnalyzePageSemanticText fournit le texte sémantique et la géométrie source pour la comparaison native de contrats
SaveToFile(FileName) copie les octets originaux et ajoute les valeurs d’objets de remplacement, une table xref classique et un trailer lié via Prev ; les membres d’objets compressés sont matérialisés en objets directs dans la révision ajoutée, et les octets de flux originaux sont préservés
La sortie ne doit pas être un alias du chemin ou de l’identité du fichier source ; l’écriture utilise un fichier de staging créé exclusivement dans le répertoire de destination, le flush et le publie par renommage atomique
Les échecs de budget, d’annulation ou de sérialisation préservent une destination existante et suppriment le fichier de staging non publié ; la source reste en lecture seule
PDF de revue annotée natif exporte de vrais surlignages Unicode et des apparences visibles avec des permissions d’annotations authentifiées, en conservant le document chargé original et les révisions de signatures
Frontières de format
Le profil courant prend en charge le chiffrement Standard AES-256 R5 et R6, diagnostique explicitement les handlers de sécurité et filtres de flux non pris en charge et rejette les générations d’objets libres retirées que son writer ne peut représenter
Les flux xref bootstrap exigent des valeurs de dictionnaire directes et un Length direct borné ; largeurs mal formées, chevauchements de sous-sections, offsets non signés au-dessus d’Int64, incohérences de membres compressés, cycles de références et limites configurées produisent des diagnostics typés
Le contenu décodé prend en charge les filtres Flate, ASCIIHex, ASCII85 et LZW avec des prédicteurs pris en charge et des longueurs de flux indirectes ; les charges utiles d’images ne sont pas décodées pour l’extraction de texte
Les workflows de signature natifs couvrent champs de signature, apparences visibles et certification ; les politiques de formulaires signés authentifiées et les API d’horodatage et de validation à long terme conservent leurs options explicites d’intégrité et de confiance
Acceptation
Familles de polices rich nommées ajoutent plusieurs vraies familles fournies via SetRichTextFieldValueWithFamilies et ImportRichFormDataWithFamiliesToFile, avec les politiques existantes de champs, de sécurité et de transactions
Les champs rich-text natifs fournissent des runs stylés typés, de vraies apparences de polices de style embarquées, des valeurs V et RV synchronisées, une sortie incrémentale chiffrée et des éditions transactionnelles bornées ; GetRichTextFieldValue lit le XHTML stocké ou hérité
Tests/Linux/Run-HeadlessDocumentTests.sh construit un exécutable ELF natif avec variables de bureau nettoyées et vérifie l’absence de dépendances à des bibliothèques GUI ; Run-HeadlessDocumentTests-Windows.cmd Win32 et Win64 exercent la même API documentaire partagée
Voir THPDFHeadlessFormField, EHPDFHeadlessDocumentError et THPDFHeadlessDiagnosticCode pour les valeurs renvoyées et les diagnostics typés
Suppression d'annotations
Supprimez des annotations de pages par identité exacte de page et de NM Unicode via SaveAnnotationRemovalsToFile, avec cascades de popups et de réponses, préparation bornée et sortie séparée atomique
Le document chargé reste inchangé ; une sélection inchangée copie la révision courante exacte, et la suppression incrémentale conserve les octets historiques