Вопрос

Мой сценарий:

  • Шаблон PDF с Fixfields: Template.pdf
  • Файл XFDF, который содержит данные, которые будут заполнены: fielddata.xfdf

Теперь мне нужно, чтобы эти файлы комбинированные и сплющенные. PDFTK делает работу легко в PHP:

exec("pdftk template.pdf fill_form fieldData.xfdf output flatFile.pdf flatten");

К сожалению, это не работает с полной поддержкой UTF-8. Например: кириллицы и греческие буквы затыкаются. Я использовал Perial для этого с набором символов Unicode.

  • Как я могу сделать, чтобы сгладить мои файлы Unicode?
  • Есть ли другой инструмент PDF, который предлагает поддержку Unicode?
  • У PDFTK есть переключатель Unicode, который мне не хватает?

Редактировать 1: Поскольку этот вопрос не был решен более чем на 9 месяцев, я решил начать щедрость для него. Если есть варианты для спонсирования функции или ошибки в PDFTK, я был бы рад пожертвовать.

Редактировать 2: Я больше не работаю над этим проектом, поэтому я не могу проверить новые ответы. Если у кого-то есть похожая проблема, я рад, если они могут ответить в мою пользу.

Это было полезно?

Решение

К сожалению, кодировка символов UTF-8 не работает ни с десятичными, ни шестнадцатеричными ссылками не-ASCII символов в исходном файле .xfdf. Pdftk v. 1.44.

Другие советы

Я обнаружил, что используя шаблон Джона, но используя DOMDOCUMENT, то числовое кодирование было обработано для меня и хорошо сработало. Мой небольшой вариант ниже:

$xml = new DOMDocument( '1.0', 'UTF-8' );

$rootNode = $xml->createElement( 'xfdf' );
$rootNode->setAttribute( 'xmlns', 'http://ns.adobe.com/xfdf/' );
$rootNode->setAttribute( 'xml:space', 'preserve' );
$xml->appendChild( $rootNode );

$fieldsNode = $xml->createElement( 'fields' );
$rootNode->appendChild( $fieldsNode );

foreach ( $fields as $field => $value )
{
    $fieldNode = $xml->createElement( 'field' );
    $fieldNode->setAttribute( 'name', $field );
    $fieldsNode->appendChild( $fieldNode );

    $valueNode = $xml->createElement( 'value' );
    $valueNode->appendChild( $xml->createTextNode( $value ) );
    $fieldNode->appendChild( $valueNode );
}

$xml->save( $file );

Вы можете попробовать пробную версию http://www.adobe.com/products/livecycle/designer/ и посмотрите, какие файлы PDF он генерирует.

Другое коммерческое программное обеспечение, которое вы могли бы попробовать http://www.appligent.com/fdfmerge.. Отказ См. Стр. 16 в http://146.145.110.1/docs/userguide/fdfmergeuserguide.pdf.pdf. Для того, как он обрабатывает XFDF с UTF-8.

Я также посмотрел на спецификацию FDF http://partners.adobe.com/public/developer/en/xml/xfdf_2.0.pdf.На странице 12 это говорится:

Although XFDF is encoded in UTF-8, double byte characters are encoded as character references when 
exported from Acrobat. 
For example, the Japanese double byte characters ,  , and  are exported to XFDF using 
three character references. Here is an example of double byte characters in a form field: 
  ...
<fields>  
  <field name="Text1"> 
     <value>Here are 3 UTF-8 double byte  
        characters: &#x3042;&#x3044;&#x3046;
</value>  
  </field>  
</fields> ... 

Я просматривал PDFTK-1.44-DIST / Java / Com / Lowagie / Text / PDF / XFDFreder.java. Кажется, что не делает ничего особенного с входом.

Возможно, PDFTK сделает то, что вы хотите, когда вы заканчиваете странные символы как ссылки на символы в вашем входе XFDF.

Используя PDFTK 1.44 на машине Win7, я сталкиваюсь с теми же проблемами с XFDF-файлами, тогда как FDF работает нормально. Я сделал XFDF-файл без каких-либо специальных символов (только ANSI), но PDFTK снова разбился. Я отправил докладчику. К сожалению, нет ответа до сих пор.

Я добился прогресса на этом. Начиная с кода из http://koivi.com/fill-pdf-form-fields/, Я изменил значение, кодирующее значение для вывода числовых кодов для любых символов за пределами диапазона ASCII.

Сейчас с специальными строками Пипульски:

Poznań Śródmieście Ćwiartka Ósma выходы Pozna ródmiecie wiartka Ósma С некоторыми фигурами коробки наложены

ęóąśłżźćńĘÓĄŚŁŻŹĆŃ выходы óÓ с большей формы коробки. Я думаю, что это может быть, что фигуры коробки являются персонажами, которые мой сервер не распознает.

Я попробовал это с некоторыми французскими персонажами: ùûüÿ€’“”«»àâæçéèêëïôœÙÛÜŸÀÂÆÇÉÈÊËÏÎÔ И все они вышли в порядке, но некоторые из них перекрывались.

---Дит ... Я просто попытался ввести их вручную в форму и получил тот же результат минус фигуры коробки (используя Evince). Затем я пробовал с другой формой (созданной кем-то еще) - после ввода ęóąśłżźćńĘÓĄŚŁŻŹĆŃ, ółÓŁ был отображен. Похоже, это зависит, какие персонажи включены в встроенные шрифты документа.

/*
KOIVI HTML Form to FDF Parser for PHP (C) 2004 Justin Koivisto
Version 1.2.?
Last Modified: 2013/01/17 - Jon Hulka(jon dot hulka at gmail dot com)
  - changed character encoding, all non-ascii characters get encoded as numeric character references

    This library is free software; you can redistribute it and/or modify it
    under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation; either version 2.1 of the License, or (at
    your option) any later version.

    This library is distributed in the hope that it will be useful, but
    WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
    License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with this library; if not, write to the Free Software Foundation,
    Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 

    Full license agreement notice can be found in the LICENSE file contained
    within this distribution package.

    Justin Koivisto
    justin dot koivisto at gmail dot com
    http://koivi.com
*/

/**
 * createXFDF
 * 
 * Tales values passed via associative array and generates XFDF file format
 * with that data for the pdf address sullpiled.
 * 
 * @param string $file The pdf file - url or file path accepted
 * @param array $info data to use in key/value pairs no more than 2 dimensions
 * @param string $enc default UTF-8, match server output: default_charset in php.ini
 * @return string The XFDF data for acrobat reader to use in the pdf form file
 */
function createXFDF($file,$info,$enc='UTF-8'){
    $data=
'<?xml version="1.0" encoding="'.$enc.'"?>
<xfdf xmlns="http://ns.adobe.com/xfdf/" xml:space="preserve">
    <fields>';
    foreach($info as $field => $val){
        $data.='
        <field name="'.$field.'">';
        if(is_array($val)){
            foreach($val as $opt)
//2013.01.17 - Jon Hulka - all non-ascii characters get character references
            $data.='
            <value>'.mb_encode_numericentity(htmlspecialchars($opt),array(0x0080, 0xffff, 0, 0xffff), 'UTF-8').'</value>';
//                $data.='<value>'.htmlentities($opt,ENT_COMPAT,$enc).'</value>'."\n";
        }else{
            $data.='
            <value>'.mb_encode_numericentity(htmlspecialchars($val),array(0x0080, 0xffff, 0, 0xffff), 'UTF-8').'</value>';
//            $data.='<value>'.htmlentities($val,ENT_COMPAT,$enc).'</value>'."\n";
        }
        $data.='
        </field>';
    }
    $data.='
    </fields>
    <ids original="'.md5($file).'" modified="'.time().'" />
    <f href="'.$file.'" />
</xfdf>';
    return $data;
}

Какая версия PDFTK? Я попробовал то же самое с польскими персонажами (UTF-8).

Не работает для меня.

pdftk.exe, libiconv2.dll из: http://www.pdflabs.com/docs/install-pdftk/

Windows 7, CMD, file.pdf + file.fdf -> new.pdf

pdftk file.pdf fill_form file.xfdf Выход new.pdf platten

Unhandled Java Exception:
java.lang.NoClassDefFoundError: gnu.gcj.convert.Input_UTF8 not found in [file:.\, core:/]
   at 0x005a3abe (Unknown Source)
   at 0x005a3fb2 (Unknown Source)
   at 0x006119f4 (Unknown Source)
   at 0x00649ee4 (Unknown Source)
   at 0x005b4c44 (Unknown Source)
   at 0x005470a9 (Unknown Source)
   at 0x00549c52 (Unknown Source)
   at 0x0059d348 (Unknown Source)
   at 0x007323c9 (Unknown Source)
   at 0x0054715a (Unknown Source)
   at 0x00562349 (Unknown Source)

Но, с FDF файлом, с тем же контентом, он работал правильно. Но персонажи в New.pdf плохо.

pdftk file.pdf fill_form file.fdf Выход new.pdf flatten

--- FDF ---

%FDF-1.2
%âãÏÓ
1 0 obj<</FDF<</F(file.pdf)
/Fields[
<</T(Miejsce)/V(666 Poznań Śródmieście Ćwiartka Ósma)>>
<</T(Nr)/V(ęóąśłżźćńĘÓĄŚŁŻŹĆŃ)>>
]>>>>
endobj
trailer
<</Root 1 0 R>>
%%EOF

--- XFDF ---

<?xml version="1.0" encoding="UTF-8"?>
<xfdf xmlns="http://ns.adobe.com/xfdf/" xml:space="preserve">
<f href="file.pdf"/>
<fields>
<field name="Miejsce">
<value>666 Poznań Śródmieście Ćwiartka Ósma</value>
</field>
<field name="Nr">
<value>ęóąśłżźćńĘÓĄŚŁŻŹĆŃ</value>
</field>
</fields>
</xfdf>

--- PDF ---

Miejsce: 666 PoznaÅ— ÅıródmieÅłcie ăwiartka Ãfisma
Nr: ÄŽÃ³Ä–ÅłÅ‡Å¼ÅºÄ⁄Å—ÄŸÃfiÄ—ÅıņŻŹăÅ

Вы можете представить персонажи UTF-8, предоставив свой код Unicode в восьмерию с DDD

Чтобы решить это, я написал pdfformfillerutf-8: http://sourceforge.net/projects/pdfformfiller2/

Есть падение замены для инструмента PDFTK

MCPDF.: https://github.com/m-click/mcpdf.

Это решает проблемы Unicode при заполнении форм. Работает для меня с персонажами CP1250 (Центральная Европа).

С страницы проекта:

Следующая команда заполняет данные формы из data.xfdf в форму .pdf и записывает результат к результату .pdf. Это также сплющает документ, чтобы предотвратить дальнейшее редактирование:

java -jar mcpdf.jar FORM.pdf fill_form - output - flatten < DATA.xfdf > RESULT.pdf

Это точно соответствует обычной команде PDFTK:

pdftk FORM.pdf fill_form - output - flatten < DATA.xfdf > RESULT.pdf

Обратите внимание, что вам нужно установить JER.

Мне удалось сделать это работать с PDFTK, создав файл XFDF с кодировкой UTF-8.

Потребовалось несколько попыток, но что заставляло его работать, если бы добавить «потребностями_аппараты»

Вот пример:

pdftk source.pdf fill_form data.xfdf output output.pdf need_appearances

PDFTK поддерживает кодирование в UTF-16BE. Не так сложно конвертировать из УТФ-8 до UTF-16BE.

Видеть: Странные персонажи при заполнении PDF с PDFTK

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top