【问题标题】:How to get information about character spacing and word spacing from pdf file?如何从pdf文件中获取有关字符间距和字间距的信息?
【发布时间】:2023-02-01 18:00:28
【问题描述】:

使用 Pymupdf 遇到获取 pdf 文件中文本信息的问题 我在图书馆的 discord 频道询问了有关获取间隔信息的可能性,但他们告诉我图书馆不知道如何与他们合作 也许还有其他图书馆可以做到这一点?

我试图查看其他库,但没有找到。也许我错过了什么....

【问题讨论】:

  • 请提供足够的代码,以便其他人可以更好地理解或重现问题。
  • 经过字符间距和字间距您是指该名称的 PDF 文本状态参数的值,还是指字符和单词之间的实际距离?
  • @mkl 对不起,我的意思是那些参数:行间距、段落间距、字符间距
  • 根据 PyMuPDF:在任何人产生错误印象之前:你能够提取具有所有所需元数据详细信息的文本:文本位置(bbox)、字体属性、书写方向等。所有这些都归结为每一个角色.所有这些都适用于 PDF、XPS、EPUB以及一些更多的文档类型。所以不会返回特定于 PDF 的构造,例如单词和字符间距。
  • @user377394 -行间距在 PyMuPDF 中可用,因为它是一个字体属性,可以在 PyMuPDF 中提取。线间距离也可以很容易地从线边界框计算出来。段落间距甚至不是 PDF 概念。但是段落边界框在 PyMuPDF 中可用。

标签: python python-3.x pdf character-spacing


【解决方案1】:

免责声明:我是 borb 的作者,这个答案中使用的库

通常,您要查找的信息隐藏在抽象层之后。 PDF 库通常允许您提取文本(并且它使用有关单词和字符间距的信息来执行此操作),但它不会向外界提供此信息。

您可以使用borb 来访问此(低级别)信息。 这里的关键概念是EventListener。这是一个界面。每当渲染事件完成时,实现此接口的类都会收到通知。

渲染事件可能包括:

  • 正在呈现的文本
  • 正在渲染的图像
  • 切换到新页面 等等

有一个提取文本的类。所以我建议你查看它的代码。 查看line 62,我们看到任何“呈现一段文本”的事件都被重定向到它自己的单独方法。

_render_text 方法存储 TextRenderInfo 对象,直到页面完成呈现(此时它将使用 TextRenderInfo 对象来确定页面上的文本)。

您可以在line 87 上看到“页面结束”逻辑的运行情况。

在这里你可以看到TextRenderInfo 拥有各种与位置相关的属性。您可以使用get_baseline 访问它。

【讨论】:

    【解决方案2】:

    我通过 pdfminer.six 和 pymupdf 通过获取行和字符位置解决了我的问题 谢谢你们所有人

    【讨论】:

      猜你喜欢
      • 2012-04-22
      • 1970-01-01
      • 2012-04-26
      • 1970-01-01
      • 1970-01-01
      • 2012-10-23
      • 2012-01-16
      • 2010-09-16
      • 2017-04-23
      相关资源
      最近更新 更多