Я использую php с PDFTK на Ubuntu. При заполнении PDF-данными я получаю странные символы для этих букв с акцентами: á ó í . Я использую кодировку UTF-8 : я проверил с echo mb_check_encoding ($ var, 'UTF-8'), который выводит 1 – TRUE. Любая идея, что я могу сделать?
Я также попытался преобразовать в ISO с помощью utf8_decode, но все равно не повезло.
благодаря
Вы правы, 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 просто, кажется, игнорирует его.
Решено с utf8_decode. Я предполагаю, что были некоторые проблемы с кешированием, и персонажи все еще показывали