Text
Text
Trang này đề cập đến việc đọc lại văn bản từ một trang, ở ba mức độ chi tiết: văn bản thuần, các khối bố cục có cấu trúc, và các glyph được đặt vị trí riêng lẻ. Để viết văn bản lên một trang, xem Core API and Core API.
Trích xuất Văn bản thuần
Page.GetText() trả về văn bản thuần đã được lắp ráp của trang, theo thứ tự đọc. Đây là cách đơn giản nhất để xác nhận văn bản thực sự có trên một trang — ví dụ, sau khi làm phẳng một trường hoặc áp dụng việc che dấu.
const page = doc.Pages[0];
console.log(page.GetText().includes('Internal memo'));Văn bản có cấu trúc
Page.GetStructuredText() trích xuất văn bản được định vị, nhóm thành các dòng (theo đường cơ sở) và các khối dạng đoạn (theo khoảng cách dọc và căn lề trái), trả về TextBlock[] — hữu ích khi bạn cần bố cục, không chỉ một chuỗi phẳng.
Kiểm tra cấp độ glyph
visitContent(doc, page, visitor) đi qua các luồng nội dung của trang — bao gồm cả trong Form XObjects — và gọi trình xử lý tương ứng trên visitor cho mỗi glyph, hình ảnh hoặc đường dẫn mà nó gặp. Trình xử lý glyph nhận được một GlyphEvent: text của glyph, quad trong không gian thiết bị, fontSize, color, và các trường nguồn gốc như mcid (phần tử nội dung đã đánh dấu bao quanh, nếu có) và artifact (đúng khi được vẽ bên trong phạm vi /Artifact).
import { visitContent } from '@asposefoss/pdf';
let glyphCount = 0;
visitContent(doc, page, {
glyph: (e) => {
glyphCount++;
if (e.artifact) return; // skip decorative content
console.log(e.text, e.quad, e.color);
},
});
console.log('glyphs drawn:', glyphCount);Mẹo và Thực hành Tốt nhất
- Sử dụng
Page.GetText()để kiểm tra nhanh sự có/không; sử dụngvisitContent()cùng với trình xử lýglyphkhi bạn cần vị trí chính xác, kích thước phông chữ hoặc màu sắc của mỗi glyph. - Kiểm tra
GlyphEvent.artifactđể bỏ qua nội dung trang trí (đồ dùng trang, nền) mà tài liệu được gắn thẻ đánh dấu là/Artifactthay vì nội dung thực. GlyphEvent.mcidliên kết một glyph trở lại phần tử cấu trúc bao quanh nó khi tài liệu được gắn thẻ — kết hợp với Structure để di chuyển từ một glyph đến phần tử logic của nó.Page.GetStructuredText()nhóm các glyph thành các khối cho bạn; chỉ sử dụngvisitContent()trực tiếp khi bạn cần chi tiết từng glyph màGetStructuredText()không cung cấp.
Các vấn đề thường gặp
| Vấn đề | Nguyên nhân | Khắc phục |
|---|---|---|
Page.GetText() thiếu văn bản hiện rõ trên trang | Văn bản được vẽ dưới dạng các đường vector hoặc hình ảnh thay vì các toán tử hiển thị glyph thực | Sử dụng visitContent() cùng với bộ xử lý path / image để xác nhận loại nội dung thực sự đã vẽ nó |
Bộ xử lý glyph của visitContent() được kích hoạt cho văn bản nền trang trí | GlyphEvent.artifact chưa được kiểm tra | Bỏ qua các sự kiện mà e.artifact là true |
| Văn bản đã trích xuất không theo thứ tự đọc trực quan | Việc lắp ráp GetText() thuần túy không tái tạo bố cục đa cột | Sử dụng Page.GetStructuredText(), nó nhóm văn bản thành các khối có nhận thức về bố cục |
FAQ
Sự khác biệt giữa GetText và GetStructuredText là gì?
GetText() trả về một chuỗi phẳng duy nhất của văn bản đã được lắp ráp trên trang. GetStructuredText() trả về TextBlock[] — văn bản được nhóm thành các dòng và các khối giống đoạn văn dựa trên đường cơ sở và bố cục, hữu ích khi vị trí quan trọng.
Làm sao tôi có thể lấy vị trí chính xác và kích thước phông chữ của mỗi ký tự?
Gọi visitContent(doc, page, { glyph: (e) => ... }). Mỗi GlyphEvent mang theo text của glyph, quad trong không gian thiết bị, fontSize, color, và baseline angle.
Tôi có thể xác định được một đoạn văn bản là nội dung thực hay chỉ là trang trí không?
Có — GlyphEvent.artifact là true khi glyph được vẽ bên trong một phạm vi nội dung được đánh dấu /Artifact, cùng sự phân biệt mà Document.AutoTag() sử dụng khi quyết định gắn thẻ.
Việc trích xuất văn bản có nhìn thấy nội dung bên trong Form XObjects không?
Có — visitContent() đi vào Form XObjects như một phần của quá trình duyệt, vì vậy các glyph được vẽ qua một form được tái sử dụng vẫn sẽ được thăm.
API Reference Tóm tắt
| Lớp/Phương thức | Mô tả |
|---|---|
Page.GetText() | Văn bản thuần được lắp ráp của trang, theo thứ tự đọc |
Page.GetStructuredText() | Văn bản được nhóm thành các dòng và các khối giống đoạn (TextBlock[]) |
visitContent() | Duyệt nội dung của một trang, phát ra các sự kiện glyph/hình ảnh/đường dẫn cùng nguồn gốc |
GlyphEvent | Một glyph đã định vị: text, quad, fontSize, color, mcid, artifact |