2016-05-17 4 views
0

Написала функцию для чтения текста из документа PDF. Используется язык scala, Selenium, PDFBox 2.0.1.Scala Ошибка PDFBox в коде

Ниже приведен код:

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) 
} 

Показаны ошибки для PDFParser в val parser: PDFParser = new PDFParser(fileToParse)

Сообщение об ошибке:

не удается разрешить конструктору

Попробовал код в Java тоже , получая такую ​​же ошибку.

+1

Правильный вызов - PDDocument doc = PDDocument.load (поток). Использование нового PDFParser() - устаревший метод. Однако я не знаю, является ли это причиной ваших проблем. –

ответ

1

Вы используете PDFBox версию 2.x, однако вы, очевидно, следуете документам для версии 1.x. В 2.0 нет такого конструктора. Некоторые вещи изменились, включая разбор. Следуйте за migration guide или вернитесь к 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

Файл может быть зашифрован пустым паролем пользователя, поэтому. Это происходит довольно часто и заключается в ограничении разрешений (например, запрет на удаление текста, печать и т. Д.), –

Смежные вопросы