iText открывает PDF, не может читать контент - PullRequest
0 голосов
/ 23 декабря 2019
PdfReader reader = new PdfReader("E:\\document\\6imm5562e.pdf");
PdfDocument doc = new PdfDocument(reader);
String textFromPage = PdfTextExtractor.getTextFromPage(doc.getPage(1));
System.out.println(textFromPage);

Сообщение об ошибке выглядит следующим образом:

Пожалуйста, подождите ...

Если это сообщение в конечном итоге не будет заменено соответствующим содержанием документа, ваш PDFзритель может не иметь возможности отображать этот тип документа.

Вы можете обновить до последней версии Adobe Reader для Windows®, Mac или Linux®, посетив http://www.adobe.com/go/reader_download.

Для получения дополнительной помощи посетите страницу Adobe Reader http://www.adobe.com/go/acrreader.

Windows является зарегистрированным товарным знаком или товарным знаком корпорации Microsoft в США и / или других странах. Mac является товарным знаком Apple Inc., зарегистрированным в США и других странах. Linux является зарегистрированным товарным знаком Линуса Торвальдса в США и других странах.

1 Ответ

1 голос
/ 27 декабря 2019

Неясно на 100%, какие данные вы хотите извлечь, поэтому я предоставлю два варианта:

1) Вы хотите извлечь текст static из PDF (Для этого решения требуется pdfXFA , используя метод flatten ):

public void readXFA() throws IOException, InterruptedException {

    final XFAFlattener xfaFlattener = new XFAFlattener();
    xfaFlattener.flatten(new FileInputStream(INPUT_XFA),
            new FileOutputStream(FLATTENED));

    final PdfDocument doc = new PdfDocument(new PdfReader(FLATTENED));
    String textFromPage = PdfTextExtractor.getTextFromPage(doc.getPage(1));
    System.out.println(textFromPage);
}

, этот код сначала сгладит вашу форму, а затем использует ваш код на сглаженном PDFфайл.

2) Вы хотите извлечь данные, которые были заполнены в форме (для этого вам нужен только iText 7 Core, а метод getXfaFieldValue ):

public void readXFA() throws IOException {
        final String INPUT_XFA = "c:\\temp\\imm5562e.pdf";

        try (PdfDocument pdf = new PdfDocument(new PdfReader(INPUT_XFA))) {
            XfaForm xfaForm = PdfAcroForm.getAcroForm(pdf, false).getXfaForm();
            System.out.println(xfaForm.getXfaFieldValue("TextField2"));
        }
    }

Технически, я думаю, вы можете использовать первый подход для извлечения обоих данных, но тогда вы потеряете способность XFA извлекать данные из формы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...