我们如何从PDF文件中提取文本内容,我们使用pdfbox从PDF文件中提取文本,但我们不需要页眉和页脚。我正在使用以下java代码。
PDFTextStripper stripper = null;
try {
stripper = new PDFTextStripper();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
stripper.setStartPage(pageCount);
stripper.setEndPage(pageCount);
try {
String pageText = stripper.getText(document);
System.out.println(pageText);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
答案 0 :(得分:3)
您已将此标记为itext / itextpdf问题,但您使用的是PdfBox。这令人困惑。
您还声称您的PDF文件有页眉和页脚。这意味着您的PDF是标记PDF,标题和页脚被标记为工件。如果是这种情况,那么您应该利用PDF的标记性质,并像ParseTaggedPdf示例中那样提取PDF:
TaggedPdfReaderTool readertool = new TaggedPdfReaderTool();
PdfReader reader = new PdfReader(StructuredContent.RESULT);
readertool.convertToXml(reader, new FileOutputStream(RESULT));
reader.close();
如果这不会产生任何结果,您显然没有标记PDF,在这种情况下,从技术角度来看,文档中没有页眉和页脚。您可能会用人眼看到页眉和页脚,但这并不意味着机器会看到这些页眉和页脚。对于一台机器,它只是文本,就像页面中的任何其他文本一样。
ExtractPageContentArea示例显示了在解析内容时我们如何定义一个排除页眉和页脚的矩形。
PdfReader reader = new PdfReader(pdf);
PrintWriter out = new PrintWriter(new FileOutputStream(txt));
Rectangle rect = new Rectangle(70, 80, 490, 580);
RenderFilter filter = new RegionTextRenderFilter(rect);
TextExtractionStrategy strategy;
for (int i = 1; i <= reader.getNumberOfPages(); i++) {
strategy = new FilteredTextRenderListener(new LocationTextExtractionStrategy(), filter);
out.println(PdfTextExtractor.getTextFromPage(reader, i, strategy));
}
out.flush();
out.close();
reader.close();
在这种情况下,我们手动检查了文档,我们注意到实际文本总是添加到矩形new Rectangle(70, 80, 490, 580)
中。标题添加到Y坐标580上方和坐标80下方。通过使用RegionTextRenderFilter
,我们可以提取除了与我们定义的矩形不重叠的内容之外的内容。