【问题标题】:How to extract a paragraph from a pdf file and store its position?如何从pdf文件中提取段落并存储其位置?
【发布时间】:2014-09-26 09:54:10
【问题描述】:

我将使用 PDFBox 库提取 PDF 文件的内容。内容要逐段处理,每段我都需要它的位置进行后续处理。使用以下代码,我可以提取输入 PDF 的全部内容:

PDDocument doc = PDDocument.load(file);
PDFTextStripper stripper = new PDFTextStripper();
String txt = stripper.getText(doc);
doc.close();

我有两个问题:

  1. 不知道如何逐段提取内容。
  2. 不知道如何存储段落位置以供后续处理(例如高亮等)

谢谢。

【问题讨论】:

  • 正如@user3902842 在他的回答中已经提到的那样,PDF 文件通常不知道段落的概念。你可以用 PDFBox 做的是逐个字母地提取带有位置的文本(PDFBox 可以帮助你识别同一行上的文本)。识别该摘录中的段落将是您的工作。
  • 我已经在issues.apache.org/jira/browse/PDFBOX-4054报告了这是一项改进
  • 你的问题解决了吗?我对答案很感兴趣

标签: pdfbox pdf-extraction


【解决方案1】:

我使用 Poppler 的命令行 pdftohtml 来提取富文本,但如果您需要清理段落,那么 PDF 必须是标记 PDF。如果您需要段落的 (x,y) 坐标,那么您需要深入研究 Poppler。还有 Apache PDFbox Java 库也可以使用。如果您在段落的开头添加注释,那么您可以将注释作为 XML 从 PDF 中提取出来,您将在其中找到注释的 (x,y) 坐标! Adobe 对 PDF 进行了巧妙的加密以使其无法被发现,因此在没有 Adob​​e 工具的情况下将其提取出来可能并不容易(这包括所有的法律麻烦等)。

【讨论】:

  • 如果需要,我需要每个段落的位置来注释它(例如:突出显示它)。在提取输入pdf文件的内容时,不知道每个段落的位置。所以,我不能在段落的开头和结尾做注释。每个注释都需要使用“PDAnnotationTextMarkup.setRectangle()”和“PDAnnotationTextMarkup.setQuadPoints()”函数分配的“PDRectangle”和“QuadPoints”。
猜你喜欢
  • 2011-07-15
  • 2014-04-20
  • 2010-10-19
  • 2014-05-19
  • 2015-03-19
  • 1970-01-01
  • 2019-05-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多