【发布时间】:2015-02-10 13:16:22
【问题描述】:
我正在尝试从一组 PDF 中提取一些信息。到目前为止,这是可行的,但是一个 PDF 让我感到不满。
我正在使用 PDFBox 1.8.8 和 Java 7。
PDDocument document = PDDocument.load(pdfFile);
PDFTextStripper stripper = new PDFTextStripper();
System.out.println("File: "+pdfFile.getAbsolutePath()+" readable: "+pdfFile.canRead()+" size: "+pdfFile.length());
System.out.println(stripper.getText(document));
它只是打印
File: /foo/bar/mypdf.pdf readable: true size: 1267743
然后它终止。通常我使用 writeText 方法并将文本汇集到一个流中,但上面的代码用于简化。我尝试使用pdftotext 转换 PDF - 它的工作原理和其他的一样。
我没有例外,没有什么。有什么想法吗?
编辑: 附加信息:使用 Acrobat Distiller 9.0.0 (Windows) 创建,格式为 PDF-1.6;其他 PDF 是 1.4 和 1.5 版
似乎不包含外来字符。我可以在 Evince PDF-viewer 中标记/复制文本
EDIT2:
该死。文件属性对话框(Nautilus)说“安全:否”,但pdfinfo 给了我:
Encrypted: yes (print:yes copy:no change:no addNotes:no algorithm:AES)
无论如何要绕过它?毕竟,pdftotext 可以将文本输出。
【问题讨论】:
-
你能分享 PDF 来重现这个问题吗?而且... 然后它终止 - 您是否尝试将
System.out.println(stripper.getText(document));包含在try { ... } catch (Throwable t) { t.printStackTrace(); }中? -
如果 pdf 包含非拉丁字符,PdfBox 有时会失败。是这样吗??
-
@mkl 恐怕我不能 :( 它与工作有关。它终止了,公元前。我在上面的代码后面放了一个 System.exit(1)。但它应该先打印一些东西。确实尝试了所有方法,但没有。
-
@SurajeetBharati 据我所见,它没有。但我刚刚检查并看到,它是 1.6 格式的唯一 PDF。其他是1.4、1.5。 PDFbox 支持吗?什么都找不到。
-
PDFBox1.8.8 适用于 PDF v1.6 Reference。肯定还有其他情况。