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

标签 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();
 }

最佳答案

您已将此标记为 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/

相关文章:

java - iText5 中的标题重叠

r - 打印整页世界地图时的空白

c# - 如何使用 ItextSharp 检索数字签名信息(名称、日期...)

ios - 如何去除黄色选择突出显示?

c# - 使用 iTextSharp 将 pdf 显示到网页?

java - 使用 iText 将标题添加到 pdf

java - 搜索字符串是否相差一个字符

java - 如何在Java中调用getsockopt来获取SO_ORIGINAL_DST

java - Android VpnService 如何在打开 Socket 之前处理传入的数据包?

java - 是否可以从 PIT 覆盖范围计算中排除方法?