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 พร้อมข้อมูลแหล่งที่มา
GlyphEventGlyph ที่วางตำแหน่งหนึ่ง: text, quad, fontSize, color, mcid, artifact

ดูเพิ่มเติม

 ภาษาไทย