假设您正在开发的 C 程序中“手动”(无库)生成 PDF 程序。您想要编写一个为任意文本添加下标的函数。这里最好想象的是 TeX 在排版数学时如何下标 \inf
和 \sup
符号。
现在,当您将下标添加到 \inf
符号时,没有任何有趣的事情发生,它只是坐在那里。另一方面,向 \sup
符号添加下标会导致下标文本向下移动几个单位,因为字母“p”的下降略低于字体的基线。
那么我的问题是,从 Type-1 或 OTF 字体读取字形指标以便完美排版的最佳方法是什么?我特别在寻找 PDF 格式规范中提到的 ascent、descent 和 width 指标。
由于解析字体文件看起来像是“代替 PostScript 解释器工作”,它必须执行那些计算以放置最终构成单词和段落的单个字母,如果我能引用“结束PDF PostScript 流中的最后一个文本字符串。
考虑 PDF PostScript 流的这个片段:BT/F1 12 Tf 0 0 Td (Hello World!)Tj (Hello again!)Tj ET
,“Hello again”呈现精确位置应该是。所以 PostScript 解释器(当然)知道下一批用 Tj
编写的文本应该从哪里开始,但我不知道如何引用此信息以避免所有困惑的字体解析。
如果有人遇到这个麻烦,看看a similar question I posted on Adobe forums ,我在那里也得到了一些有值(value)的信息。
最佳答案
[本文是作为对原始问题的回答而写的:
How do I measure string size when rendered to a PDF using plain C given only the font file, the string and the font size? Is there a way?
它与更新后的问题并不完全匹配。]
PDF 文本渲染的机制和数学在 PDF 规范中进行了详尽的解释 ISO 32000-1 .最重要的是第 8 章图形和第 9 章文本。第 9.4.4 节汇总了有关按顺序绘制的两个字符之间的水平和垂直位移的信息和计算
虽然这看起来有点复杂,但在您的情况下很可能会简化为微不足道的数学运算,因为您说您手动生成整个 PDF,因此,变量的值很可能很微不足道涉及。
很遗憾,您没有提供您手工生成的 PDF;否则,您可能会被更详细地告知在您的情况下可以减少哪些方程式。
关于c - 在普通 C 中测量字符串大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17940913/