การสกัดข้อความ

การสกัดข้อความ

การสกัดข้อความ

Aspose.PDF FOSS for .NET มีหลายกลไกสำหรับการสกัดข้อความจากหน้า PDF. TextFragmentAbsorber เป็นเครื่องมือหลัก — มันสแกนเนื้อหาหน้าและส่งคืนวัตถุ TextFragment ที่มีโครงสร้างพร้อมข้อมูลตำแหน่ง, แบบอักษร, และสไตล์.


การสกัดข้อความพื้นฐาน

TextAbsorber ดึงข้อความทั้งหมดจากหน้า หรือเอกสารเป็นสตริงเดียว.

using var doc = Document.Open(pdfBytes);

var absorber = new TextAbsorber();
doc.Pages[1].Accept(absorber);

string pageText = absorber.Text;

การสกัดชิ้นส่วนข้อความ

TextFragmentAbsorber ให้ผลลัพธ์ที่มีโครงสร้าง แต่ละ TextFragment รวมถึงข้อความที่สกัด, ตำแหน่งบนหน้า, และรายละเอียดฟอนต์.

using var doc = Document.Open(pdfBytes);

var absorber = new TextFragmentAbsorber();
doc.Pages[1].Accept(absorber);

foreach (var fragment in absorber.TextFragments)
{
    Console.WriteLine($"Text: {fragment.Text}");
    Console.WriteLine($"Position: ({fragment.Position.XIndent}, {fragment.Position.YIndent})");
    Console.WriteLine($"Font: {fragment.TextState.Font.FontName}");
}

การค้นหาด้วยนิพจน์ปกติ

ส่งรูปแบบ regex ไปยัง TextFragmentAbsorber เพื่อค้นหาข้อความเฉพาะ

var absorber = new TextFragmentAbsorber(@"\d{3}-\d{2}-\d{4}");
doc.Pages.Accept(absorber);  // Search all pages

foreach (var fragment in absorber.TextFragments)
{
    Console.WriteLine($"Found: {fragment.Text}");
}

ส่วนข้อความ

แต่ละ TextFragment อาจมีหลายวัตถุ TextSegment เมื่อข้อความขยายครอบคลุมหลายรันของแบบอักษร.

foreach (var fragment in absorber.TextFragments)
{
    foreach (var segment in fragment.Segments)
    {
        Console.WriteLine($"Segment: {segment.Text}, Font: {segment.TextState.Font.FontName}");
    }
}

การจัดการฟอนต์

FontRepository มีเมธอดสำหรับค้นหาและโหลดฟอนต์.

var font = FontRepository.FindFont("Helvetica");

การสร้างย่อหน้าข้อความ

TextParagraph อนุญาตให้สร้างบล็อกข้อความหลายบรรทัดสำหรับแทรกลงในหน้า.

var paragraph = new TextParagraph();
paragraph.AppendLine(new TextFragment("First line"));
paragraph.AppendLine(new TextFragment("Second line"));

เคล็ดลับและแนวทางปฏิบัติที่ดีที่สุด

  • ใช้ TextFragmentAbsorber เมื่อคุณต้องการข้อมูลตำแหน่งและแบบอักษร; ใช้ TextAbsorber สำหรับการสกัดข้อความแบบธรรมดา
  • ยอมรับตัวดูดบนหน้าเดียวเพื่อผลลัพธ์ที่เร็วขึ้น, หรือบน doc.Pages เพื่อค้นหาทั้งเอกสาร
  • การค้นหาแบบ regular expression มีความไวต่อขนาดตัวอักษรเป็นค่าเริ่มต้น — ใช้คำนำหน้า (?i) สำหรับการจับคู่ที่ไม่สนใจขนาดตัวอักษร
  • ตรวจสอบ TextState.Font.IsEmbedded เพื่อกำหนดว่าแบบอักษรถูกฝังใน PDF หรือไม่
  • สำหรับเอกสารขนาดใหญ่, ประมวลผลแต่ละหน้าแยกกัน เพื่อจัดการการใช้หน่วยความจำ

ปัญหาทั่วไป

IssueCauseFix
Extracted text is garbledPDF uses a non-standard encoding or CID font mappingCheck font embedding; some scanned PDFs require OCR
No text fragments foundPage content is an image, not textUse an OCR tool to convert image pages to text first
Regex returns no matchesPattern does not account for whitespace inserted by PDF text layoutNormalize whitespace or use a looser pattern
TextState.Font is nullFont resource is missing from the PDFHandle null checks when inspecting font properties

คำถามที่พบบ่อย

ฉันสามารถสกัดข้อความจากพื้นที่เฉพาะของหน้าได้หรือไม่?

ใช่. ตั้งค่า TextFragmentAbsorber.TextSearchOptions.Rectangle เพื่อจำกัดการค้นหาให้เฉพาะพื้นที่หนึ่งของหน้า.

การสกัดข้อความรักษาลำดับการอ่านหรือไม่?

ไลบรารีส่งคืนข้อความตามลำดับของ content-stream. สำหรับการจัดวางหลายคอลัมน์, คุณอาจต้องจัดเรียงส่วนย่อยตามตำแหน่ง.

ฉันสามารถสกัดข้อความจากทุกหน้าได้พร้อมกันหรือไม่?

ใช่. เรียก doc.Pages.Accept(absorber) เพื่อค้นหาทุกหน้าในเอกสาร.


สรุปการอ้างอิง API

Class / MethodDescription
TextAbsorberดึงข้อความทั้งหมดเป็นสตริงเดียว
TextFragmentAbsorberดึงส่วนข้อความที่มีโครงสร้างพร้อมข้อมูลตำแหน่งและแบบอักษร
TextFragmentรันข้อความที่มีตำแหน่ง, สถานะข้อความ, และส่วนย่อย
TextFragment.Textสตริงข้อความที่ดึงออกมา
TextFragment.Positionพิกัดบนหน้า
TextFragment.TextStateข้อมูลแบบอักษร, ขนาด, และสี
TextFragment.Segmentsรันย่อยภายในส่วนข้อความ
TextParagraphตัวสร้างสำหรับบล็อกข้อความหลายบรรทัด
TextStateชื่อแบบอักษร, ขนาด, สี, และคุณสมบัติสไตล์
FontRepositoryการค้นหาและโหลดแบบอักษรแบบสถิต
FontRepository.FindFontค้นหาแบบอักษรตามชื่อ

ดูเพิ่มเติม

 ภาษาไทย