您不能只替换字符串中的文本 . 我不轻易说 . 我曾经多年前在Acrobat上工作,并在初始版本中使用了文本搜索工具,因此我对文本编码问题有了相当深刻的理解 . 主要问题是PDF中的每个字符串都以某种方式编码 . 这是因为PDF是在Unicode通常可用之前制作的,并且在PostScript中具有历史记录 . PosctScript喜欢为字体提供非常灵活的编码方法,并鼓励重新编码 .
让我们退后一步,了解整体情况 .
PDF格式的字符串中的字符默认情况下用文本运算符显示,编码为一系列8位字符 . 要确定为每个字节绘制的字形,将通过该字体的编码向量推送该字节 . 编码向量将字节映射到字形名称,然后在字体中查找并在页面上绘制 . 请注意,此描述是半真半假的(稍后) .
大多数生成PDF的应用程序都很友好,只使用标准编码,例如 StandardEncoding 或 WinAnsiEncoding ,其中大多数都非常合理 . 其他人将使用标准编码和 encoding delta ,它们是从标准编码到编码的差异 .
有些应用程序试图在它们生成的PDF中更加节俭,因此它们会查看它们使用的字形并决定嵌入字体的子集 . 如果他们只使用大写和小写罗马字母和数字,他们重建没有这些元素的字体,并可能选择重新索引它们并提供一个编码矢量,使字节0x00转到字形'a',0x01转到字形'b'等 .
现在回到半真半假 . 有一类字符由字符ID(或CID)编码,TrueType和OpenType字体属于该类别 . 在这种情况下,您可以访问Unicode,但是还有一个编码步骤,您可以将字符串(现在为UTF16BE)映射到CID,该CID用于从字体中获取字形 . 并且由于没有特别好的理由ÿ