PDF là một trong những định dạng tài liệu phổ biến hiện nay. Nó hỗ trợ văn bản, đồ họa, bảng, chú thích và một loạt các yếu tố khác. Trong một số trường hợp nhất định, bạn có thể cần trích xuất dữ liệu từ các bảng trong tài liệu PDF chẳng hạn như hóa đơn. Để đạt được điều này theo chương trình, bài viết trình bày cách trích xuất dữ liệu từ các bảng trong PDF bằng Java.
- Java API để trích xuất dữ liệu từ các bảng trong PDF
- Trích xuất dữ liệu từ các bảng trong PDF
- Trích xuất bảng từ một khu vực cụ thể của trang
Trích xuất dữ liệu từ các bảng trong PDF - Java API
Aspose.PDF dành cho Java là một API giàu tính năng để tạo và thao tác các tài liệu PDF. Chúng tôi sẽ sử dụng API này để trích xuất dữ liệu từ các bảng trong tài liệu PDF. Bạn có thể tải xuống JAR của API hoặc cài đặt nó trong ứng dụng Java của mình bằng cách sử dụng các cấu hình Maven sau.
<repository>
<id>AsposeJavaAPI</id>
<name>Aspose Java API</name>
<url>https://repository.aspose.com/repo/</url>
</repository>
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-pdf</artifactId>
<version>21.9</version>
</dependency>
Trích xuất dữ liệu từ các bảng trong PDF trong Java
Sau đây là các bước để trích xuất dữ liệu từ các bảng trong một tệp PDF bằng Java.
- Đầu tiên, 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.getPages().
- 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.getTableList().
- Đối với mỗi AbsorbedTable trong tập hợp, hãy lặp lại qua tập hợp các hàng từ AbsorbedTable.getRowList().
- Đối với mỗi AbsorbedRow trong tập hợp, hãy lặp lại qua tập hợp các ô từ AbsorbedRow.getCellList().
- 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ừ các bảng trong PDF bằng Java.
// Tải tài liệu PDF nguồn
com.aspose.pdf.Document pdfDocument = new com.aspose.pdf.Document("sample.pdf");
// Tạo một người kiểm soát bảng
com.aspose.pdf.TableAbsorber absorber = new com.aspose.pdf.TableAbsorber();
// Quét trang
for (com.aspose.pdf.Page page : pdfDocument.getPages()) {
// Trang Vist
absorber.visit(page);
// Lặp lại qua các bảng
for (com.aspose.pdf.AbsorbedTable table : absorber.getTableList()) {
System.out.println("Table");
// Lặp lại danh sách các hàng
for (com.aspose.pdf.AbsorbedRow row : table.getRowList()) {
// Lặp lại danh sách ô
for (com.aspose.pdf.AbsorbedCell cell : row.getCellList()) {
// Lặp lại qua các đoạn văn bản
for (com.aspose.pdf.TextFragment fragment : cell.getTextFragments()) {
StringBuilder sb = new StringBuilder();
for (com.aspose.pdf.TextSegment seg : fragment.getSegments())
sb.append(seg.getText());
System.out.print(sb.toString() + "|");
}
}
System.out.println();
}
}
}
Java: Trích xuất dữ liệu bảng từ một khu vực cụ thể của trang PDF
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 Java.
- Đầu tiên, tải tài liệu PDF bằng lớp Tài liệu.
- Sau đó, chọn Trang mong muốn từ bộ sưu tập Document.getPages().
- Trích xuất chú thích Hình vuông của trang.
- 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 lại danh sách các bảng trong bộ sưu tập TableAbsorber.getTableList().
- Kiểm tra xem bảng hấp thụ có nằm trong vùng trang mong muốn hay không.
- Đối với mỗi AbsorbedTable trong tập hợp, hãy lặp lại qua tập hợp các hàng bằng cách sử dụng AbsorbedTable.getRowList().
- Đối với mỗi AbsorbedRow trong tập hợp, hãy lặp lại qua tập hợp các ô bằng cách sử dụng AbsorbedRow.getCellList().
- 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 các bảng từ một vùng cụ thể của trang PDF.
// Tải tài liệu PDF nguồn
com.aspose.pdf.Document pdfDocument = new com.aspose.pdf.Document("sample.pdf");
// Tham khảo trang mong muốn
com.aspose.pdf.Page page = pdfDocument.getPages().get_Item(1);
// Tạo bộ chọn chú thích
com.aspose.pdf.AnnotationSelector annotationSelector = new com.aspose.pdf.AnnotationSelector(
new com.aspose.pdf.SquareAnnotation(page, com.aspose.pdf.Rectangle.getTrivial()));
// Nhận danh sách các chú thích
java.util.List<com.aspose.pdf.Annotation> list = annotationSelector.getSelected();
if (list.size() == 0) {
System.out.println("Marked tables not found..");
return;
}
// Tạo chú thích hình vuông
com.aspose.pdf.SquareAnnotation squareAnnotation = (com.aspose.pdf.SquareAnnotation) list.get(0);
// Tạo bộ hấp thụ bảng và truy cập trang
com.aspose.pdf.TableAbsorber absorber = new com.aspose.pdf.TableAbsorber();
absorber.visit(page);
// Lặp lại qua các bảng
for (com.aspose.pdf.AbsorbedTable table : absorber.getTableList()) {
{
// Kiểm tra xem bảng có tồn tại không
boolean isInRegion = (squareAnnotation.getRect().getLLX() < table.getRectangle().getLLX())
&& (squareAnnotation.getRect().getLLY() < table.getRectangle().getLLY())
&& (squareAnnotation.getRect().getURX() > table.getRectangle().getURX())
&& (squareAnnotation.getRect().getURY() > table.getRectangle().getURY());
if (isInRegion) {
for (com.aspose.pdf.AbsorbedRow row : table.getRowList()) {
{
for (com.aspose.pdf.AbsorbedCell cell : row.getCellList()) {
for (com.aspose.pdf.TextFragment fragment : cell.getTextFragments()) {
StringBuilder sb = new StringBuilder();
for (com.aspose.pdf.TextSegment seg : fragment.getSegments())
sb.append(seg.getText());
System.out.print(sb.toString() + "|");
}
}
System.out.println();
}
}
}
}
}
Nhận giấy phép miễn phí
Bạn có thể sử dụng Aspose.PDF for Java mà không bị 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 Java. Hơn nữa, bài viết này đề cập đến cách trích xuất các bảng từ một vùng cụ thể của trang trong PDF. Ngoài ra, bạn có thể tìm hiểu thêm về Aspose.PDF for Java bằng cách sử dụng tài liệu. Ngoài ra, bạn có thể đặt câu hỏi của mình qua diễn đàn của chúng tôi.