Невозможно прочитать файл PDF с помощью PDFBOX

Я пытаюсь заполнить форму PDF с помощью JAVA, но когда я попытался получить поля, используя приведенный ниже код, список пуст.

PDDocument pdDoc = PDDocument.load(filename);
PDAcroForm pdform = pdDoc.getDocumentCatalog().getAcroForm();
List<PDField> field = pdform.getFields();

Затем я попытался прочитать файл с помощью PDFStripper.

PDFTextStripper stripper = new PDFTextStripper();
System.out.println(stripper.getText(pdDoc));

и вывод был следующим

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

Если это сообщение в конечном итоге не будет заменено надлежащим содержимым документа, возможно, ваше средство просмотра 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 является зарегистрированным товарным знаком Линуса Торвальдса в США и других странах».

Но я могу открыть файл вручную и заполнить поля. Я также пробовал другие инструменты, такие как iText. Но снова я не смог получить поля. Как я могу решить эту проблему?


person Dheepikaa    schedule 27.06.2013    source источник


Ответы (1)


Может уже поздно отвечать, но почему бы и нет. Вы можете получить пустой список, если ваш pdf-файл имеет структуру XFA.

PDDocument pdDoc = PDDocument.load(filename);
PDAcroForm pdform = pdDoc.getDocumentCatalog().getAcroForm();
List<PDField> field = pdform.getFields();

Используйте эти строки кода, чтобы начать работу с pdf:

PDXFA xfa = pdform.getXFA();
Document xfaDocument = xfa.getDocument();
NodeList elements = xfaDocument.getElementsByTagName( "SomeElement" );
person Paul    schedule 15.01.2018
comment
Как можно проверить, так это или нет? - person kutschkem; 16.01.2018
comment
Используйте следующий оператор if: if ( pdform.getFields().isEmpty ) { //XFA case } else { //AcroForm case } - person Paul; 16.01.2018