2011-05-18 155 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似乎忽略了它。