Вы правы, 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.
Если вы генерируете FDF в сценарии PHP, вы можете сделать что-то вроде этого:
<<
/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).
Наконец, вы также можете записать кодовую точку Unicodeдля любого символа в восьмеричной записи (\ ddd).Например, у ö есть кодовая точка U + 00F6, которая в восьмеричном является 366, поэтому вы можете написать:
<<
/V (\366zil)
/T (name)
>>
Однако это работает только до U + 00FF (восьмеричное 377).Кроме того, вам придется использовать UTF-16.
Стандарт PDF позволяет вам установить кодировку UTF-8 для всего документа FDF.Я попробовал это, и он не работал с 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 просто игнорирует это.