แยกคอลัมน์ข้อความในไฟล์ PDF

การแนะนำ

คุณกำลังทำงานกับไฟล์ PDF และต้องการแยกข้อความในรูปแบบคอลัมน์เฉพาะหรือไม่ ไม่ว่าคุณจะกำลังประมวลผลใบแจ้งหนี้ รายงาน หรือเอกสารที่มีโครงสร้างใดๆ การแยกข้อความออกจาก PDF อย่างถูกต้องอาจเป็นเรื่องยุ่งยาก นี่คือจุดที่ Aspose.PDF สำหรับ .NET เข้ามาช่วยลดความซับซ้อนของกระบวนการ ในบทช่วยสอนนี้ เราจะแนะนำคุณเกี่ยวกับวิธีแยกข้อความในคอลัมน์จากไฟล์ PDF ได้อย่างง่ายดาย

ข้อกำหนดเบื้องต้น

ก่อนที่จะเจาะลึกโค้ด มาดูสิ่งสำคัญที่คุณจะต้องมีกันก่อน:

  • Aspose.PDF สำหรับ .NET: ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้ง Aspose.PDF สำหรับ .NET เวอร์ชันล่าสุดแล้ว หากยังไม่ได้ติดตั้ง คุณสามารถดาวน์โหลดได้ที่นี่.
  • สภาพแวดล้อมการพัฒนา: คุณจะต้องมี Visual Studio หรือสภาพแวดล้อมการพัฒนา .NET อื่นเพื่อทำงานกับโค้ด
  • เอกสาร PDF: มีเอกสาร PDF ตัวอย่างอยู่ในมือ โดยควรเป็นเอกสารที่มีคอลัมน์ข้อความ เนื่องจากเราจะแยกข้อความจากเอกสารดังกล่าว

หากคุณยังไม่ได้ติดตั้ง Aspose.PDF สำหรับ .NET คุณสามารถดาวน์โหลดทดลองใช้งานฟรี หรือซื้อใบอนุญาต เพื่อรับคุณสมบัติครบถ้วน คุณยังสามารถสมัครได้ใบอนุญาตชั่วคราว หากจำเป็น

นำเข้าเนมสเปซ

หากต้องการใช้ Aspose.PDF สำหรับ .NET ในโปรเจ็กต์ของคุณ คุณจะต้องนำเข้าเนมสเปซต่อไปนี้:

using System.IO;
using Aspose.Pdf;
using Aspose.Pdf.Text;
using System;

คำแนะนำทีละขั้นตอน: แยกคอลัมน์ข้อความจาก PDF

ตอนนี้เรามาแยกส่วนต่างๆ ของโค้ดออกเป็นส่วนๆ เพื่อทำความเข้าใจการทำงานของโค้ดให้ดียิ่งขึ้น ทำตามขั้นตอนทีละขั้นตอนเพื่ออธิบายแต่ละส่วนของกระบวนการ

ขั้นตอนที่ 1: โหลดเอกสาร PDF

สิ่งแรกที่คุณต้องทำคือโหลดไฟล์ PDF ของคุณลงในDocumentวัตถุ นี่คือวิธีที่ Aspose.PDF โต้ตอบกับเอกสารของคุณ

string dataDir = "YOUR DOCUMENT DIRECTORY";
Document pdfDocument = new Document(dataDir + "ExtractTextPage.pdf");

ในขั้นตอนนี้ เราเพียงแค่กำหนดไดเรกทอรีที่จัดเก็บเอกสาร PDF ของคุณ แทนที่"YOUR DOCUMENT DIRECTORY" ด้วยเส้นทางไปยังไฟล์ PDF ในเครื่องของคุณDocument วัตถุโหลด PDF เข้าไปในหน่วยความจำ ทำให้สามารถเข้าถึงได้เพื่อประมวลผลเพิ่มเติม

ขั้นตอนที่ 2: ตั้งค่าตัวดูดซับเศษข้อความ

ต่อไปเราจะใช้TextFragmentAbsorber เพื่อดูดซับหรือจับภาพข้อความทั้งหมดจากไฟล์ PDF คลาสตัวดูดซับนี้ได้รับการออกแบบมาเพื่อแยกข้อความบางส่วนจากพื้นที่เฉพาะใน PDF ของคุณ ซึ่งทำให้เหมาะอย่างยิ่งสำหรับการแยกข้อความเป็นคอลัมน์

TextFragmentAbsorber tfa = new TextFragmentAbsorber();
pdfDocument.Pages.Accept(tfa);
TextFragmentCollection tfc = tfa.TextFragments;

ที่นี่เราสร้างอินสแตนซ์ของTextFragmentAbsorber และนำไปใช้กับทุกหน้าของไฟล์ PDF โดยใช้Accept() . การTextFragmentCollection จัดเก็บข้อความที่แยกออกมา และจากคอลเล็กชันนี้ เราสามารถจัดการหรือแยกข้อความตามต้องการได้

ขั้นตอนที่ 3: ปรับขนาดตัวอักษรของข้อความที่แยกออกมา

เมื่อคุณจับภาพข้อความบางส่วนแล้ว คุณอาจต้องการลดขนาดตัวอักษร โดยเฉพาะอย่างยิ่งเมื่อข้อความต้นฉบับมีขนาดใหญ่เกินไป ในตัวอย่างนี้ เราจะลดขนาดตัวอักษรลง 70%

foreach (TextFragment tf in tfc)
{
    // ลดขนาดตัวอักษรลง 70%
    tf.TextState.FontSize = tf.TextState.FontSize * 0.7f;
}

รหัสนี้จะวนซ้ำผ่านแต่ละTextFragment ในคอลเลกชั่นและลดขนาดตัวอักษรลง 70% การปรับขนาดตัวอักษรจะช่วยให้จัดการข้อความที่แยกออกมาได้ง่ายขึ้น โดยเฉพาะถ้าคุณกำลังจัดรูปแบบข้อความสำหรับวัตถุประสงค์ที่แตกต่างกัน

ขั้นตอนที่ 4: บันทึกเอกสารลงในสตรีมหน่วยความจำ

หลังจากแก้ไขข้อความแล้ว เราจะบันทึก PDF ลงในMemoryStreamวิธีนี้ช่วยให้เราเก็บเอกสารไว้ในหน่วยความจำเพื่อประมวลผลต่อไปโดยไม่จำเป็นต้องเขียนกลับเข้าไปในดิสก์

Stream st = new MemoryStream();
pdfDocument.Save(st);
pdfDocument = new Document(st);

ที่นี่ เราจะบันทึก PDF ลงในสตรีมหน่วยความจำแล้วโหลดเอกสารใหม่ วิธีนี้มีประโยชน์เมื่อคุณทำงานกับไฟล์ขนาดใหญ่และต้องการหลีกเลี่ยงการใช้งานดิสก์ที่ไม่จำเป็น

ขั้นตอนที่ 5: แยกข้อความทั้งหมดโดยใช้ Text Absorber

ตอนนี้เราได้เตรียมไฟล์ PDF เรียบร้อยแล้ว ถึงเวลาแยกข้อความออกมา เราจะใช้TextAbsorber เพื่อคว้าข้อความทั้งหมดจากเอกสาร

TextAbsorber textAbsorber = new TextAbsorber();
pdfDocument.Pages.Accept(textAbsorber);
String extractedText = textAbsorber.Text;

ในขั้นตอนนี้TextAbsorber ดูดซับข้อความทั้งหมดจาก PDF และข้อความที่แยกออกมาจะถูกเก็บไว้ในextractedText สตริง นี่คือจุดที่เวทมนตร์เกิดขึ้น—คอลัมน์ข้อความของคุณอยู่ในรูปแบบข้อความธรรมดาแล้ว!

ขั้นตอนที่ 6: บันทึกข้อความที่แยกออกมาลงในไฟล์

สุดท้ายเราบันทึกข้อความที่แยกออกมาลงใน.txt ไฟล์สำหรับการเข้าถึงและใช้งานได้ง่ายต่อไป

dataDir = dataDir + "ExtractColumnsText_out.txt";
System.IO.File.WriteAllText(dataDir, extractedText);
Console.WriteLine("\nColumns text extracted successfully from Pages of PDF Document.\nFile saved at " + dataDir);

โค้ดนี้จะเขียนข้อความที่แยกออกมาลงในไฟล์ใหม่.txt ไฟล์และบันทึกลงในไดเร็กทอรีที่คุณระบุ ข้อความจะปรากฏในคอนโซลเพื่อยืนยันว่ากระบวนการเสร็จสมบูรณ์

บทสรุป

เท่านี้คุณก็ทำได้แล้ว! การแยกคอลัมน์ข้อความจากไฟล์ PDF โดยใช้ Aspose.PDF สำหรับ .NET นั้นง่ายกว่าที่คิด ด้วยโค้ดเพียงไม่กี่บรรทัด คุณสามารถโหลด PDF แยกข้อความที่ต้องการ ปรับรูปแบบ และบันทึกผลลัพธ์ลงในไฟล์ข้อความได้

เทคนิคนี้มีประโยชน์อย่างยิ่งสำหรับการประมวลผลเอกสารที่มีโครงสร้าง เช่น ตาราง รายงาน หรือเนื้อหาใดๆ ที่จัดเป็นคอลัมน์ ไม่ว่าคุณจะต้องการดึงข้อมูลอัตโนมัติหรือประมวลผลเอกสารจำนวนมาก Aspose.PDF ก็มีเครื่องมือที่จะช่วยให้ดำเนินการดังกล่าวได้อย่างมีประสิทธิภาพ

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

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

ใช่! คุณสามารถปรับเปลี่ยนได้TextFragmentAbsorber เพื่อกำหนดเป้าหมายหน้าเฉพาะโดยใช้pdfDocument.Pages[pageIndex].Accept(tfa); วิธี.

สามารถแยกข้อความจากคอลัมน์เดียวใน PDF หลายคอลัมน์ได้หรือไม่

ใช่ แต่คุณจะต้องทำงานกับพิกัดของชิ้นส่วนข้อความโดยใช้TextFragment.Rectangle เพื่อกำหนดเป้าหมายพื้นที่เฉพาะของเอกสาร

ฉันจะปรับปรุงความแม่นยำของการแยกข้อความได้อย่างไร

เพื่อความแม่นยำที่ดีขึ้น ควรตรวจสอบให้แน่ใจว่าโครงสร้างของ PDF ถูกกำหนดไว้อย่างชัดเจนและหลีกเลี่ยงเอกสารที่มีเค้าโครงที่ซับซ้อน นอกจากนี้ คุณยังสามารถปรับแต่งTextFragmentAbsorber เพื่อแยกข้อความตามรูปแบบแบบอักษร ขนาด หรือภูมิภาค

Aspose.PDF รองรับการแยกข้อความจากเอกสารที่สแกนหรือไม่

ใช่ แต่คุณจะต้องใช้เทคโนโลยี OCR (Optical Character Recognition) ซึ่ง Aspose ก็มีเครื่องมือสำหรับเรื่องนี้เช่นกัน

ฉันจะจัดการไฟล์ PDF ขนาดใหญ่ที่มีจำนวนหลายพันหน้าได้อย่างไร

สำหรับ PDF ขนาดใหญ่ ควรประมวลผลเอกสารเป็นส่วนๆ โดยแยกข้อความจากหน้าหลายๆ หน้าในแต่ละครั้งเพื่อหลีกเลี่ยงการใช้หน่วยความจำสูง