2017-06-02 57 views
1

我從Matlab調用PDFBox來計算出PDF中有多少頁。一切都與Matlba 2016b和之前的工作很好。我可以導入庫和加載PDF沒有問題:Matlab 2017a是否改變了它如何導入外部java類?

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在我撥打時出現問題:

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錯誤? 2017年,Matlab仍然在Java 1.7上,所以我不認爲PDFBox的工作方式應該有什麼不同。

回答

2

好像你調用的方法是從PDDocument version 1.8.11

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

更改您的代碼到以下,它應該工作。

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

'PDDocument.load(jFilename.getBytes());'的錯誤是因爲PDFBox認爲您將PDF傳遞爲字節流。 –