我们如何从 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();
}
最佳答案
您已将此标记为 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)
内。 header 添加在 Y 坐标 580 上方和坐标 80 下方。通过使用 RegionTextRenderFilter ,我们可以提取不与我们定义的矩形不重叠的内容的内容。
关于java - 如何从PDF文件中提取没有页眉和页脚的文本内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26971401/