Troubleshooting
Această pagină colectează remedii pentru cele mai comune probleme întâlnite în Aspose.PDF FOSS pentru API-urile de semnare, adnotare, redactare, desen, conversie și text ale lui TypeScript.
Metodele asincrone (Sign, Certify, VerifySignatures) par să nu facă nimic
Document.Sign(), Document.Certify() și Document.VerifySignatures() returnează toate un Promise. Apelarea uneia fără await permite execuției să continue imediat — un doc.WriteTo() sau doc.Save() următor poate rula înainte ca semnătura să fie scrisă efectiv, și un console.log() ulterior pe rezultatul verificării înregistrează un Promise nerezolvat în loc de matricea 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');Vezi Security ghid pentru fluxul complet de certificare-după-semnează.
SearchAnnotationText() și SearchAnnotations() returnează rezultate diferite pentru același text
Aceste două metode de căutare sunt disjuncte în ambele direcții pe aceeași pagină. SearchAnnotationText() potrivește metadatele literale ale adnotării (/Contents, /T, /Subj); SearchAnnotations() potrivește rendered text trasat de propria apariție a unei adnotări markup (de exemplu un FreeText corp). O valoare stocată doar în /Contents este găsit de unul și ratat de celălalt:
const metadataHits = page.SearchAnnotationText('confidential'); // matches /Contents, /T, /Subj
const renderedHits = page.SearchAnnotations('confidential'); // matches rendered markup text
Niciuna dintre metode nu caută textul obișnuit al paginii — folosește Page.GetText() or Page.Search() pentru asta. Vezi Anotări ghid pentru adnotarea completă API.
Un marcaj de redactare singur nu elimină conținutul
Page.AddRedact() desenează doar un RedactAnnotation peste o regiune — conținutul de dedesubt rămâne neatins și încă poate fi copiat până când Page.ApplyRedactions() rulează și rescrie distructiv fluxul de conținut. Marcajele adăugate after ApplyRedactions() a rulat deja și rămân neaplicate pe termen nelimitat:
page.AddRedact({ rect: [216, 548, 460, 566], fill: [0, 0, 0], overlayText: '[REDACTED]' });
page.ApplyRedactions(); // only now is the content actually destroyed
Vezi Redaction ghid pentru detalii mark-vs-apply și redactare a căutării în text.
Apelurile de desenare PageGraphics nu apar niciodată pe pagină
Page.Graphics() returnează un PageGraphics care memorează în buffer fiecare apel moveTo()/rect()/circle()/stroke()/fill() până când apply() le comite pe pagină. O secvență care îi lipsește apelul apply() nu desenează nimic:
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
Vezi Images ghid pentru desenul complet și stratul de conținut opțional API.
Document.ToHtml() și Hand-Tagging depind amândouă de un arbore de structură
Modul semantic Document.ToHtml() rearanjează conținutul parcurgând arborele de structură; pe un document netichetat revine silențios la un corp euristic și exportul pierde structura titlurilor. Același arbore este ceea ce scrie etichetarea manuală (StructTreeRoot.Append() / StructElement.MarkContent()) și ce returnează Document.GetStructTree() — apelați Document.CreateStructTree() sau Document.AutoTag() înainte de oricare dintre ele:
const root = doc.GetStructTree();
if (!root) throw new Error('document is not tagged yet');Vezi Conversion and Structure ghiduri pentru export și API-urile de etichetare, respectiv.
AddTextBlock() taie silențios textul la dreptunghiul său de delimitare
Page.AddTextBlock(text, rect, options) înfășoară textul în interiorul rect și returnează tot ce nu a încăput (sau null dacă totul a încăput) — nu mărește dreptunghiul și nu aruncă excepție când conținutul depășește limita. O valoare returnată care este ignorată înseamnă că textul în exces pur și simplu nu este desenat:
const rest = page.AddTextBlock(longText, [72, 600, 200, 150], { fontSize: 11 });
if (rest) page.AddTextBlock(rest, [300, 600, 200, 150]); // route the overflow somewhere
Vezi Text ghid pentru text-placement complet și extragere API.