我的情况:

  • PDF板与formfields:模板。pdf
  • 一个XFDF文件,该文件包含的数据要填补:fieldData.xfdf

现在我需要有这些文件合并&夷为平地。pdftk做的工作很容易在php:

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

不幸的是,这不起作用的全utf-8的支持。例如:西里尔和希腊字母得到加扰。我用宋体为此,unicode character set.

  • 我如何可以完成压扁我的unicode的文件?
  • 是否有任何其他pdf工具,提供unicode支持?
  • 不pdftk有unicode开关,我的失踪?

编辑1:作为这个问题尚未解决的更多后9个月,我决定启动一个赏金。在情况有选择赞助的一个特征或修正在pdftk,我会很高兴的捐赠。

编辑2:我不在这个项目上工作了,所以我不能证实的新答复。如果任何人有一个类似的问题,我很高兴,如果他们可以响应我的赞成票。

有帮助吗?

解决方案

不幸的是,utf-8字符编码在源.xfdf文件中的非ASCII字符的十进制和十六进制引用都不适用。 PDFTKv。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 对于如何使用UTF-8处理XFDF。

我还看了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/xfdfreader.java。它似乎对输入没有任何特别的作用。

当您将怪异字符编码为XFDF输入中的字符引用时,也许PDFTK会做您想做的事情。

在Win7机器上使用PDFTK 1.44,我遇到了XFDF文件的同样问题,而FDF正常工作。我做了一个没有任何特殊字符(只有ANSI)的XFDF-File,但PDFTK再次崩溃。我邮寄了开发器。不幸的是,到目前为止还没有答案。

我在这方面取得了一些进展。从代码开始 http://koivi.com/fill-pdf-form-fields/, ,我修改了对ASCII范围以外的任何字符的输出数字代码的值编码。

现在有了Pitulski的特殊字符串:

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 flatten

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Ä—ÅıņŻŹăÅ

您可以通过 ddd给出其Unicode代码来介绍UTF-8字符

为了解决这个问题,我写了pdfformfillerutf-8: http://sourceforge.net/projects/pdfformfiller2/

PDFTK工具有一个置换式替代品

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

填充表格时可以解决Unicode问题。使用CP1250字符(中欧)为我工作。

从项目页面:

以下命令将来自data.xfdf的表单数据填充到form.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

请注意,您需要安装JRE。

我已设法使其工作与pdftk通过创建一个xfdf文件utf-8编码。

它采取了若干尝试,但是什么使它的工作exepcted是要添加'need_appearances'

这里是一个例子:

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

PDFTK支持在UTF-16BE中编码。从UTF-8转换为UTF-16BE并不难。

看: 用PDFTK填充PDF时的怪异字符

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top