【问题标题】:How can I get text's heigth from pdf's transformation matrix?如何从 pdfs 转换矩阵中获取文本高度?
【发布时间】:2015-04-10 15:07:36
【问题描述】:

我正在制作一个 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),但是,我怎么知道文本的高度?)。

谢谢。

【问题讨论】:

  • 首先,您知道(至少!)这里涉及到两个矩阵和三个标量?您拥有当前的转换矩阵、文本矩阵、字体大小、水平缩放和页面用户单位设置。

标签: pdf text matrix height adobe-illustrator


【解决方案1】:

正如评论中已经提到的,您实际上需要处理大量矩阵和标量,至少是当前转换矩阵、文本矩阵、字体大小、水平缩放和页面用户单位设置。当然,您可以将所有这些组合成一个矩阵。

因此,假设您拥有的矩阵就是这个组合的矩阵。

要确定字体从其大小 1 默认状态拉伸的因素,您可以简单地将该矩阵应用于长度为 1 的垂直和水平线段,例如[0, 0, 1] 到 [1, 0, 1] 和 [0, 0, 1] 到 [0, !, 1],然后计算得到的线段的长度。

PS做一些小的线性代数,你会看到一个矩阵

a b 0
c d 0
e f 1

这相当于sqrt(a² + b²)的水平字体范围和sqrt(c² + d²)垂直字体范围(高度)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-09
    • 1970-01-01
    • 1970-01-01
    • 2018-10-25
    • 1970-01-01
    • 2011-02-06
    • 2016-08-06
    相关资源
    最近更新 更多