PDFBOX - Извлечение текста из одного PDF-файла с несколькими страницами (Java) - PullRequest
0 голосов
/ 27 мая 2020

Я извлекаю текст из документа pdf с помощью pdfbox. С существующим кодом идет только текст первой страницы, а других страниц нет. Какой код следует добавить в этот код для отображения всех страниц i. существующий код

public class PDFBoxReadFromFile {


  public static void main(String[] args) throws Exception {

    try (PDDocument document = PDDocument.load(new File("C:\\Users\\ed\\Documents\\test2.pdf"))) {

      if (!document.isEncrypted()) {
        PDFTextStripperByArea stripper = new PDFTextStripperByArea();
        stripper.setSortByPosition(true);
        Rectangle2D rect4 = new Rectangle2D.Double(210, 160, 230, 25);
        Rectangle rect1 = new Rectangle(55, 290, 225, 17);

        Rectangle2D rect2 = new Rectangle2D.Double(281, 255, 255, 20);
        Rectangle2D rect3 = new Rectangle2D.Double(2, 365, 660, 1900);
        stripper.addRegion("class2", rect1);
        stripper.addRegion("class3", rect2);
        stripper.addRegion("class4", rect3);
        stripper.addRegion("class5", rect4);
        PDPage firstPage = document.getPages().get(0);
        stripper.extractRegions(firstPage);
        System.out.println(stripper.getTextForRegion("class5"));
        System.out.println(stripper.getTextForRegion("class2"));
        System.out.println(stripper.getTextForRegion("class3"));
        System.out.println(stripper.getTextForRegion("class4"));

        File file = new File("C:/Users/ed/eclipse-workspace/pdfboxreadfromfile/file.txt");
        FileWriter fw = new FileWriter(file);
        PrintWriter pw = new PrintWriter(fw);
        pw.println(stripper.getTextForRegion("class5"));
        pw.println(stripper.getTextForRegion("class2"));
        pw.println(stripper.getTextForRegion("class3"));
        pw.println(stripper.getTextForRegion("class4"));
        pw.close();

      }
    } catch (IOException e) {
      System.err.println("Exception while trying to read pdf document - " + e);
    }
  }
с l oop

PDPageTree allPages = document.getDocumentCatalog().getPages();
int pageNumber = document.getNumberOfPages();

for (int i = 0; i < pageNumber; i++) {

  PDPage page = (PDPage) allPages.get(i);

  stripper.extractRegions(page);
}

get (0) вывод (отображается только на странице 1)

PO - 00343423 | Vendor: eL - 00074 | Expected DeliveryDate...: 5 / 10 / 2020 | Date...................................: 5 / 10 / 2020
95123 305198 93.00 CK30 60.00 180.00 0.00 0.00
30 250
95024 305200 93.00 K30250ML 60.00 180.00 0.00 0.00
30 250
95048 305201 13.00 CK30250ML 60.00 180.00 0.00 0.00
30 250
65336 304100 20.00 CK24 54.00 540.00 0.00 0.00
350
178749 300145 16.00 PK6BOE 250 ML 18.00 108.00 0.00 0.00
250

вывод get (1) (показывает только часть содержимого со страницы 2) RE ERAL 0ML 20.00 PK12 6.00 ||| 20.00 eS 12.00 240.00 0.00

get (2) output Исключение в потоке «main» java .lang.IndexOutOfBoundsException: индекс на основе 1 выходит за границы: 3 в pdfbox. app@2.0.19/org.apache.pdfbox.pdmodel.PDPageTree.get (PDPageTree. java: 307) в pdfbox. app@2.0.19/org.apache.pdfbox.pdmodel.PDPageTree.get (PDPageTree. java: 232) в pdfboxreadfromfile.PDFBoxReadFromFile.main (PDFBoxReadFromFile. java: 95)

ФАЙЛ PDF - СТРАНИЦА 1 enter image description here СТРАНИЦА 2 enter image description here

...