我正在尝试使用Java-Selenium读取PDF文件的内容。下面是我的代码。 getWebDriver是框架中的自定义方法。它返回webdriver。
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
我需要摆脱这些错误的帮助。
答案 0 :(得分: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
实例,您不能简单地 cast 它,因为这些类不相关。
您可以这样做
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
的源复制并粘贴的。)