abh*_*rma 2 java pdf itext pdfbox itextpdf
我们如何从 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();
}
Run Code Online (Sandbox Code Playgroud)
您已将此标记为 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();
Run Code Online (Sandbox Code Playgroud)
如果这不会产生任何结果,那么您显然没有带标签的 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();
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我们手动检查了文档,我们注意到实际文本总是添加在矩形内new Rectangle(70, 80, 490, 580)
。标题添加在 Y 坐标 580 上方和坐标 80 下方。通过使用RegionTextRenderFilter
我们可以提取内容,但不包括与我们定义的矩形不重叠的内容。