Как читать из PDF с помощью веб-драйвера Selenium и Java

Я пытаюсь прочитать содержимое файла 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 тип.

ошибка компиляции

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

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

ошибка выполнения

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

1 ответ

Во-первых, если вы не хотите вмешиваться в процесс загрузки 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.)

Другие вопросы по тегам