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