PDF转换时如何将#9替换为可用制表符实现固定宽度对齐
PDF制表位对齐实现方案
最稳妥的固定间距实现方式
完全不需要依赖空格或者制表符,直接用PDF原生的文本位移指令即可实现不受字符宽度影响的对齐效果,你要100水平像素的固定间距可以直接用Td指令实现:
- 你可以先按
#9分割原始字符串,得到['ID', 'NAME', 'VALUE']三个文本片段 - 每输出一个片段后,插入
水平位移值 0 Td指令,就可以向右移动指定距离,再输出下一个片段
示例生成的PDF文本语法代码如下:
BT /F1 12 Tf % 提前设置你使用的字体和字号 0 792 Td % 定位到文本块的起始坐标(这里示例是A4纸左上角) (ID) Tj 100 0 Td % 向右位移100单位,可按需调整数值到你要的间距 (NAME) Tj 100 0 Td % 再次位移对应间距 (VALUE) Tj ET
如果要严格对应100像素的间距,按通用96DPI换算的话,PDF默认的点单位下100像素对应75点,你把上面的100改成75即可。
多行列批量对齐方案
如果你需要多行内容的第二、第三列统一对齐到固定位置(类似表格效果),可以直接给每一列预设固定的X坐标,每输出一列后用Td直接跳转到下一列的绝对X坐标即可:
BT /F1 12 Tf % 第一行内容 50 792 Td (ID001) Tj 150 792 Td (测试长名称W开头) Tj 250 792 Td (值1) Tj % 第二行内容 50 776 Td (ID002非常长的前缀) Tj 150 776 Td (短名I开头) Tj 250 776 Td (值2) Tj ET
这种方案下无论前一列的内容是宽字符还是窄字符,所有行的对应列都会严格对齐在预设的X坐标位置,不会出现任何错位。
直接替换空格的方案之所以会失效,是因为绝大多数PDF使用的是比例字体,每个字符的宽度不固定,就算用等宽字体也会受字号影响,灵活度和对齐精度远低于直接调整文本坐标的方案。
内容的提问来源于stack exchange,提问作者peteri77
相关产品推荐
相关产品推荐

