2011-05-18 142 views
2

我在Ubuntu上使用php与PDFTK。当用数据填充PDF时,我会得到带有重音的这些字母的怪异字符:áóí。我正在使用UTF-8编码:我使用echo mb_check_encoding($ var,'UTF-8')进行了检查,其输出结果为 - TRUE。任何想法我可以做什么?使用PDFTk填充PDF时奇怪的字符

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

谢谢

+0

关于文本字符串,请参阅pdf参考1.7页157。那么你会知道UTF-8可能是错误的。 – juFo 2017-09-26 12:07:30

回答

0

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

+0

你在哪里使用它? – Scar 2013-04-19 13:25:47

+0

我和ØÆÅ这样的人物有同样的问题。你能解释一下如何解决这个问题。 – 2014-06-27 07:24:55

+1

将此函数应用于您需要的变量,例如:'$ fdf_data_strings = array( 'pdf_string'=> utf8_decode($ form_state ['values'] ['test']); );' – sergio 2014-06-27 10:59:18

9

你是对的,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似乎忽略了它。