PDFTK, CODE128 и UTF-8
Я привык заполнять PDF-формы из PHP, используя PDFTK. Недавно меня попросили вставить штрих-код code-128 в PDF. Для этого я создал PDF-файл с несколькими текстовыми полями для удобочитаемых записей и специальными текстовыми полями, текст которых отображается специальным шрифтом, представляющим символы кода 128. Этот шрифт можно найти здесь: http://www.jtbarton.com/Barcodes/Code128.aspx. Единственная разница между читаемыми человеком полями и штрих-кодом заключается в шрифте, используемом для отображения символов.
До этого шага все отлично работало. С помощью Adobe Reader я могу скопировать и вставить готовый штрих-код в свое специальное поле, он отображается очень хорошо, этот код может быть отсканирован считывателем штрих-кода. Примером примера является Ñ000002HÓ
(Ñ
это стартер, тогда мои данные 000002
контрольная сумма H
следует, и все заканчивается стопором Ó
).
Тогда у меня возникают проблемы при попытке заполнить форму PDFTK. Если я попытаюсь заполнить свое специальное поле Ñ000002HÓ
он отображает только символы в таблице ASCII (т.е. 000002H
) и отображает некоторые квадраты вместо ожидаемых символов штрих-кода для Ñ
а также Ó
, Еще более удивительно, пытаясь заполнить удобочитаемые поля точно такими же Ñ000002HÓ
Фраза работает как шарм.
Я проверил, что оба типа полей получают одинаковую последовательность символов (включая кодировку utf-8), я проверил, что шрифт был хорошо внедрен, чтобы предотвратить проблемы с отображением, я убедился, что файл XFDF правильно сформирован и т. Д.
Здесь образец XFDF, используемый для заполнения формы PDF с полями с именами "человек" и "штрих-код"
<?xml version="1.0" encoding="UTF-8"?>
<xfdf xmlns="http://ns.adobe.com/xfdf/" xml:space="preserve">
<fields>
<field name="human"><value>Ñ000002HÓ</value></field>
<field name="barcode"><value>Ñ000002HÓ</value></field>
</fields>
</xfdf>
Боюсь, у меня больше нет идей, как решить эту проблему. Если вы это сделаете, ваша помощь будет высоко ценится.
1 ответ
Наконец-то я нашел решение. Точнее обходной путь.
Похоже, PDFTK неправильно обрабатывает символы UTF-8 с помощью встроенных шрифтов Identity-H, применяемых к полям формы. Чтобы правильно отобразить файл PDF, вместо замены поля содержимым, просто установите это содержимое в качестве значения по умолчанию для этого поля. Это заставит Acrobat обрабатывать процесс рендеринга поля формы, а не делегировать его в PDFTK.
Для этого просто добавьте need_appearances
в командной строке PDFTK.
ПРИМЕЧАНИЕ. - Поле формы остается в PDF-файле, созданном PDFTK, то есть его содержимое может быть изменено пользователем в Adobe Reader.