Intereting Posts
Laravel $ query-> toSql () теряет отношение extras Проверьте, существует ли ключ массива как другое значение массива UTF-8 Турецкий символ на osCommerce Ошибка анализа при развертывании на общем хостинге (Laravel 4) PHP Catchable fatal error: объект класса не может быть преобразован в строку Построение «фабрики» в PHP SyntaxError: отсутствует) после списка аргументов в динамическом полевом браузере Использует ли Doctrine2 фильтры для удаления операторов Использование PHP / MySQL для расчета процентов Как сделать фотографию и отправить запрос HTTP POST с Android? file_get_contents возвращает 404, когда URL-адрес открыт с помощью браузера, и URL-адрес действителен PHP – сохранить входную переменную для статического повторного использования Обработка элементов в шаблоне сбора с помощью блока отображения данных Yii2: Почему ключ auth в классе User? Как я могу заставить свой PHP-скрипт работать в определенное время каждый день?

Странные символы при заполнении PDF с помощью PDFTk

Я использую 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. Я предполагаю, что были некоторые проблемы с кешированием, и персонажи все еще показывали