Text
Text
หน้านี้อธิบายการอ่านข้อความจากหน้าออกมาในระดับรายละเอียดสามระดับ: plain text, structured layout blocks, และ individual positioned glyphs. สำหรับการเขียนข้อความลงบนหน้า, ดู แกน API and แกน API.
การสกัด Plain Text
Page.GetText() ส่งคืน plain text ที่ประกอบของหน้าในลำดับการอ่าน. นี่เป็นวิธีที่ง่ายที่สุดในการยืนยันว่าหน้านั้นมีข้อความอะไรจริง ๆ — ตัวอย่างเช่น หลังจาก flattening a field หรือการทำ redaction.
const page = doc.Pages[0];
console.log(page.GetText().includes('Internal memo'));ข้อความเชิงโครงสร้าง
Page.GetStructuredText() ดึงข้อความที่กำหนดตำแหน่งโดยจัดกลุ่มเป็นบรรทัด (ตาม baseline) และบล็อกแบบย่อหน้า (ตาม vertical gap และ left-edge alignment), ส่งคืน TextBlock[] — มีประโยชน์เมื่อคุณต้องการ layout, ไม่ใช่แค่ flat string.
การตรวจสอบระดับ Glyph
visitContent(doc, page, visitor) เดินผ่าน stream ของเนื้อหาในหน้า — รวมถึง Form XObjects — และเรียกตัวจัดการที่ตรงกันบน visitor สำหรับทุก glyph, รูปภาพ หรือ path ที่พบ ตัวจัดการ glyph จะรับ GlyphEvent: text ของ glyph, quad ใน device-space, fontSize, color, และฟิลด์ provenance เช่น mcid (element ที่ทำเครื่องหมายเนื้อหาที่ล้อมรอบมัน, หากมี) และ artifact (จริงเมื่อวาดภายในขอบเขต /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);เคล็ดลับและแนวทางปฏิบัติที่ดีที่สุด
- ใช้
Page.GetText()เพื่อตรวจสอบการมีหรือไม่มีอย่างรวดเร็ว; ใช้visitContent()พร้อมตัวจัดการglyphเมื่อคุณต้องการตำแหน่งที่แม่นยำของแต่ละ glyph, ขนาดฟอนต์, หรือสี. - ตรวจสอบ
GlyphEvent.artifactเพื่อข้ามเนื้อหาตกแต่ง (เฟอร์นิเจอร์ของหน้า, พื้นหลัง) ที่เอกสารที่ทำแท็กกำหนดเป็น/Artifactแทนเนื้อหาจริง. GlyphEvent.mcidเชื่อม glyph กลับไปยังองค์ประกอบโครงสร้างที่ห่อหุ้มเมื่อเอกสารถูกทำแท็ก — ผสานกับ Structure เพื่อเดินจาก glyph ไปยังองค์ประกอบเชิงตรรกะของมัน.Page.GetStructuredText()จัดกลุ่ม glyph เป็นบล็อกให้คุณ; ใช้visitContent()โดยตรงเฉพาะเมื่อคุณต้องการรายละเอียดต่อ glyph ที่GetStructuredText()ไม่ได้เปิดเผย.
ปัญหาที่พบบ่อย
| ปัญหา | สาเหตุ | แก้ไข |
|---|---|---|
Page.GetText() ขาดข้อความที่มองเห็นได้บนหน้า | ข้อความถูกวาดเป็นเส้นเวกเตอร์หรือภาพแทนที่จะเป็นตัวดำเนินการแสดง glyph จริง | ใช้ visitContent() พร้อมกับตัวจัดการ path / image เพื่อยืนยันว่าประเภทเนื้อหาใดที่จริง ๆ แล้ววาดมัน |
ตัวจัดการ glyph ของ visitContent() ทำงานสำหรับข้อความพื้นหลังแบบตกแต่ง | GlyphEvent.artifact ไม่ได้รับการตรวจสอบ | ข้ามเหตุการณ์ที่ e.artifact เป็น true |
| ข้อความที่สกัดออกมาอยู่นอกลำดับการอ่านที่มองเห็นได้ | การประกอบ GetText() แบบธรรมดาไม่สามารถสร้างเค้าโครงหลายคอลัมน์ใหม่ได้ | ใช้ Page.GetStructuredText() ซึ่งจัดกลุ่มข้อความเป็นบล็อกที่รับรู้เค้าโครง |
FAQ
ความแตกต่างระหว่าง GetText และ GetStructuredText คืออะไร?
GetText() คืนค่าเป็นสตริงแบนเดียวของข้อความที่ประกอบขึ้นของหน้า. GetStructuredText() คืนค่า TextBlock[] — ข้อความที่จัดกลุ่มเป็นบรรทัดและบล็อกคล้ายย่อหน้าโดยอิงเส้นฐานและการจัดวาง, มีประโยชน์เมื่อตำแหน่งสำคัญ.
ฉันจะรับตำแหน่งที่แน่นอนและขนาดฟอนต์ของแต่ละอักขระได้อย่างไร?
เรียก visitContent(doc, page, { glyph: (e) => ... }). แต่ละ GlyphEvent มี text ของ glyph, quad ใน device-space, fontSize, color, และ baseline angle.
ฉันสามารถระบุได้หรือไม่ว่าข้อความบางส่วนเป็นเนื้อหาจริงหรือเป็นการตกแต่ง?
ใช่ — GlyphEvent.artifact คือ true เมื่อ glyph ถูกวาดภายใน /Artifact ที่เป็นขอบเขตเนื้อหาแบบ marked-content, ความแตกต่างเดียวกันที่ Document.AutoTag() ใช้เมื่อกำหนดว่าจะแท็กอะไร.
การสกัดข้อความสามารถมองเห็นเนื้อหาภายใน Form XObjects ได้หรือไม่?
ใช่ — visitContent() เข้าสู่ Form XObjects เป็นส่วนหนึ่งของการเดินทาง, ดังนั้น glyph ที่วาดผ่านฟอร์มที่ใช้ซ้ำก็ยังถูกเยี่ยมชม.
API Reference สรุป
| คลาส/เมธอด | คำอธิบาย |
|---|---|
Page.GetText() | ข้อความธรรมดาที่ประกอบของหน้าในลำดับการอ่าน |
Page.GetStructuredText() | ข้อความที่จัดกลุ่มเป็นบรรทัดและบล็อกคล้ายย่อหน้า (TextBlock[]) |
visitContent() | เดินสำรวจเนื้อหาของหน้า, ปล่อยเหตุการณ์ glyph/image/path พร้อมข้อมูลแหล่งที่มา |
GlyphEvent | Glyph ที่วางตำแหน่งหนึ่ง: text, quad, fontSize, color, mcid, artifact |