Troubleshooting

หน้านี้รวบรวมการแก้ไขสำหรับปัญหาที่พบบ่อยที่สุดที่พบใน Aspose.PDF FOSS สำหรับการลงนาม, คำอธิบาย, การลบข้อมูล, การวาด, การแปลง, และ API ข้อความของ TypeScript.

เมธอดแบบ Async (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() ตรงกับเมทาดาต้า annotation แบบตัวอักษรจริง (/Contents, /T, /Subj); SearchAnnotations() ตรงกับ rendered ข้อความที่วาดโดยการแสดงผลของ markup annotation เอง (เช่น a FreeText body). ค่าที่จัดเก็บไว้เพียงใน /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.

เครื่องหมาย Redaction Mark เพียงอย่างเดียวไม่ได้ลบเนื้อหา

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() และการทำ Tag ด้วยมือ ทั้งสองต้องอาศัย Structure Tree

Semantic-mode Document.ToHtml() ปรับการไหลของเนื้อหาโดยเดินผ่าน Structure Tree; ในเอกสารที่ไม่มีการ Tag มันจะกลับไปใช้ส่วนเนื้อหาหลักแบบเฮียวริสติกโดยไม่มีการแจ้งเตือนและการส่งออกจะสูญเสียโครงสร้างหัวเรื่อง Tree เดียวกันเป็นที่ที่การ Tag ที่ทำด้วยมือ (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 การส่งออกและ 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.

ดูเพิ่มเติม

 ภาษาไทย