Troubleshooting

Troubleshooting

Cette page regroupe les correctifs pour les problèmes les plus courants rencontrés dans Aspose.PDF FOSS pour les API de signature, d’annotation, de rédaction, de dessin, de conversion et de texte de TypeScript.

Les méthodes asynchrones (Sign, Certify, VerifySignatures) semblent ne rien faire

Document.Sign(), Document.Certify() et Document.VerifySignatures() renvoient tous un Promise. Appeler l’un d’eux sans await permet à l’exécution de continuer immédiatement — un doc.WriteTo() ou doc.Save() suivant peut s’exécuter avant que la signature ne soit réellement écrite, et un console.log() suivant sur le résultat de la vérification enregistre un Promise non résolu au lieu du tableau SignatureReport[] :

// Wrong — WriteTo can race ahead of Sign:
approving.Sign(identity, opts);
approving.WriteTo('signed.pdf');

// Correct:
await approving.Sign(identity, opts);
approving.WriteTo('signed.pdf');

Voir le Security guide pour le flux complet certifier-puis-signer.

SearchAnnotationText() et SearchAnnotations() renvoient des résultats différents pour le même texte

Ces deux méthodes de recherche sont disjointes dans les deux sens sur la même page. SearchAnnotationText() correspond aux métadonnées d’annotation littérales (/Contents, /T, /Subj); SearchAnnotations() correspond au rendered texte généré par l’apparence propre d’une annotation de balisage (par exemple un FreeText corps). Une valeur stockée uniquement dans /Contents est trouvée par l’un et manquée par l’autre:

const metadataHits = page.SearchAnnotationText('confidential'); // matches /Contents, /T, /Subj
const renderedHits = page.SearchAnnotations('confidential');    // matches rendered markup text

Aucune des deux méthodes ne recherche le texte ordinaire de la page — utilisez Page.GetText() or Page.Search() pour cela. Voir le Annotations guide pour l’annotation complète API.

Une marque de rédaction seule ne supprime pas le contenu

Page.AddRedact() ne dessine qu’un RedactAnnotation sur une région — le contenu en dessous reste intact et reste sélectionnable pour copier jusqu’à Page.ApplyRedactions() s’exécute et réécrit de manière destructive le flux de contenu. Les marques ajoutées after ApplyRedactions() a déjà été exécuté, reste non appliqué indéfiniment :

page.AddRedact({ rect: [216, 548, 460, 566], fill: [0, 0, 0], overlayText: '[REDACTED]' });
page.ApplyRedactions(); // only now is the content actually destroyed

Voir le Redaction guide pour les détails mark-vs-apply et la rédaction de recherche de texte.

Les appels de dessin PageGraphics n’apparaissent jamais sur la page

Page.Graphics() renvoie un PageGraphics qui met en mémoire tampon chaque appel moveTo()/rect()/circle()/stroke()/fill() jusqu’à ce que apply() les valide sur la page. Une séquence qui manque son appel apply() ne dessine rien :

const g = page.Graphics();
g.setStrokeColor([0.2, 0.2, 0.2]).setLineWidth(1).rect(80, 300, 200, 100).stroke();
g.apply(); // required — nothing above is visible without this call

Voir le Images guide pour le dessin complet et la couche de contenu optionnel API.

Document.ToHtml() et le marquage manuel dépendent tous deux d’un arbre de structure

Le mode sémantique Document.ToHtml() reformate le contenu en parcourant l’arbre de structure; sur un document non balisé, il revient silencieusement à un corps heuristique et l’exportation perd sa structure de titres. Le même arbre est celui dans lequel le marquage manuel (StructTreeRoot.Append() / StructElement.MarkContent()) écrit et que Document.GetStructTree() renvoie — appelez Document.CreateStructTree() ou Document.AutoTag() avant l’un ou l’autre:

const root = doc.GetStructTree();
if (!root) throw new Error('document is not tagged yet');

Voir le Conversion and Structure guides pour les APIs d’exportation et de marquage respectivement.

AddTextBlock() coupe silencieusement le texte à son rectangle englobant

Page.AddTextBlock(text, rect, options) enroule le texte à l’intérieur de rect et renvoie tout ce qui n’a pas tenu (ou null si tout a tenu) — il n’agrandit pas le rectangle et ne génère pas d’exception lorsque le contenu déborde. Une valeur de retour qui est ignorée signifie que le texte en dépassement n’est simplement jamais dessiné :

const rest = page.AddTextBlock(longText, [72, 600, 200, 150], { fontSize: 11 });
if (rest) page.AddTextBlock(rest, [300, 600, 200, 150]); // route the overflow somewhere

Voir le Text guide pour le placement complet du texte et l’extraction API.

Voir aussi

 Français