แยกตาราง PDF

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

C # API เพื่อแยกตารางจาก PDF

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

PM> Install-Package Aspose.PDF

แยกข้อมูลจากตาราง PDF ใน C#

ต่อไปนี้เป็นขั้นตอนในการดึงข้อมูลจากตารางใน PDF โดยใช้ C#

  • โหลดเอกสาร PDF โดยใช้คลาส Document
  • วนซ้ำหน้าต่างๆ ในรูปแบบ PDF โดยใช้ชุด Document.Pages
  • ในการวนซ้ำแต่ละครั้ง ให้เริ่มต้นวัตถุ TableAbsorber และไปที่หน้าที่เลือกโดยใช้เมธอด TableAbsorber.Visit(Page)
  • ในลูปที่ซ้อนกัน ให้วนซ้ำผ่านรายการของตารางในคอลเลกชัน TableAbsorber.TableList
  • สำหรับ AbsorbedTable แต่ละรายการในคอลเล็กชัน ให้ทำซ้ำตามคอลเล็กชันของแถวใน AbsorbedTable.RowList
  • สำหรับแต่ละ AbsorbedRow ในคอลเล็กชัน ให้วนซ้ำผ่านคอลเล็กชันของเซลล์ใน AbsorbedRow.CellList
  • สุดท้าย วนซ้ำคอลเลกชัน TextFragments ของแต่ละ AbsorbedCell แล้วพิมพ์ข้อความ

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีแยกข้อความจากตาราง PDF ใน C#

// โหลดเอกสาร PDF ต้นทาง
Aspose.Pdf.Document pdfDocument = new Aspose.Pdf.Document("sample.pdf"); 

// วนซ้ำหน้าต่างๆ                      
foreach (var page in pdfDocument.Pages)
{
	// สร้างตัวดูดซับตารางและไปที่หน้า
	Aspose.Pdf.Text.TableAbsorber absorber = new Aspose.Pdf.Text.TableAbsorber();
	absorber.Visit(page);
	
	// วนซ้ำแต่ละตารางที่ถูกดูดซับ 
	foreach (AbsorbedTable table in absorber.TableList)
	{
		Console.WriteLine("Table");
		
		// วนซ้ำแต่ละแถวในตาราง
		foreach (AbsorbedRow row in table.RowList)
		{
			// วนผ่านแต่ละเซลล์ในแถว
			foreach (AbsorbedCell cell in row.CellList)
			{       
				// วนซ้ำในส่วนย่อยของข้อความ
				foreach (TextFragment fragment in cell.TextFragments)
				{
					var sb = new StringBuilder();
					foreach (TextSegment seg in fragment.Segments)
						sb.Append(seg.Text);
					Console.Write($"{sb.ToString()}|");
				}                           
			}
			Console.WriteLine();
		}
	}
}

แยกตารางออกจากพื้นที่เฉพาะของหน้า

ต่อไปนี้เป็นขั้นตอนในการแยกตารางออกจากส่วนใดส่วนหนึ่งของหน้าใน PDF โดยใช้ C#

  • โหลดเอกสาร PDF โดยใช้คลาส Document
  • เลือก หน้า ที่ต้องการจากคอลเลคชัน Document.Pages
  • แยกคำอธิบายประกอบ Square ของหน้า
  • เริ่มต้นวัตถุ TableAbsorber และไปที่หน้าโดยใช้เมธอด TableAbsorber.Visit(Page)
  • ในลูปที่ซ้อนกัน ให้วนซ้ำผ่านรายการของตารางในคอลเลกชัน TableAbsorber.TableList
  • หากตารางอยู่ในพื้นที่ ให้ทำตามขั้นตอนต่อไปนี้
    • ทำซ้ำผ่านชุดของแถวใน AbsorbedTable.RowList
    • สำหรับแต่ละ AbsorbedRow ในคอลเล็กชัน ให้วนซ้ำผ่านคอลเล็กชันของเซลล์ใน AbsorbedRow.CellList
    • สุดท้าย วนซ้ำคอลเลกชัน TextFragments ของแต่ละ AbsorbedCell แล้วพิมพ์ข้อความ

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีแยกตารางจากพื้นที่เฉพาะของหน้า PDF

// โหลดเอกสาร PDF ต้นทาง
Aspose.Pdf.Document pdfDocument = new Aspose.Pdf.Document("sample.pdf"); 

// เลือกหน้าและแยกคำอธิบายประกอบสี่เหลี่ยมจัตุรัส
var page = pdfDocument.Pages[1];
var squareAnnotation =
	page.Annotations.FirstOrDefault(ann => ann.AnnotationType == Annotations.AnnotationType.Square)
	as Annotations.SquareAnnotation;

// สร้างตัวดูดซับตารางและไปที่หน้า
Aspose.Pdf.Text.TableAbsorber absorber = new Aspose.Pdf.Text.TableAbsorber();
absorber.Visit(page);

// วนซ้ำแต่ละตารางที่ถูกดูดซับในรายการ 
foreach (AbsorbedTable table in absorber.TableList)
{
	var isInRegion = (squareAnnotation.Rect.LLX < table.Rectangle.LLX) &&
	(squareAnnotation.Rect.LLY < table.Rectangle.LLY) &&
	(squareAnnotation.Rect.URX > table.Rectangle.URX) &&
	(squareAnnotation.Rect.URY > table.Rectangle.URY);

	if (isInRegion)
	{
		// วนซ้ำในแต่ละแถวของตาราง
		foreach (AbsorbedRow row in table.RowList)
		{
			// วนผ่านแต่ละเซลล์ในแถว
			foreach (AbsorbedCell cell in row.CellList)
			{
				// วนซ้ำส่วนของข้อความและพิมพ์ข้อความ
				foreach (TextFragment fragment in cell.TextFragments)
				{
					var sb = new StringBuilder();
					foreach (TextSegment seg in fragment.Segments)
					{
						sb.Append(seg.Text);
					}
					var text = sb.ToString();
					Console.Write($"{text}|");
				}
			}
			Console.WriteLine();
		}
	}
}

รับใบอนุญาตฟรี

คุณสามารถใช้ Aspose.PDF for .NET ได้โดยไม่มีข้อจำกัดในการประเมินโดยใช้ ใบอนุญาตชั่วคราว

บทสรุป

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

ดูสิ่งนี้ด้วย