我的任务是为我们公司创建一个 pdf 阅读器应用程序。经过一些研究后,我对 PDF 中的不同运算符感到困惑。我想澄清以下几点:
- The
Tm
运算符用作每条线的起点。 (我的理解正确吗?)
-
If the Tm
运算符是每行的起点,我如何解析显示的文本only在规定的范围内Tm
? e.g.:
BT
0 0 1 rg
/Ti 12 Tf
1 0 0 1 100 100 Tm
0 0 Td
(The quick brown fox ) Tj 0 −13 Td
(ate the lazy mouse.) Tj
ET
//I only want to get the Tj and TJ string being positioned by the Tm
据我所知,每 1000 个单位的字形高度和宽度相当于 1 个单位的文本空间。那么,如果字形宽度为 2000,高度为 1060,这是否意味着它的“真实”宽度和高度分别为 2 和 1.06?
现在我知道其中一些问题听起来非常愚蠢,但我真的没有太多时间去研究。因此,如果有人能帮助我理解这一点,我将不胜感激。
NOTE:pdf阅读器应用程序必须包含搜索和突出显示功能、文本选择、注释、书签等。实际上,您可以在当今几乎所有阅读器中找到所有基本功能。我可能会使用第三方库来让我的生活更轻松,但我最大的问题是文本选择功能。所以我真的需要理解这一点。
您需要熟悉PDF规格,附件 A 包含所有运算符的摘要,以及有关参数的更详细文档的链接,因此这可能是一个很好的起点。
The Tm
运算符不一定设置每行的起点,它一般设置文本矩阵,基本上相当于一个CGAffineTransform
就 Quartz2D 而言。要移动到下一行,文档还可以使用Td
, TD
, "
or T*
运营商。 PDF 文档不一定按照屏幕上显示的顺序绘制文本,它们可以在页面上自由移动,并按照它们认为合适的任何顺序放置字形。 PDF实际上并没有“线”的概念,您必须自己从字形的位置推断出这些概念(这对于下标/上标之类的东西可能很棘手)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)