我正在制作一个pdf解析器,当我尝试读取文本的转换矩阵(Tm)时,我遇到了问题。
例如,当我有一个水平文本时,转换矩阵如下所示:
“71.9871 0 0 73.5 178.668 522.2227 Tm”
这意味着文本的高度是d参数(73.5),每个字符的比例是a / d(71.9871 / 73.5),它必须转换为点(178.668 522.2227)。
如果我旋转此文本,则转换矩阵如下所示:
“63.1614 -34.5367 35.2625 64.4888 181.8616 575.8494 Tm”
如何获得文本的高度,即73.5?
如果我将同一文件导出为svg文件,我会得到这个矩阵: “0.8593 0.4699 -0.4798 0.8774 181.8616 266.0405” 并且文本的高度是73.5。 (我注意到,如果我将旋转文本的d参数除以文本的高度(73.5),我得到svg矩阵的d参数(0.8774),但是如何知道文本的高度?)。
谢谢。
答案 0 :(得分:1)
正如评论中已经提到的,实际上你需要处理大量的矩阵和标量,至少是当前的变换矩阵,文本矩阵,字体大小,水平缩放和页面用户单位设置。当然,您可以将所有这些组合成一个矩阵。
因此,我们假设您拥有的矩阵是这个组合的矩阵。
要确定字体从其大小1默认状态拉伸的因素,您可以简单地将该矩阵应用于长度为1的垂直和水平线段,例如, [0,0,1]到[1,0,1]和[0,0,1]到[0,!,1],然后计算得到的线段的长度。
PS 做一些小的线性代数,你会看到矩阵
a b 0
c d 0
e f 1
这相当于{strong>水平字体范围sqrt(a² + b²)
和垂直字体范围(身高)sqrt(c² + d²)
强>