3

我正在使用 XFDF 文件用 PHP 和 pdftk 填写 PDF 表单服务器端,但我的问题是没有非英语字符(ä、ö、å 等)打印到表单字段。

这是我用来解析 XFDF 文件的函数:

function createFDF($file,$info,$enc='UTF-8'){ 
$data='<?xml version="1.0" encoding="'.$enc.'"?>'."\n". 
    '<xfdf xmlns="http://ns.adobe.com/xfdf/" xml:space="preserve">'."\n". 
    '<fields>'."\n"; 
foreach($info as $field => $val){ 
    $data.='<field name="'.$field.'">'."\n"; 
    if(is_array($val)){ 
        foreach($val as $opt) 
            $data.='<value>'.htmlentities($opt,ENT_COMPAT,$enc).'</value>'."\n"; 
    }else{ 
        $data.='<value>'.htmlentities($val,ENT_COMPAT,$enc).'</value>'."\n"; 
    } 
    $data.='</field>'."\n"; 
} 
$data.='</fields>'."\n". 
    '<ids original="'.md5($file).'" modified="'.time().'" />'."\n". 
    '<f href="'.$file.'" />'."\n". 
    '</xfdf>'."\n"; 
return $data; 

生成的 XFDF 文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<xfdf xmlns="http://ns.adobe.com/xfdf/" xml:space="preserve">
<fields>
<field name="loadman-pudotuspainolaitteen-mittaustulosten-tallenne">
<value>1201</value>
</field>
<field name="tutkittavarakenne-rivi1">
<value>a</value>
</field>
<field name="tutkittavarakenne-rivi2">
<value></value>
</field>
<field name="tutk-pvm">
<value>11.12.2012</value>
</field>
<field name="mittauksen_suorittaja">
<value>o</value>
</field>
<field name="vast-tyonjohtaja">
<value>&ouml;</value>
</field>
<field name="rakennemateriaali">
<value>&auml;</value>
</field>
<field name="laatuvaatimukset">
<value>&aring;</value>
</field>
<field name="mittauspaikan_tiivistysmenetelma">
<value>&aacute;</value>
</field>
<field name="pohjalevy">
<value>&eacute;</value>
</field>
<field name="pohjamaa-alusrakenne">
<value>&iacute;</value>
</field>
<field name="mittauspaikan-tiivistysmenetelma">
<value>&egrave;</value>
</field>
<field name="emoduli">
<value>&ouml;</value>
</field>
<field name="tiiveys">
<value>&ouml;&auml;</value>
</field>
<field name="huomautukset_ja_loppupaatelmat1">
<value>&ouml;&auml;</value>
</field>
<field name="huomautukset_ja_loppupaatelmat2">
<value>&ouml;&auml;</value>
</field>
<field name="huomautukset_ja_loppupaatelmat3">
<value>&ouml;&auml;</value>
</field>
<field name="empa1">
<value>&ouml;</value>
</field>
<field name="empa1-e">
<value>&ouml;</value>
</field>
<field name="empa2">
<value>&ouml;</value>
</field>
<field name="empa2-e">
<value>&ouml;</value>
</field>
<field name="allekirjoitus">
<value>Einomies Porkkakoski</value>
</field>
</fields>
<ids original="84b0ff7a04b017303be186faa0d1254a" modified="1343290963" />
<f href="assets/loadman.pdf" />
</xfdf>

带有英文字母的字段打印完美,但带有锐角、坟墓或斯堪的纳维亚添加的字母不会转移到 PDF 文件中。 出于某种原因除外

<field name="huomautukset_ja_loppupaatelmat1">
<value>&ouml;&auml;</value>
</field>

完美运行并打印 öä!

我运行的命令是

pdftk <pdf-file> fill_form <xfdf-file> output <output file> flatten

这不会导致任何错误。

我使用的是 Debian 6.0,PHP 5.3.3-7+squeeze13,pdftk 版本是 1.44-5

更新我注意到,如果我不展平生成的文件并打开它,则在激活字段时字符会正确打印,但在字段未聚焦时会再次隐藏。如果我手动在文件中键入任何内容,特殊字符也会显示出来。但是,除非再次添加一些文本,否则保存并重新打开的文件不会显示文本。

更新 2修复了该死的东西。最初这些表格是在 OSX Snow Leopard 上使用 Adob​​e Acrobat Pro 制作的。现在我用 LibreOffice + Oracle PDF Import 插件重新制作了表格,一切似乎都在工作!

4

3 回答 3

2

如果您使用以下列表,我认为您会有更多的运气:

  • &#196;对于 Ä(而不是&Auml;
  • &#197;对于 Å(而不是&Aring;
  • &#214;对于 Ö(而不是&Ouml;
  • &#220;对于 Ü(而不是&Uuml;
  • &#223;对于 ß(而不是&szlig;
  • &#228;对于 ä (而不是&auml;
  • &#229;对于 å(而不是&aring;
  • &#246;对于 ö (而不是&ouml;
  • &#252;对于ü(而不是&uuml;

我会让您自己了解如何扩展该列表,直到它达到完整性:-)

于 2012-07-26T13:56:20.710 回答
2

这是因为您htmlentities在 PHP 脚本中使用。将重音符号转换为&xxxx;

将您的 XML 编码设置为iso-8859-1WINDOWS-1252省略htmlentitiesPHP 脚本中的

另一件要尝试的事情是使用 utf8_encode 而不是 htmlentities (而不是修改 XML 编码)

于 2012-07-26T14:18:28.693 回答
0

为了支持任何 UFT-8 字符,我写了 PdfFormFillerUTF-8:http: //sourceforge.net/projects/pdfformfiller2/

于 2014-01-22T23:20:00.303 回答