You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否从PDF中提取自定义空格尺寸?已尝试pymupdf未果

提取PDF中自定义LaTeX空格尺寸的可行方案

方法1:通过文本坐标差间接计算

PDF里的文本都是按坐标绘制的,你可以借助PyMuPDF获取相邻文本块的边界框,通过坐标差值算出空格宽度——虽然它没直接提供空格尺寸,但可以间接实现:

  • 提取页面所有文本片段的坐标与内容
  • 计算前一个文本块右侧x坐标和后一个文本块左侧x坐标的差值,这个数值就是两者之间的空格宽度
  • 可以结合原始LaTeX文本的结构,区分自定义空格和默认单词间距

示例代码(PyMuPDF):

import fitz

doc = fitz.open("your_generated.pdf")
page = doc[0]
# 获取每个文本片段的(x0, y0, x1, y1, 内容)
text_fragments = page.get_text("words")

for i in range(len(text_fragments)-1):
    curr_frag = text_fragments[i]
    next_frag = text_fragments[i+1]
    # 计算两个文本块之间的横向间距
    space_width = next_frag[0] - curr_frag[2]
    print(f"「{curr_frag[4]}」与「{next_frag[4]}」的间距宽度:{space_width}")

得到的数值是PDF的用户单位(通常1单位=1pt),可以结合当前字体字号转换为em单位(比如12pt字体下1em=12pt)。

方法2:解析PDF内容流的位移命令

PDF的内容流会记录所有绘制指令,包括文本位移操作,你可以直接解析这些命令获取空格尺寸:

  • 用page.get_contents()获取页面的内容流字符串
  • 查找文本绘制命令(Tj/TJ)之间的位移命令(Td/Tm),这些命令的参数就是位移距离,横向数值即为空格宽度

方法3:结合LaTeX源码做参考校准

如果能拿到原始LaTeX源码,可以插入已知尺寸的参考元素辅助换算:

  • 在LaTeX中添加一个已知宽度的盒子(比如\hbox to 0.6em{}),生成PDF后测量它的实际宽度
  • 用这个参考值作为基准,换算其他自定义空格的尺寸,避免单位转换误差

注意事项

  • PDF的用户单位默认等于1pt,但部分PDF可能存在页面缩放,需要确认页面的转换因子
  • 若自定义空格和默认空格混杂,要结合原始文本的结构对应区分

内容的提问来源于stack exchange,提问作者sinoTrinity

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 12:03:17