Troubleshooting

Trang này tập hợp các bản sửa cho các vấn đề phổ biến nhất gặp phải trên Aspose.PDF FOSS cho các API ký, chú thích, che đậy, vẽ, chuyển đổi và văn bản của TypeScript.

Các phương thức bất đồng bộ (Sign, Certify, VerifySignatures) dường như không thực hiện gì

Document.Sign(), Document.Certify() và Document.VerifySignatures() đều trả về một Promise. Gọi một trong số chúng mà không có await cho phép quá trình thực thi tiếp tục ngay lập tức — một doc.WriteTo() hoặc doc.Save() tiếp theo có thể chạy trước khi chữ ký thực sự được ghi, và một console.log() tiếp theo trên kết quả xác minh sẽ ghi lại một Promise chưa được giải quyết thay vì mảng 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');

Xem Security hướng dẫn cho luồng certify-then-sign đầy đủ.

SearchAnnotationText() và SearchAnnotations() trả về kết quả khác nhau cho cùng một văn bản

Hai phương pháp tìm kiếm này không giao nhau ở cả hai hướng trên cùng một trang. SearchAnnotationText() khớp siêu dữ liệu chú thích nguyên văn (/Contents, /T, /Subj); SearchAnnotations() khớp với rendered văn bản được vẽ bởi giao diện riêng của chú thích đánh dấu (ví dụ một FreeText thân). Một giá trị chỉ được lưu trong /Contents được tìm thấy bởi một và bị bỏ lỡ bởi cái kia:

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

Cả hai phương pháp đều không tìm kiếm văn bản trang thông thường — hãy sử dụng Page.GetText() or Page.Search() để làm vậy. Xem Chú thích hướng dẫn cho chú thích đầy đủ API.

Một Redaction Mark một mình không loại bỏ nội dung

Page.AddRedact() chỉ vẽ một RedactAnnotation trên một vùng — nội dung bên dưới không bị chạm vào và vẫn có thể sao chép-chọn cho đến Page.ApplyRedactions() chạy và ghi đè nội dung một cách phá hủy. Các dấu được thêm after ApplyRedactions() đã chạy, vẫn không được áp dụng vô thời hạn:

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

Xem Redaction hướng dẫn về chi tiết mark-vs-apply và việc che dấu tìm kiếm văn bản.

Các lời gọi vẽ PageGraphics không bao giờ xuất hiện trên trang

Page.Graphics() trả về một PageGraphics mà bufler mọi lời gọi moveTo()/rect()/circle()/stroke()/fill() cho đến khi apply() cam kết chúng vào trang. Một chuỗi thiếu lời gọi apply() sẽ không vẽ gì cả:

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

Xem Images hướng dẫn cho bản vẽ đầy đủ và lớp nội dung tùy chọn API.

Document.ToHtml() và Hand-Tagging đều phụ thuộc vào Cây cấu trúc

Semantic-mode Document.ToHtml() tái bố trí nội dung bằng cách duyệt Cây cấu trúc; trên tài liệu chưa được gắn thẻ, nó im lặng chuyển sang phần thân dựa trên heuristic và quá trình xuất sẽ mất cấu trúc tiêu đề. Cây giống nhau là nơi mà việc gắn thẻ do người dùng tạo thủ công (StructTreeRoot.Append() / StructElement.MarkContent()) ghi vào và cũng là thứ mà Document.GetStructTree() trả về — hãy gọi Document.CreateStructTree() hoặc Document.AutoTag() trước khi thực hiện bất kỳ thao tác nào.

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

Xem Conversion and Structure các hướng dẫn cho API xuất và gắn thẻ tương ứng.

AddTextBlock() Cắt văn bản một cách im lặng tại hình chữ nhật bao quanh của nó.

Page.AddTextBlock(text, rect, options) bao bọc văn bản bên trong rect và trả về phần nào không vừa (hoặc null nếu mọi thứ vừa) — nó không mở rộng hình chữ nhật hoặc gây lỗi khi nội dung tràn. Giá trị trả về bị bỏ qua có nghĩa là văn bản tràn đơn giản là không bao giờ được vẽ:

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

Xem Text hướng dẫn cho việc đặt văn bản đầy đủ và trích xuất API.

Xem thêm

 Tiếng Việt