Как читать из PDF, используя Selenium Webdriver и Java - PullRequest
0 голосов
/ 04 июля 2018

Я пытаюсь прочитать содержимое файла PDF с помощью Java-Selenium. Ниже мой код. getWebDriver - это пользовательский метод в рамках. Возвращает веб-драйвер.

URL urlOfPdf = new URL(this.getWebDriver().getCurrentUrl());

BufferedInputStream fileToParse = new BufferedInputStream(urlOfPdf.openStream());

PDFParser parser = new PDFParser((RandomAccessRead) fileToParse);
parser.parse();

String output = new PDFTextStripper().getText(parser.getPDDocument());

Вторая строка кода дает ошибку времени компиляции, если я не анализирую ее по типу RandomAccessRead.

compilation error

И когда я его анализирую, я получаю эту ошибку времени выполнения:

java.lang.ClassCastException: java.io.BufferedInputStream нельзя преобразовать в org.apache.pdfbox.io.RandomAccessRead

runtime error

Мне нужна помощь в устранении этих ошибок.

1 Ответ

0 голосов
/ 04 июля 2018

Прежде всего, если вы не хотите вмешиваться в процесс загрузки PDF, нет необходимости явно использовать класс PdfParser. Вместо этого вы можете использовать статический PDDocument.load метод:

URL urlOfPdf = new URL(this.getWebDriver().getCurrentUrl());

BufferedInputStream fileToParse = new BufferedInputStream(urlOfPdf.openStream());

PDDocument document = PDDocument.load(fileToParse);

String output = new PDFTextStripper().getText(document);

В противном случае, если вы делаете хотите вмешаться в процесс загрузки, вам необходимо создать RandomAccessRead экземпляр для вашего BufferedInputStream, вы не можете просто приведение это потому что классы не связаны.

Вы можете сделать это так

URL urlOfPdf = new URL(this.getWebDriver().getCurrentUrl());

BufferedInputStream fileToParse = new BufferedInputStream(urlOfPdf.openStream());

MemoryUsageSetting memUsageSetting = MemoryUsageSetting.setupMainMemoryOnly();
ScratchFile scratchFile = new ScratchFile(memUsageSetting);
PDFParser parser;
try
{
    RandomAccessRead source = scratchFile.createBuffer(fileToParse);
    parser = new PDFParser(source);
    parser.parse();
}
catch (IOException ioe)
{
    IOUtils.closeQuietly(scratchFile);
    throw ioe;
}

String output = new PDFTextStripper().getText(parser.getPDDocument());

(Это по сути копируется и вставляется из источника PDDocument.load.)

...