【问题标题】:Read paragraphs in order in PDFBox在 PDFBox 中按顺序阅读段落
【发布时间】:2020-03-11 08:56:49
【问题描述】:

我正在尝试使用 PDFBox 解析期刊页面。这是我正在使用的代码的 sn-p:

try (PDDocument document = PDDocument.load(new File("myfile.pdf"))) {

    if (!document.isEncrypted()) {

        PDFTextStripperByArea stripper = new PDFTextStripperByArea();
        stripper.setSortByPosition(true);

        PDFTextStripper tStripper = new PDFTextStripper();
        tStripper.setParagraphEnd("\n");

        String pdfFileInText = tStripper.getText(document);

        String output = "";

        String lines[] = pdfFileInText.split("\\r?\\n");
        for (String line : lines) {
            output += line + "\n";
        }

    }

}

问题是,即使我得到的段落没问题,它们的显示顺序完全是随机的。我需要以自然顺序(从上到下,从左到右)获取段落,但 PDFBox 似乎无缘无故地从页面的一侧跳到另一侧。我的原始 PDF 文件还包含随机位置的图像,我认为这可能与此有关。

以下是未按顺序阅读的 PDF 示例:

这就是我从那个样本中得到的:

GALIZA>2-3
Analizamos os programas de PSOE, PP, 
En Común-Unidas Podemos e do BNG

> Na Galiza hai case 15 librarías por cada 
100.000 habitantes

> Só o 26% das persoas propietarias son 
mulleres, fronte ao 74% de homes 

A media de 
traballadoras dunha 
libraría e de 3,5

TRABALLO>15
Día das Librarías

As oito 
medidas 
electorais 
para Galiza

有没有办法让段落按自然顺序排列?

【问题讨论】:

  • 不看pdf就很难评论。
  • 刚刚添加了一个示例
  • “但 PDFBox 似乎无缘无故地从页面的一侧跳转到另一侧” - 原因是您的特定 PDF 中的文本绘制说明出现在那个奇怪的顺序,PDFBox 只是反映给你...
  • 我就是这么想的,谢谢你的回答。我得另辟蹊径

标签: java parsing pdf pdfbox


【解决方案1】:

这对你有用吗?

        PDDocument document = PDDocument.load(new File("myfile.pdf"));
        PDFTextStripper stripper = new PDFTextStripper();
        stripper.setSortByPosition(true);
        ObjectMapper objectMapper = new ObjectMapper();

        for (int p = 0; p <= document.getNumberOfPages(); p++) {
            stripper.setStartPage(p);
            stripper.setEndPage(p);
            String text = stripper.getText(document);
            System.out.println(text);
        }

可能没有使用使用启发式算法的PDFTextStripperByArea。只是获取文本然后格式化它?你能试试这个吗?

正如我在 cmets 中所说,不直接查看 pdf 很难评估

【讨论】:

  • 现在它读取整行文本,这对我不起作用,因为我试图解析的期刊是按列写的,所以 PDFBox 本质上是在混合不同段落的行相同的y位置
  • 如果你知道位置,你可以试试 ExtractTextByArea。
  • 感谢你们的cmets。不幸的是,这些位置事先是未知的
  • 我在解析一些 pdf 文件时遇到了类似的问题,这个解决方案解决了我的问题,谢谢。如果仍有问题,我还建议使用库/应用程序表格。它可以用作命令行应用程序,也可以用作带有 tabula-java 的 java 库:github.com/tabulapdf/tabula-java
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-30
  • 2011-04-20
  • 2020-09-25
  • 2019-07-17
相关资源
最近更新 更多