PDF 文本对象:如果没有 *Tf* 运算符,应该使用什么字体和解码?
PDF Text Object: what font and decoding should be used if there is no *Tf* operator?
如果前面没有 Tf 运算符,应该使用什么字体和编码来解码和显示 BT/ET 块内的字符串?
用空字符串替换这样的字符串可以吗?
例如:
BT
8.04 0 0 8.04 63 67.92 Tm
[(oL)-1 (Om)]TJ
...
...
ET
如果可能,请参考 Adobe 规范或建议。
首先,当前文本字体是一个文本状态参数,因此也是图形状态的一部分。
因此,要确定文本对象中某些文本的当前文本字体,仅在该文本对象内部查找 Tf 操作是不够的。文本字体可能在内容流中设置得更早,可能是在先前的文本对象中,也可能是在页面描述级别。此外,它可能受制于先前的保存图形状态和恢复图形状态操作。
但是如果在文字绘制操作之前真的没有Tf操作呢?嗯,
(ISO 32000-1, Table 105 - 文本状态运算符)
因此,文本字体没有初始值。因此,如果没有 Tf 操作,也没有已知的编码。
也较早:
To paint glyphs, a content stream shall first identify the font to be used. The Tf operator shall specify the name of a font resource.
(ISO 32000-1,第 9.2.2 节 - 显示文本的基础知识)
因此,没有前置Tf的文字绘制操作实际上是无效的!
因此,严格的文本提取器甚至可以停止从有问题的流中提取文本,因为它显然已损坏。
如果前面没有 Tf 运算符,应该使用什么字体和编码来解码和显示 BT/ET 块内的字符串?
用空字符串替换这样的字符串可以吗?
例如:
BT
8.04 0 0 8.04 63 67.92 Tm
[(oL)-1 (Om)]TJ
...
...
ET
如果可能,请参考 Adobe 规范或建议。
首先,当前文本字体是一个文本状态参数,因此也是图形状态的一部分。
因此,要确定文本对象中某些文本的当前文本字体,仅在该文本对象内部查找 Tf 操作是不够的。文本字体可能在内容流中设置得更早,可能是在先前的文本对象中,也可能是在页面描述级别。此外,它可能受制于先前的保存图形状态和恢复图形状态操作。
但是如果在文字绘制操作之前真的没有Tf操作呢?嗯,
(ISO 32000-1, Table 105 - 文本状态运算符)
因此,文本字体没有初始值。因此,如果没有 Tf 操作,也没有已知的编码。
也较早:
To paint glyphs, a content stream shall first identify the font to be used. The Tf operator shall specify the name of a font resource.
(ISO 32000-1,第 9.2.2 节 - 显示文本的基础知识)
因此,没有前置Tf的文字绘制操作实际上是无效的!
因此,严格的文本提取器甚至可以停止从有问题的流中提取文本,因为它显然已损坏。