我在Ubuntu上使用php与PDFTK。当用数据填充PDF时,我会得到带有重音的这些字母的怪异字符:áóí。我正在使用UTF-8编码:我使用echo mb_check_encoding($ var,'UTF-8')进行了检查,其输出结果为 - TRUE。任何想法我可以做什么?使用PDFTk填充PDF时奇怪的字符
我也试着用utf8_decode转换到ISO,但仍然没有运气。
谢谢
我在Ubuntu上使用php与PDFTK。当用数据填充PDF时,我会得到带有重音的这些字母的怪异字符:áóí。我正在使用UTF-8编码:我使用echo mb_check_encoding($ var,'UTF-8')进行了检查,其输出结果为 - TRUE。任何想法我可以做什么?使用PDFTk填充PDF时奇怪的字符
我也试着用utf8_decode转换到ISO,但仍然没有运气。
谢谢
你是对的,utf8_decode()将适用于可以编码为Windows-1252(即U + 0000-U + 00FF)的字符。
但是它不适用于无法在Windows-1252中编码的字符。
虽然你可以使用UTF-16BE来编码字符。您只能为单个字段执行此操作,例如编码词“厄齐尔”:
<<
/V (þÿ^@ö^@z^@i^@l)
/T (name)
>>
(这里的“^ @”表示NULL字符(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中它似乎更可靠,这在我发现的一些错误中(2.02版本)。
最后,您还可以为八进制记号(\ ddd)中的任何字符写出Unicode代码点。例如,O具有代码点U + 00F6,这在八进制是366,所以你可以写:
<<
/V (\366zil)
/T (name)
>>
然而,这仅仅工作到U + 00FF(八进制377)。除此之外,你必须使用UTF-16。
PDF standard允许您为整个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似乎忽略了它。
关于文本字符串,请参阅pdf参考1.7页157。那么你会知道UTF-8可能是错误的。 – juFo 2017-09-26 12:07:30