Trích xuất bảng PDF

PDF đã trở thành một trong những định dạng tài liệu được sử dụng rộng rãi nhất trong nhiều lĩnh vực. Trong các trường hợp khác nhau, nó được sử dụng để tạo hóa đơn trong đó dữ liệu có vẻ ở dạng bảng. Trong những trường hợp như vậy, bạn có thể cần phải phân tích cú pháp PDF để đọc dữ liệu từ các bảng theo chương trình. Để đạt được điều này, bài viết trình bày cách trích xuất dữ liệu từ bảng PDF bằng C#.

API C# để trích xuất bảng từ PDF

Để trích xuất dữ liệu từ các bảng trong tệp PDF, chúng tôi sẽ sử dụng Aspose.PDF for .NET. Nó là một API mạnh mẽ cung cấp một loạt các tính năng thao tác trên PDF. Bạn có thể tải xuống API hoặc cài đặt nó bằng NuGet.

PM> Install-Package Aspose.PDF

Trích xuất dữ liệu từ bảng PDF trong C#

Sau đây là các bước để trích xuất dữ liệu từ các bảng trong PDF bằng C#.

Mẫu mã sau đây cho thấy cách trích xuất văn bản từ bảng PDF trong C#.

// Tải tài liệu PDF nguồn
Aspose.Pdf.Document pdfDocument = new Aspose.Pdf.Document("sample.pdf"); 

// Lặp lại các trang                      
foreach (var page in pdfDocument.Pages)
{
	// Tạo một bộ hấp thụ bàn và truy cập trang
	Aspose.Pdf.Text.TableAbsorber absorber = new Aspose.Pdf.Text.TableAbsorber();
	absorber.Visit(page);
	
	// Lặp lại từng bảng hấp thụ 
	foreach (AbsorbedTable table in absorber.TableList)
	{
		Console.WriteLine("Table");
		
		// Lặp qua từng hàng trong bảng
		foreach (AbsorbedRow row in table.RowList)
		{
			// Lặp qua từng ô trong hàng
			foreach (AbsorbedCell cell in row.CellList)
			{       
				// Lặp lại các đoạn văn bản
				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();
		}
	}
}

Trích xuất bảng từ một khu vực cụ thể của trang

Sau đây là các bước để trích xuất bảng từ một phần cụ thể của trang trong tệp PDF bằng C#.

Mẫu mã sau đây cho thấy cách trích xuất bảng từ một vùng cụ thể của trang PDF.

// Tải tài liệu PDF nguồn
Aspose.Pdf.Document pdfDocument = new Aspose.Pdf.Document("sample.pdf"); 

// Chọn trang và trích xuất chú thích hình vuông của nó
var page = pdfDocument.Pages[1];
var squareAnnotation =
	page.Annotations.FirstOrDefault(ann => ann.AnnotationType == Annotations.AnnotationType.Square)
	as Annotations.SquareAnnotation;

// Tạo bộ hấp thụ bảng và truy cập trang
Aspose.Pdf.Text.TableAbsorber absorber = new Aspose.Pdf.Text.TableAbsorber();
absorber.Visit(page);

// Lặp lại từng bảng được hấp thụ trong danh sách 
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)
	{
		// Lặp qua từng hàng của bảng
		foreach (AbsorbedRow row in table.RowList)
		{
			// Lặp qua từng ô trong hàng
			foreach (AbsorbedCell cell in row.CellList)
			{
				// Lặp lại các đoạn văn bản và in văn bản
				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();
		}
	}
}

Nhận giấy phép miễn phí

Bạn có thể sử dụng Aspose.PDF for .NET mà không có giới hạn đánh giá bằng cách sử dụng giấy phép tạm thời.

Sự kết luận

Trong bài viết này, bạn đã học cách trích xuất dữ liệu từ các bảng trong một tệp PDF bằng C#. Hơn nữa, bạn đã thấy cách trích xuất một bảng từ một vùng cụ thể của trang trong PDF. Bạn có thể khám phá thêm về C# PDF API bằng cách sử dụng tài liệu. Ngoài ra, bạn có thể đăng các câu hỏi của mình trên diễn đàn của chúng tôi.

Xem thêm