我们如何从没有页眉和页脚的 PDF 文件中提取文本内容

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)

Bru*_*gie 5

您已将此标记为 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我们可以提取内容,但不包括与我们定义的矩形不重叠的内容。