แยกคอลัมน์ข้อความในไฟล์ 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 ขนาดใหญ่ ควรประมวลผลเอกสารเป็นส่วนๆ โดยแยกข้อความจากหน้าหลายๆ หน้าในแต่ละครั้งเพื่อหลีกเลี่ยงการใช้หน่วยความจำสูง