能否从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
相关产品推荐
相关产品推荐

