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 PDF
- Trích xuất dữ liệu từ bảng PDF trong C#
- Trích xuất bảng từ một khu vực cụ thể của trang
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#.
- Tải tài liệu PDF bằng lớp Tài liệu.
- Lặp lại các trang trong PDF bằng bộ sưu tập Document.Pages.
- Trong mỗi lần lặp, khởi tạo đối tượng TableAbsorber và truy cập trang đã chọn bằng phương thức TableAbsorber.Visit (Trang).
- Trong một vòng lặp lồng nhau, hãy lặp qua danh sách các bảng trong bộ sưu tập TableAbsorber.TableList.
- Đối với mỗi AbsorbedTable trong bộ sưu tập, hãy lặp lại qua bộ sưu tập các hàng trong AbsorbedTable.RowList.
- Đối với mỗi AbsorbedRow trong tập hợp, hãy lặp lại qua tập hợp các ô trong AbsorbedRow.CellList.
- Cuối cùng, lặp qua bộ sưu tập TextFragment của mỗi AbsorbedCell và in văn bản.
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#.
- Tải tài liệu PDF bằng lớp Tài liệu.
- Chọn Trang mong muốn từ bộ sưu tập Document.Pages.
- Trích xuất chú thích Hình vuông của trang.
- Khởi tạo đối tượng TableAbsorber và truy cập trang bằng phương thức TableAbsorber.Visit (Trang).
- Trong một vòng lặp lồng nhau, hãy lặp qua danh sách các bảng trong bộ sưu tập TableAbsorber.TableList.
- Nếu bảng nằm trong vùng thì hãy thực hiện các bước sau.
- Lặp lại qua tập hợp các hàng trong AbsorbedTable.RowList.
- Đối với mỗi AbsorbedRow trong tập hợp, hãy lặp lại qua tập hợp các ô trong AbsorbedRow.CellList.
- Cuối cùng, lặp qua bộ sưu tập TextFragment của mỗi AbsorbedCell và in văn bản.
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.