WARN [COSParser:1154] The end of the stream doesn't point to the correct offset, using workaround to read the stream, stream start position: 171, length: 1145844, expected end position: 1146015
public String parseToStringExample() throws IOException, SAXException, TikaException
{
Tika tika = new Tika();
try (InputStream stream = ParsingExample.class.getResourceAsStream("test.pdf")) {
return tika.parseToString(stream); // This should return you the pdf's text
}
}
import com.codeborne.pdftest.PDF;
import static com.codeborne.pdftest.PDF.*;
import static org.junit.Assert.assertThat;
public class PDFContainsTextTest {
@Test
public void canAssertThatPdfContainsText() {
PDF pdf = new PDF(new File("src/test/resources/50quickideas.pdf"));
assertThat(pdf, containsText("50 Quick Ideas to Improve your User Stories"));
}
}
11 回答
你可以找到一个文件(或字节数组)的mime类型,所以你不要愚蠢地依赖扩展 . 我是用光盘的MimeExtractor(http://aperture.sourceforge.net/)做的,或者我前几天看到了一个库(http://sourceforge.net/projects/mime-util)
我使用光圈从各种文件中提取文本,不仅仅是pdf,而且必须调整为pdfs思考(光圈使用pdfbox,但我在pdfbox失败时添加了另一个库作为后备)
以下是我在NUnit测试中使用的内容,它必须针对使用Crystal Reports生成的多个PDF版本进行验证:
这里是NinjaCross代码的改编Java版本 .
还有一些简单的单元测试:
如果你想出任何失败的单元测试,请告诉我 .
由于您使用PDFBox,您可以简单地执行:
如果PDF损坏等,它将以异常失败 .
如果成功,您还可以使用
.isEncrypted()
检查PDF是否已加密你必须尝试这个....
Pdf文件以“%PDF”开头(在TextPad或类似文件中打开一个并查看)
你有什么理由不能用StringReader读取文件并检查这个吗?
我正在使用我在此处和其他网站/帖子中提出的一些建议来确定pdf是否有效 . 我故意破坏了pdf文件,不幸的是,许多解决方案都没有检测到文件已损坏 .
最后,在修改了API中的不同方法之后,我尝试了这个:
这没有抛出异常,但确实输出了这个:
就个人而言,如果文件已损坏我想要抛出异常,以便我自己处理它,但似乎我正在实现的API已经以自己的方式处理它们 .
为了解决这个问题,我决定尝试使用给出warm语句的类(COSParser)来解析文件 . 我发现有一个名为PDFParser的子类,它继承了一个名为"setLenient"的方法,它是键(https://pdfbox.apache.org/docs/2.0.4/javadocs/org/apache/pdfbox/pdfparser/COSParser.html) .
然后我实现了以下内容:
正如我所知,这为我损坏的文件抛出了一个Exception . 希望这可以帮助别人!
也许我来不及回答 . 但是你应该看看Tika . 它在内部使用PDFBox Parser来解析PDF
您只需要导入tika-app-latest * .jar
这将是一个更清洁的解决方案 . 您可以在这里参考Tika用法的更多细节:https://tika.apache.org/1.12/api/
罗杰凯斯的答案是错的!因为并非版本1.3中的所有PDF文件都不是由EOL终止的 . 以下答案适用于所有未损坏的pdf文件:
一般来说,我们可以这样,任何pdf版本都将以%% EOF结束,所以我们可以像下面那样检查 .
有一个非常方便和简单的库来测试PDF内容:https://github.com/codeborne/pdf-test
API非常简单: