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 راهنما برای جریان کامل certify-then-sign.
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 راهنمای کامل نقاشی و لایهٔ محتویات اختیاری API.
Document.ToHtml() و برچسبگذاری دستی هر دو به درخت ساختاری وابستهاند
حالت معنایی 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 راهنماها برای APIهای خروجی و برچسبگذاری به ترتیب.
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.