รูปแบบไฟล์ PDF เป็นที่นิยมเนื่องจากเนื้อหาของไฟล์ไม่สามารถแก้ไขได้ง่ายเมื่อเทียบกับรูปแบบไฟล์ประมวลผลคำอื่น ๆ อย่างไรก็ตาม ใน C# คุณสามารถแยกข้อความจากเอกสาร PDF ด้วย Aspose.PDF for .NET API ในบทความนี้ ให้เราสำรวจความเป็นไปได้บางประการสำหรับการค้นหาและแยกข้อความจากไฟล์ PDF โดยใช้ C# ต่อไปนี้เป็นรายการคุณสมบัติที่เราจะพูดถึงในบล็อกนี้:
- แยกข้อความจากเอกสาร PDF ทั้งหมดโดยใช้ C #
- ค้นหาและแยกข้อความจากหน้าเฉพาะในเอกสาร PDF โดยใช้ C#
- ค้นหาและแยกข้อความจากภูมิภาคเฉพาะของหน้า PDF โดยใช้ C#
- ค้นหาหรือแยกข้อความเฉพาะจากไฟล์ PDF ด้วย Regular Expressions โดยใช้ C#
- แยกข้อความจากเซลล์ตารางในเอกสาร PDF โดยใช้ C#
- ค้นหาและแยกข้อความที่เน้นจากเอกสาร PDF โดยใช้ C#
- แยกข้อความ PDF ที่มีการใช้หน่วยความจำต่ำโดยใช้ C #
แยกข้อความจากเอกสาร PDF ทั้งหมดโดยใช้ C
การอ่านเนื้อหาข้อความจากเอกสาร PDF เป็นคุณสมบัติที่ใช้บ่อย เมื่อใช้ C# คุณสามารถแยกข้อความทั้งหมดจากทุกหน้าของเอกสารโดยทำตามขั้นตอนด้านล่าง:
- โหลดเอกสาร PDF
- สร้างวัตถุ TextAbsorber
- รับโช้คทุกหน้า
- เขียนข้อความที่แยกแล้วไปยังไฟล์และบันทึก
ข้อมูลโค้ดด้านล่างทำตามขั้นตอนเหล่านี้และแสดงวิธีแยกข้อความจากเอกสาร PDF ทั้งหมดโดยใช้ C #:
// เปิดเอกสาร PDF
Document pdfDocument = new Document(dataDir + "ExtractTextAll.pdf");
// สร้างวัตถุ TextAbsorber เพื่อแยกข้อความ
TextAbsorber textAbsorber = new TextAbsorber();
// รับโช้คทุกหน้า
pdfDocument.Pages.Accept(textAbsorber);
// รับข้อความที่แยกออกมา
string extractedText = textAbsorber.Text;
// สร้างตัวเขียนและเปิดไฟล์
TextWriter tw = new StreamWriter(dataDir + "extracted-text.txt");
// เขียนบรรทัดข้อความลงในไฟล์
tw.WriteLine(extractedText);
// ปิดสตรีม
tw.Close();
ค้นหาและแยกข้อความจากหน้าเฉพาะใน PDF ใน C#
หลังจากสำรวจการแยกข้อความในระดับเอกสารแล้ว ให้เราแยกข้อความจากหน้าเฉพาะของเอกสาร PDF เพียงทำตามขั้นตอนด้านล่างเพื่อให้บรรลุความต้องการของคุณ:
- โหลดเอกสาร PDF
- สร้างวัตถุ TextAbsorber
- ยอมรับตัวดูดซับสำหรับหน้าเฉพาะ
- เขียนข้อความที่แยกแล้วไปยังไฟล์และบันทึก
ข้อมูลโค้ดต่อไปนี้ทำตามขั้นตอนเหล่านี้เพื่ออ่านข้อความจากหน้าใด ๆ ของไฟล์ PDF โดยใช้ C #:
// เปิดเอกสาร PDF
Document pdfDocument = new Document(dataDir + "ExtractTextAll.pdf");
// เข้าถึงหน้าที่จำเป็นในเอกสาร PDF
Page page = pdfDocument.Pages[1];
// สร้างวัตถุ TextAbsorber เพื่อแยกข้อความ
TextAbsorber textAbsorber = new TextAbsorber();
// ยอมรับตัวดูดซับสำหรับหน้าที่ระบุ
page.Accept(textAbsorber);
// รับข้อความที่แยกออกมา
string extractedText = textAbsorber.Text;
// สร้างตัวเขียนและเปิดไฟล์
TextWriter tw = new StreamWriter(dataDir + "extracted-text.txt");
// เขียนบรรทัดข้อความลงในไฟล์
tw.WriteLine(extractedText);
// ปิดสตรีม
tw.Close();
ค้นหาและแยกข้อความจากภูมิภาคเฉพาะของหน้า PDF ใน C#
ให้เราทำการแยกข้อความนี้ไปอีกขั้นหนึ่ง ลองค้นหาข้อความจากพื้นที่เฉพาะของหน้า สิ่งสำคัญคือต้องทำความเข้าใจว่าหน่วยวัดพื้นฐานใน Aspose.PDF for .NET คือ point โดยที่ 72 point เท่ากับ 1 นิ้ว นอกจากนี้ มุมล่างซ้ายถือเป็นจุดเริ่มต้น (0,0) ของหน้า ต่อไปนี้เป็นขั้นตอนในการอ่านข้อความจากพื้นที่หรือส่วนใดส่วนหนึ่งของหน้าในเอกสาร PDF:
- โหลดเอกสาร PDF ต้นทาง
- สร้างวัตถุ TextAbsorber
- ตั้งค่า TextSearchOptions และระบุพิกัดสี่เหลี่ยม
- ยอมรับตัวดูดซับสำหรับหน้าเฉพาะ
- เขียนข้อความที่แยกออกมาในไฟล์
ข้อมูลโค้ดด้านล่างแสดงขั้นตอนเหล่านี้เพื่อแยกข้อความจากภูมิภาคเฉพาะโดยใช้ C#:
// เปิดเอกสาร
Document pdfDocument = new Document(dataDir + "ExtractTextAll.pdf");
// สร้างวัตถุ TextAbsorber เพื่อแยกข้อความ
TextAbsorber absorber = new TextAbsorber();
absorber.TextSearchOptions.LimitToPageBounds = true;
absorber.TextSearchOptions.Rectangle = new Aspose.Pdf.Rectangle(100, 200, 250, 350);
// ยอมรับตัวดูดซับสำหรับหน้าแรก
pdfDocument.Pages[1].Accept(absorber);
// รับข้อความที่แยกออกมา
string extractedText = absorber.Text;
// สร้างตัวเขียนและเปิดไฟล์
TextWriter tw = new StreamWriter(dataDir + "extracted-text.txt");
// เขียนบรรทัดข้อความลงในไฟล์
tw.WriteLine(extractedText);
// ปิดสตรีม
tw.Close();
ค้นหาหรือแยกข้อความเฉพาะจากไฟล์ PDF ด้วย Regular Expressions โดยใช้ C#
คุณสามารถแยกข้อความเฉพาะจากเอกสาร PDF ที่ตรงกับรูปแบบบางอย่างได้ ตัวอย่างเช่น คุณอาจต้องการแยกคำหรือตัวเลขเฉพาะบางคำ เพื่อจุดประสงค์นี้ คุณจะต้องออกแบบนิพจน์ทั่วไป API จะใช้ regex นั้นเพื่อค้นหาข้อความที่ตรงกันในเอกสาร PDF ขั้นตอนด้านล่างนี้เป็นแนวทางในการค้นหาและแยกข้อความเฉพาะจากไฟล์ PDF:
- โหลดเอกสาร PDF อินพุต
- สร้างวัตถุ TextAbsorber
- ออกแบบและตั้งค่านิพจน์ทั่วไปให้ตรงกับข้อความบางส่วน
- วนซ้ำแต่ละส่วนของข้อความที่แยกออกมา
ข้อมูลโค้ด C# ต่อไปนี้ใช้ regex ที่ค้นหาข้อความที่มีตัวเลข 4 หลัก เช่น 1999,2000 ฯลฯ ในทุกหน้าของเอกสาร
// เปิดเอกสาร
Document pdfDocument = new Document(dataDir + @"Test.pdf");
// สร้างวัตถุ TextAbsorber เพื่อค้นหาอินสแตนซ์ทั้งหมดของวลีค้นหาอินพุต
TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber(@"\d{4}"); //like 1999-2020 // set text search option to specify regular expression usage
TextSearchOptions textSearchOptions = new TextSearchOptions(true);
textFragmentAbsorber.TextSearchOptions = textSearchOptions;
// รับโช้คทุกหน้า
pdfDocument.Pages.Accept(textFragmentAbsorber);
// รับเศษข้อความที่แยกออกมา
TextFragmentCollection textFragmentCollection = textFragmentAbsorber.TextFragments;
// วนผ่านชิ้นส่วน
foreach (TextFragment textFragment in textFragmentCollection)
{
Console.WriteLine(textFragment.Text);
}
แยกข้อความจากเซลล์ตารางในเอกสาร PDF โดยใช้ C#
การแยกข้อความจากตารางบนหน้า PDF นั้นแตกต่างออกไปเล็กน้อย เราได้ทำงานกับคลาส TextAbsorber ในตัวอย่างก่อนหน้านี้ แต่การแยกข้อความจากตารางนั้นแตกต่างออกไปเล็กน้อย ดังนั้น คุณต้องทำตามขั้นตอนด้านล่างเพื่อแยกข้อความออกจากวัตถุตาราง:
- โหลดไฟล์ PDF ต้นทาง
- สร้างวัตถุของคลาส TableAbsorber
- วนซ้ำผ่าน AbsorbedTable
- วนซ้ำแต่ละเซลล์ในแต่ละแถวของตาราง
ข้อมูลโค้ดด้านล่างทำตามขั้นตอนเหล่านี้และแยกข้อความจากเซลล์ตารางในเอกสาร PDF อย่างมีประสิทธิภาพโดยใช้ C #:
Document pdfDocument = new Document(dataDir + "Test.pdf");
TableAbsorber absorber = new TableAbsorber();
absorber.Visit(pdfDocument.Pages[1]);
foreach (AbsorbedTable table in absorber.TableList)
{
foreach (AbsorbedRow row in table.RowList)
{
foreach (AbsorbedCell cell in row.CellList)
{
TextFragment textfragment = new TextFragment();
TextFragmentCollection textFragmentCollection = cell.TextFragments;
foreach (TextFragment fragment in textFragmentCollection)
{
Console.WriteLine(fragment.Text);
}
}
}
}
ค้นหาและแยกข้อความที่เน้นจากเอกสาร PDF โดยใช้ C#
ข้อความที่เน้นจะแสดงเป็นคำอธิบายประกอบในไฟล์ PDF ประกอบด้วยข้อความที่ทำเครื่องหมายซึ่งทำให้แตกต่างจากข้อความทั่วไปในเอกสาร ขั้นตอนด้านล่างอธิบายวิธีการอ่านข้อความที่เน้นสีโดยใช้ C#:
- โหลดเอกสารต้นฉบับ
- วนรอบคำอธิบายประกอบทั้งหมด
- กรอง TextMarkupAnnotation
- เรียกส่วนข้อความที่เน้น
ต่อไปนี้เป็นข้อมูลโค้ดตามขั้นตอนด้านบน ซึ่งสามารถใช้เพื่อรับข้อความไฮไลท์จากไฟล์ PDF:
Document doc = new Document(dataDir + "ExtractHighlightedText.pdf");
// วนรอบคำอธิบายประกอบทั้งหมด
foreach (Annotation annotation in doc.Pages[1].Annotations)
{
// ตัวกรอง TextMarkup คำอธิบายประกอบ
if (annotation is TextMarkupAnnotation)
{
TextMarkupAnnotation highlightedAnnotation = annotation as TextMarkupAnnotation;
// เรียกส่วนข้อความที่เน้น
TextFragmentCollection collection = highlightedAnnotation.GetMarkedTextFragments();
foreach (TextFragment tf in collection)
{
// แสดงข้อความที่เน้น
Console.WriteLine(tf.Text);
}
}
}
แยกข้อความ PDF ที่มีการใช้หน่วยความจำต่ำโดยใช้ C
ต่อไปนี้เป็นสองวิธีที่แตกต่างกันในการเพิ่มประสิทธิภาพการใช้หน่วยความจำในขณะที่แยกข้อความจากเอกสาร PDF โดยใช้ภาษา C#
i) การใช้ Reset() และ FreeMemory() วิธีการ
บางครั้งการดึงข้อความอาจใช้หน่วยความจำและตัวประมวลผลขนาดใหญ่ เป็นไปได้ว่าไฟล์อินพุตมีขนาดใหญ่และมีข้อความจำนวนมาก เนื่องจากอ็อบเจกต์ TextFragmentAbsorber เก็บเศษข้อความทั้งหมดที่พบในหน่วยความจำ
ดังนั้น วิธีแก้ปัญหาที่เราแนะนำคือเรียกเมธอด absorber.Reset() หลังจากประมวลผลแต่ละหน้า ยิ่งไปกว่านั้น หากคุณกำลังดำเนินการอ่านเพียงอย่างเดียว คุณยังสามารถเพิ่มหน่วยความจำที่จัดเก็บโดยวัตถุเพจได้ด้วยเมธอด page.FreeMemory() ดังนั้นคุณต้องทำตามขั้นตอนด้านล่างเพื่อใช้ทรัพยากรให้น้อยที่สุด:
- โหลดเอกสาร PDF ต้นทาง
- ระบุ TextEditOptions
- อ่าน ส่วนข้อความ
- เรียกใช้เมธอด Reset()
- เรียกเมธอด FreeMemory()
ข้อมูลโค้ดต่อไปนี้สาธิตการแยกข้อความจากเอกสาร PDF โดยใช้ C#:
Document pdfDocument = new Document(dataDir + @"ITF-TTF Manual.pdf");
TextFragmentAbsorber absorber = new TextFragmentAbsorber(new TextEditOptions(TextEditOptions.FontReplace.RemoveUnusedFonts));
foreach (Page page in pdfDocument.Pages)
{
page.Accept(absorber);
//อ่านบางสิ่งจากเศษส่วน
count += absorber.TextFragments.Count;
absorber.Reset();
page.FreeMemory();
//GC.Collect();
}
เราได้ทดสอบข้อมูลโค้ดนี้ด้วยไฟล์ตัวอย่างขนาดใหญ่ที่มี 450 หน้า เศษข้อความ 24500 และรูปภาพแรสเตอร์และเวกเตอร์จำนวนมาก กระบวนการนี้ใช้หน่วยความจำเพียง 500MB เคล็ดลับอีกอย่างคือคุณอาจเรียกเก็บเงินจากตัวรวบรวมขยะ .NET เพื่อลดการใช้หน่วยความจำสูงสุดให้เหลือประมาณ 250MB โดยมีค่าใช้จ่ายเพิ่มเติม 10 วินาทีในการประมวลผล
ii) การใช้การแจงนับ MemorySaving
Aspose.PDF for .NET API รองรับการกำหนดค่าโหมดประหยัดหน่วยความจำขณะอ่านข้อความจากไฟล์ PDF การแจงนับ TextExtractionOptions.TextFormattingMode ตอบสนองวัตถุประสงค์ของการใช้ทรัพยากรที่เหมาะสมที่สุด ขั้นตอนต่อไปนี้สรุปขั้นตอนที่คุณต้องปฏิบัติตามสำหรับแนวทางนี้:
- โหลดไฟล์ PDF ต้นทาง
- สร้างวัตถุ TextDevice
- ตั้งค่า TextExtractionOptions
- แยกข้อความและเขียนข้อความลงในไฟล์
ข้อมูลโค้ดด้านล่างแสดงให้เห็นถึงวิธีการประหยัดหน่วยความจำโดยใช้ C #:
// เปิดเอกสาร
Document pdfDocument = new Document(dataDir + "Test.pdf");
System.Text.StringBuilder builder = new System.Text.StringBuilder();
// สตริงเพื่อเก็บข้อความที่แยกออกมา
string extractedText = "";
foreach (Page pdfPage in pdfDocument.Pages)
{
using (MemoryStream textStream = new MemoryStream())
{
// สร้างอุปกรณ์ข้อความ
TextDevice textDevice = new TextDevice();
// ตั้งค่าตัวเลือกการดึงข้อความ - ตั้งค่าโหมดการดึงข้อความ (ดิบหรือบริสุทธิ์)
TextExtractionOptions textExtOptions = new
TextExtractionOptions(TextExtractionOptions.TextFormattingMode.MemorySaving);
textDevice.ExtractionOptions = textExtOptions;
// แปลงหน้าใดหน้าหนึ่งและบันทึกข้อความลงในสตรีม
textDevice.Process(pdfPage, textStream);
// แปลงหน้าใดหน้าหนึ่งและบันทึกข้อความลงในสตรีม
textDevice.Process(pdfDocument.Pages[1], textStream);
// ปิดสตรีมหน่วยความจำ
textStream.Close();
// รับข้อความจากสตรีมหน่วยความจำ
extractedText = Encoding.Unicode.GetString(textStream.ToArray());
}
builder.Append(extractedText);
}
dataDir = dataDir + "Memory_Text_Extracted.txt";
// บันทึกข้อความที่แยกออกมาในไฟล์ข้อความ
File.WriteAllText(dataDir, builder.ToString());
บทสรุป
เราได้สำรวจกรณีการใช้งานที่เป็นประโยชน์บางส่วนในบทความนี้ มีความเป็นไปได้ที่ไม่มีที่สิ้นสุดในการแยกข้อความจากเอกสาร PDF โดยใช้ C# กับ Aspose.PDF for .NET API คุณสามารถเรียนรู้เพิ่มเติมผ่าน เอกสาร API ในกรณีที่มีคำถามใดๆ โปรดติดต่อเราที่ ฟอรัมสนับสนุนฟรี