Matlab 2017a是否改变了导入外部java类的方式?

时间:2017-06-02 20:04:41

标签: java matlab pdfbox

我从Matlab调用PDFBox来确定PDF中有多少页面。 Matlba 2016b和之前的一切都很好用。我可以导入库并加载PDF而不会出现问题:

import org.apache.pdfbox.pdmodel.PDDocument;
pdfFile = PDDocument.load(filename);

当我在2017a中运行同样的事情时,我收到以下错误:

No method 'load' with matching signature found for class 
'org.apache.pdfbox.pdmodel.PDDocument'.

我可以在导入后更改行,以便函数签名匹配:

jFilename = java.lang.String(filename);
pdfFile = PDDocument.load(jFilename.getBytes());

但是,当我调用load时,这会导致PDFBox出现问题:

Java exception occurred:
java.io.IOException: Error: End-of-File, expected line
at org.apache.pdfbox.pdfparser.BaseParser.readLine(BaseParser.java:1111)
at org.apache.pdfbox.pdfparser.COSParser.parseHeader(COSParser.java:1874)
at org.apache.pdfbox.pdfparser.COSParser.parsePDFHeader(COSParser.java:1853)
at org.apache.pdfbox.pdfparser.PDFParser.parse(PDFParser.java:242)
at org.apache.pdfbox.pdmodel.PDDocument.load(PDDocument.java:1093)
at org.apache.pdfbox.pdmodel.PDDocument.load(PDDocument.java:1071)
at org.apache.pdfbox.pdmodel.PDDocument.load(PDDocument.java:1053)
at org.apache.pdfbox.pdmodel.PDDocument.load(PDDocument.java:1038)

无论我试图加载的PDF是什么,似乎都会发生此错误。我在PDFBox 1.8.10和2.0.6中遇到了同样的异常。

我离开了2个问题:

  1. Matlab 2017a是否改变了将字符串传递给Java的方式?我在release notes中没有看到任何关于此事的内容。
  2. 可能导致PDFBox错误的原因是什么? Matlab在2017a仍然在Java 1.7上,所以我不认为PDFBox的工作原理应该有什么不同。

1 个答案:

答案 0 :(得分:2)

您调用的方法似乎来自PDDocument version 1.8.11

在最新版本中,PDDocument version 2.0.2接受文件名的方法签名不再存在。

将您的代码更改为以下内容,它应该可以正常工作。

pdfFile = PDDocument.load(java.io.File(filename));