Troubleshooting
Αυτή η σελίδα συγκεντρώνει διορθώσεις για τα πιο κοινά προβλήματα που προκύπτουν σε όλο το Aspose.PDF FOSS για τις API υπογραφής, σχολιασμού, διαγραφής, σχεδίασης, μετατροπής και κειμένου του TypeScript.
Οι ασύγχρονες μέθοδοι (Sign, Certify, VerifySignatures) φαίνεται να μην κάνουν τίποτα
Document.Sign(), Document.Certify() και Document.VerifySignatures() επιστρέφουν όλα ένα Promise. Η κλήση ενός χωρίς await επιτρέπει στην εκτέλεση να συνεχιστεί αμέσως — ένα επόμενο doc.WriteTo() ή doc.Save() μπορεί να εκτελεστεί πριν η υπογραφή έχει γραφτεί πραγματικά, και ένα επόμενο console.log() στο αποτέλεσμα επαλήθευσης καταγράφει ένα ανεπίλυτο Promise αντί για τον πίνακα 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');Δείτε το Security οδηγό για τη πλήρη ροή πιστοποίησης-και-υπογραφής.
SearchAnnotationText() και SearchAnnotations() επιστρέφουν διαφορετικά αποτελέσματα για το ίδιο κείμενο
Αυτές οι δύο μέθοδοι αναζήτησης είναι διακριτές και στις δύο κατευθύνσεις στην ίδια σελίδα. SearchAnnotationText() ταιριάζει κυριολεκτικά με τα μεταδεδομένα της σημείωσης (/Contents, /T, /Subj); SearchAnnotations() ταιριάζει με το rendered κείμενο που σχεδιάζεται από τη δική της εμφάνιση μιας σημείωσης μορφοποίησης (για παράδειγμα ένα FreeText σώμα). Μια τιμή που αποθηκεύεται μόνο σε /Contents βρίσκεται από το ένα και παραλείπεται από το άλλο:
const metadataHits = page.SearchAnnotationText('confidential'); // matches /Contents, /T, /Subj
const renderedHits = page.SearchAnnotations('confidential'); // matches rendered markup text
Κανένας από τους δύο τρόπους δεν αναζητά το κανονικό κείμενο της σελίδας — χρησιμοποιήστε Page.GetText() or Page.Search() για αυτό. Δείτε το Σχόλια οδηγός για την πλήρη σημείωση API.
Μία Σημείωση Κατάργησης Μόνη της Δεν Αφαιρεί Περιεχόμενο
Page.AddRedact() σχεδιάζει μόνο ένα RedactAnnotation πάνω σε μια περιοχή — το περιεχόμενο από κάτω παραμένει ανέγγιχτο και εξακολουθεί να μπορεί να αντιγραφεί μέχρι να Page.ApplyRedactions() εκτελεστεί και ξαναγράψει καταστροφικά τη ροή του περιεχομένου. Τα σημάδια που προστέθηκαν after ApplyRedactions() έχει ήδη εκτελεστεί, παραμένει αδρανές επ’ άπειρο:
page.AddRedact({ rect: [216, 548, 460, 566], fill: [0, 0, 0], overlayText: '[REDACTED]' });
page.ApplyRedactions(); // only now is the content actually destroyed
Δείτε το Redaction οδηγός για λεπτομέρειες mark-vs-apply και διαγραφή αναζήτησης κειμένου.
Οι κλήσεις σχεδίασης PageGraphics δεν εμφανίζονται ποτέ στη σελίδα
Page.Graphics() επιστρέφει ένα PageGraphics που αποθηκεύει στην μνήμη κάθε κλήση moveTo()/rect()/circle()/stroke()/fill() μέχρι το apply() να τις δεσμεύσει στη σελίδα. Μια ακολουθία που λείπει η κλήση apply() δεν σχεδιάζει τίποτα:
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
Δείτε το Images οδηγός για το πλήρες σχέδιο και το optional-content-layer API.
Document.ToHtml() και η Χειροκίνητη Επισήμανση εξαρτώνται και οι δύο από ένα Δέντρο Δομής
Η λειτουργία Semantic-mode Document.ToHtml() αναδιατάσσει το περιεχόμενο περπατώντας το δέντρο δομής· σε ένα έγγραφο χωρίς ετικέτες, επιστρέφει σιωπηλά σε ένα ευρετικό σώμα και η εξαγωγή χάνει τη δομή των επικεφαλίδων. Το ίδιο δέντρο είναι αυτό στο οποίο η χειροκίνητη επισήμανση (StructTreeRoot.Append() / StructElement.MarkContent()) γράφει και αυτό που επιστρέφει το Document.GetStructTree() — καλέστε το Document.CreateStructTree() ή το Document.AutoTag() πριν από οποιοδήποτε από τα δύο:
const root = doc.GetStructTree();
if (!root) throw new Error('document is not tagged yet');Δείτε το Conversion and Structure οδηγοί για τα APIs εξαγωγής και σήμανσης αντίστοιχα.
AddTextBlock() Κόβει σιωπηλά το κείμενο στο πλαίσιο περιορισμού του.
Page.AddTextBlock(text, rect, options) τυλίγει το κείμενο μέσα στο rect και επιστρέφει ό,τι δεν χωράει (ή null αν όλα χωρούν) — δεν μεγαλώνει το ορθογώνιο ούτε ρίχνει εξαίρεση όταν το περιεχόμενο υπερχειλίζει. Μια τιμή επιστροφής που αγνοείται σημαίνει ότι το υπερχειλισμένο κείμενο απλώς δεν σχεδιάζεται:
const rest = page.AddTextBlock(longText, [72, 600, 200, 150], { fontSize: 11 });
if (rest) page.AddTextBlock(rest, [300, 600, 200, 150]); // route the overflow somewhere
Δείτε το Text οδηγός για την πλήρη τοποθέτηση κειμένου και εξαγωγή API.