Trích xuất văn bản từ tệp PDF trong Java

Trích xuất văn bản từ tệp PDF trong Java

Trong thế giới có nhịp độ nhanh này, khối lượng dữ liệu đang mở rộng theo cấp số nhân. Các tệp PDF đang được sử dụng rộng rãi để lưu trữ và thể hiện dữ liệu. Việc xem qua một số lượng lớn các trang PDF để truy cập các đoạn văn hữu ích trở nên khó khăn. Do đó, chúng ta sẽ tìm hiểu cách trích xuất văn bản từ Tệp PDF trong Java theo chương trình. Tuy nhiên, việc tự động hóa toàn bộ quá trình trích xuất văn bản sẽ tiết kiệm thời gian, công sức và sẽ mang lại hiệu quả. Chúng tôi sẽ sử dụng thư viện PDF Java dễ cài đặt, cung cấp các phương pháp có thể định cấu hình để làm việc với các tệp PDF.

Các điểm sau đây sẽ được đề cập trong bài đăng trên blog này:

Thư viện PDF Java - các bước cài đặt

Bạn có thể dễ dàng cài đặt thư viện này trong ứng dụng Java của mình bằng cách tải xuống tệp jar hoặc bạn có thể làm theo các cấu hình Maven sau.

Kho

<repository>
    <id>AsposeJavaAPI</id>
    <name>Aspose Java API</name>
    <url>https://repository.aspose.com/repo/</url>
</repository>

phụ thuộc

<dependency>
    <groupId>com.aspose</groupId>
    <artifactId>aspose-pdf</artifactId>
    <version>20.12</version>
    <classifier>jdk17</classifier>
</dependency>

Trích xuất văn bản từ tệp PDF trong Java

Trong phần này, chúng tôi sẽ viết các bước và đoạn mã trích xuất văn bản từ tất cả các trang của tài liệu PDF.

Trải qua các bước sau:

  1. Mở tài liệu PDF bằng cách tạo đối tượng của lớp Tài liệu.
  2. Khởi tạo một đối tượng của lớp TextAbsorber để thực hiện trích xuất văn bản.
  3. Gọi phương thức getPages() chấp nhận bộ hấp thụ cho tất cả các trang.
  4. Lấy văn bản được trích xuất bằng cách gọi phương thức getText().
  5. Viết văn bản được trích xuất vào tập tin và đóng trình ghi.

Sao chép và dán đoạn mã sau để trích xuất văn bản từ tài liệu PDF theo chương trình.

        // Mở tài liệu PDF bằng cách tạo đối tượng của lớp Tài liệu.
        Document pdfDocument = new Document("INPUT-PDF-FILE");

        // Khởi tạo một đối tượng TextAbsorber để thực hiện trích xuất văn bản.
        TextAbsorber textAbsorber = new TextAbsorber();

        // Gọi phương thức getPages() chấp nhận bộ hấp thụ cho tất cả các trang.
        pdfDocument.getPages().accept(textAbsorber);

        // Lấy văn bản được trích xuất bằng cách gọi phương thức getText().
        String extractedText = textAbsorber.getText();
        try {
            FileWriter writer = new FileWriter(  "PATH-FOR-OUTPUT-FILE/extracted-text.txt", true);
            // Viết một dòng văn bản vào tập tin
            writer.write(extractedText);
            // Đóng luồng
            writer.close();
        } catch (java.io.IOException e) {
            e.printStackTrace();
        }

Cách trích xuất văn bản từ một vùng trang cụ thể

Thư viện này cũng cho phép bạn trích xuất văn bản từ trang mong muốn của tài liệu PDF.

Chúng tôi sẽ làm theo các bước sau để đạt được điều này:

  1. Tạo một đối tượng của lớp Document và tải tệp PDF nguồn.
  2. Khởi tạo một đối tượng của lớp TextAbsorber để trích xuất dữ liệu.
  3. Gọi phương thức getTextSearchOptions() cho phép xác định hình chữ nhật phân cách văn bản được trích xuất.
  4. Gọi getPages() để lấy tập hợp các trang tài liệu và chấp nhận phần hấp thụ cho trang đầu tiên.
  5. Gọi getText() để lấy văn bản được trích xuất và ghi nó vào tệp.
  6. Gọi phương thức close() để đóng luồng.

Sao chép và dán đoạn mã sau vào tệp Java của bạn:

       // tạo một đối tượng của lớp Tài liệu và tải tệp PDF nguồn.
        Document doc = new Document("INPUT-PDF-FILE");
        // khởi tạo một đối tượng của TextAbsorber để trích xuất dữ liệu.
        TextAbsorber absorber = new TextAbsorber();
        // gọi phương thức getTextSearchOptions() cho phép xác định hình chữ nhật phân định văn bản được trích xuất.-
        absorber.getTextSearchOptions().setRectangle(new Rectangle(100, 200, 250, 350));
        // gọi getPages() để lấy tập hợp các trang tài liệu và chấp nhận phần hấp thụ cho trang đầu tiên.
        doc.getPages().get_Item(1).accept(absorber);
        // Gọi getText() để lấy văn bản được trích xuất và ghi nó vào tệp
        String extractedText = absorber.getText();
        // tạo một nhà văn và mở tập tin
        BufferedWriter writer = new BufferedWriter(new FileWriter(new java.io.File("PATH-FOR-OUTPUT-FILE/ExtractedText.txt")));
        // ghi nội dung trích xuất
        writer.write(extractedText);
        // Đóng nhà văn
        writer.close();

Thư viện Java để trích xuất văn bản từ tệp PDF ở dạng đoạn văn

Phần này trình bày các bước sau và các đoạn mã để trích xuất dữ liệu từ tài liệu PDF theo đoạn văn.

  1. Khởi tạo một đối tượng của lớp Tài liệu và tải tệp PDF nguồn.
  2. Tạo một đối tượng của lớp ParagraphAbsorber.
  3. Gọi visit(Document doc) để thực hiện tìm kiếm các phần và đoạn văn trên tài liệu được chỉ định.
  4. Gọi getPageMarkups() để nhận bộ sưu tập PageMarkup đã được hấp thụ.
  5. Lặp lại bộ sưu tập MarkupSection được tìm thấy trên trang bằng phương thức getSections().
  6. Gọi phương thức getParagraphs() này để lấy bộ sưu tập MarkupParagraph được tìm thấy trên trang.
  7. Gọi phương thức getLines() để lặp lại các dòng trong đoạn văn.
        // Khởi tạo một đối tượng của lớp Tài liệu và tải tệp PDF nguồn.
        Document doc = new Document(  "./static/sample.pdf");
        // Tạo một đối tượng của lớp ParagraphAbsorber.
        ParagraphAbsorber absorber = new ParagraphAbsorber();
        // Gọi truy cập(Tài liệu doc) để thực hiện tìm kiếm các phần và đoạn văn trên tài liệu được chỉ định.
        absorber.visit(doc);
        // Gọi getPageMarkups() để lấy bộ sưu tập PageMarkup đã được hấp thụ.
       for (PageMarkup markup : absorber.getPageMarkups()) {
            int i = 1;
            // Lặp lại bộ sưu tập MarkupSection được tìm thấy trên trang bằng phương thức getSections().
           for (MarkupSection section : markup.getSections()) {
                int j = 1;
         // Gọi phương thức getParagraphs() này để lấy bộ sưu tập MarkupParagraph được tìm thấy trên trang. https://apireference.aspose.com/pdf/java/com.aspose.pdf/PageMarkup#getParagraphs--
               for (MarkupParagraph paragraph : section.getParagraphs()) {
                    StringBuilder paragraphText = new StringBuilder();
                    // Gọi phương thức getLines() để lặp lại các dòng trong đoạn văn.
                   for (java.util.List<TextFragment> line : paragraph.getLines()) {
                       for (TextFragment fragment : line) {
                            paragraphText.append(fragment.getText());
                        }
                        paragraphText.append("\r\n");
                    }
                    paragraphText.append("\r\n");

                    System.out.println("Paragraph "+j+" of section "+ i + " on page"+ ":"+markup.getNumber());
                    System.out.println(paragraphText.toString());

                    j++;
                }
                i++;
            }
        }

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

Bạn có thể nhận giấy phép tạm thời miễn phí để dùng thử API mà không bị giới hạn về đánh giá.

Tổng hợp

Điều này đưa chúng ta đến phần cuối của bài viết này. Chúng tôi đã hướng dẫn cách trích xuất văn bản từ Tệp PDF trong Java theo chương trình. Ngoài ra, chúng tôi đã xem qua các đoạn mã để trích xuất văn bản từ một vùng trang cụ thể và cũng đã khám phá việc trích xuất văn bản ở dạng đoạn văn. Ngoài ra, bạn có thể xem qua tài liệu để khám phá các tính năng khác của thư viện PDF Java này. Cuối cùng, conholdate.com vẫn liên tục viết các bài blog mới. Vì vậy, vui lòng giữ liên lạc để cập nhật thông tin mới nhất.

Đặt một câu hỏi

Trong trường hợp có bất kỳ thắc mắc nào, vui lòng viết thư cho chúng tôi tại diễn đàn.

Xem thêm