我正在使用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>ö</value>
</field>
<field name="rakennemateriaali">
<value>ä</value>
</field>
<field name="laatuvaatimukset">
<value>å</value>
</field>
<field name="mittauspaikan_tiivistysmenetelma">
<value>á</value>
</field>
<field name="pohjalevy">
<value>é</value>
</field>
<field name="pohjamaa-alusrakenne">
<value>í</value>
</field>
<field name="mittauspaikan-tiivistysmenetelma">
<value>è</value>
</field>
<field name="emoduli">
<value>ö</value>
</field>
<field name="tiiveys">
<value>öä</value>
</field>
<field name="huomautukset_ja_loppupaatelmat1">
<value>öä</value>
</field>
<field name="huomautukset_ja_loppupaatelmat2">
<value>öä</value>
</field>
<field name="huomautukset_ja_loppupaatelmat3">
<value>öä</value>
</field>
<field name="empa1">
<value>ö</value>
</field>
<field name="empa1-e">
<value>ö</value>
</field>
<field name="empa2">
<value>ö</value>
</field>
<field name="empa2-e">
<value>ö</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>öä</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 已经解决了该问题。最初使用Adobe Acrobat Pro在OSX Snow Leopard上制作了表单。现在使用LibreOffice + Oracle PDF Import插件重新制作表单,一切似乎都正常了!