2016-05-17 14 views
0

PDFドキュメントからテキストを読み込むための関数を書きました。 中古のスケーラ言語、Selenium、PDFBox 2.0.1。以下はScalaのPDFBoxエラー

コードです:val parser: PDFParser = new PDFParser(fileToParse)

でPDFParserのエラーを表示

enter code here 
import org.openqa.selenium.firefox.{FirefoxBinary, FirefoxDriver, FirefoxProfile} 
import org.apache.pdfbox.pdfparser.PDFParser 
import org.apache.pdfbox.text.PDFTextStripper 
import java.io.BufferedInputStream 
def pdfreaddata { 
    driver.get("https://www.....pdf") 
    driver.manage.timeouts.implicitlyWait(50, TimeUnit.SECONDS) 
    val url: URL = new URL(driver.getCurrentUrl) 
    println(url) 
    val fileToParse: BufferedInputStream = new BufferedInputStream(url.openStream()) 
    val parser: PDFParser = new PDFParser(fileToParse) 
    parser.parse() 
    val output: String = new PDFTextStripper().getText(parser.getPDDocument) 
    println("pdf Value" + output) 
    parser.getPDDocument.close() 

    driver.manage.timeouts.implicitlyWait(100, TimeUnit.SECONDS) 
} 

エラーメッセージ:

はコンストラクタ

があまりにもJavaでコードを試してみました解決できません。 、同じエラーが発生します。

+1

正しい呼び出しは、PDDocument doc = PDDocument.load(stream)です。新しいPDFParser()を使用するのは時代遅れの方法です。しかし、それがあなたの悩みの原因であるかどうかはわかりません。 –

答えて

1

あなたはPDFBoxバージョン2.xを使用していますが、明らかにバージョン1.xのドキュメントに従っています。 2.0にはそのようなコンストラクタはありません。解析を含むいくつかの点が変更されました。 migration guideに従ってください。あるいは1.8より多くの資料をオンラインで提供しているので、1.8に戻ってください。

0

pdfbox 1.8.12を使用すると、コンストラクタの問題が解決しました。しかし、pdfファイルでさえパスワードで保護されていなかった、それは暗号化されて表示されていた。以下はScalaを使用してpdf文書から暗号化されたテキストを抽出する最後のコードです。将来の誰かに役立つかもしれません。

def pdfreaddata { 
driver.get("https://www....combo.pdf") 
driver.manage.timeouts.implicitlyWait(50, TimeUnit.SECONDS) 
val url: URL = new URL(driver.getCurrentUrl) 
println(url) 
val fileToParse: BufferedInputStream = new BufferedInputStream(url.openStream()) 
val parser: PDFParser = new PDFParser(fileToParse) 
parser.parse() 
val cosDocument:COSDocument = parser.getDocument() 
val pdDocument:PDDocument = new PDDocument(cosDocument) 
if(pdDocument.isEncrypted()) { 
    val sdm: StandardDecryptionMaterial = new StandardDecryptionMaterial(PDF_OWNER_PASSWORD)//PDF_OWNER_PASSWORD ="" 
    pdDocument.openProtection(sdm) 
} 
val output: String = new PDFTextStripper().getText(pdDocument) 
println("pdf Value" + output) 
parser.getPDDocument.close() 

driver.manage.timeouts.implicitlyWait(100, TimeUnit.SECONDS) 
} 
} 
+0

空のユーザーパスワードでファイルを暗号化することができます。そのためです。これは非常に頻繁に起こり、許可を制限することです(例えば、テキストの抽出、印刷などを禁止する) –