用PDFTk填充PDF时奇怪的字符

我在Ubuntu上使用PDF和PDFTK。 当用数据填充PDF文件时,我会得到带有重音符号的怪异字符: áóí 。 我正在使用UTF-8编码:我使用echo mb_check_encoding ($ var,'UTF-8')来检查输出1 – TRUE。 任何想法我可以做什么?

我也尝试用utf8_decode转换到ISO,但仍然没有运气。

谢谢

你是对的,utf8_decode()将适用于可以被编码为Windows-1252(即U + 0000-U + 00FF)的字符。

但是它不适用于在Windows-1252中无法编码的字符。

虽然你可以使用UTF-16BE来编码字符。 您只能对单个字段执行此操作,例如对单词“özil”进行编码:

<< /V (þÿ^@ö^@z^@i^@l) /T (name) >> 

(这里“^ @”表示一个NUL字符(U + 0000),这是它在我的编辑器(vim)中的样子,如果这个文件是在Windows-1252(latin1)中编码的。

请注意,您需要使用字节顺序标记(如果您的文件在Windows-1252中进行了编码,将显示为“þÿ”),您需要使用UTF-16编码整个字符串(在两个括号之间)。

如果你在一个PHP脚本中生成FDF,你可以这样做:

 << /V (<?php echo chr(0xfe) . chr(0xff) . str_replace(array('\\', '(', ')'), array('\\\\', '\(', '\)'), mb_convert_encoding("özil", 'UTF-16BE')); ?>) /T (name) >> 

你也可以写出这样的十六进制代码(即用尖括号而不是圆括号括起来):

 << /V <FEFF00F6007A0069006C> /T (name) >> 

这有完全相同的结果(字符串“özil”)。 它在字符方面效率较低,但在pdftk中似乎更可靠,这在我发现的一些bug(2.02版本)中是比较可靠的。

最后,还可以用八进制表示法(\ ddd)为任何字符写出Unicode代码点。 例如,ö的代码点U + 00F6,它的八进制是366,所以你可以这样写:

 << /V (\366zil) /T (name) >> 

但是,这只适用于U + 00FF(八进制377)。 除此之外,你必须使用UTF-16。

PDF标准允许您将整个FDF文档的编码设置为UTF-8。 我试过这个,它不适用于pdftk,但理论上它是这样做的:

 %FDF-1.2 1 0 obj << /Version /1.3 /Encoding /utf_8 /FDF 

(根据标准,您也可能必须将标题中的FDF版本设置为1.3(或更多))。

您也可以在现场级别执行此操作:

 << /V (özil) /T (name) /Encoding /utf_8 >> 

但正如我所说,我没有设法得到任何这个工作。 pdftk似乎忽略了它。

用utf8_decode解决。 我想有一些缓存问题,字符仍然显示