Matlab 2017a 是否更改了它导入外部 java 类 的方式?
Did Matlab 2017a change how it imports external java classes?
我正在从 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());
但是,这会导致 PDFBox 在我调用 load
时出现问题:
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 个问题:
- Matlab 2017a 是否更改了将字符串传递给 Java 的方式?我在 release notes 中没有看到任何关于此的信息。
- 什么可能导致 PDFBox 错误? Matlab 在 2017a 中仍在使用 Java 1.7,所以我认为 PDFBox 的工作方式应该没有任何区别。
您调用的方法似乎来自PDDocument version 1.8.11
在最新版本中,PDDocument version 2.0.2接受文件名的方法签名不再存在。
将您的代码更改为以下内容,它应该可以工作。
pdfFile = PDDocument.load(java.io.File(filename));
我正在从 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());
但是,这会导致 PDFBox 在我调用 load
时出现问题:
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 个问题:
- Matlab 2017a 是否更改了将字符串传递给 Java 的方式?我在 release notes 中没有看到任何关于此的信息。
- 什么可能导致 PDFBox 错误? Matlab 在 2017a 中仍在使用 Java 1.7,所以我认为 PDFBox 的工作方式应该没有任何区别。
您调用的方法似乎来自PDDocument version 1.8.11
在最新版本中,PDDocument version 2.0.2接受文件名的方法签名不再存在。
将您的代码更改为以下内容,它应该可以工作。
pdfFile = PDDocument.load(java.io.File(filename));