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

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.

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.

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.

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.

Xem thêm