0

我正在尝试使用 Java-Selenium 读取 PDF 文件的内容。下面是我的代码。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

运行时错误

我需要帮助摆脱这些错误。

4

1 回答 1

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

于 2018-07-04T11:03:34.620 回答