我使用XFDF文件来用PHP和pdftk填写PDF-forms服务器端,但我的问题是没有非英语字符(如:打印到表单字段。
下面是解析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这不会导致任何错误。
我使用Debian6.0,PHP5.3.3-7+挤压13,pdftk版本为1.44-5
UPDATE --我注意到,如果我不将生成的文件平平并打开它,那么当字段被激活时,字符会被正确地打印出来,但是当字段没有聚焦时,会再次隐藏字符。如果我手动在文件中键入任何内容,特殊字符也会出现。但是,保存和重新打开的文件不会显示文本,除非再次添加一些文本。
更新2把该死的东西修好了。最初,这些表格是用OSX雪豹上的Acrobat制作的。现在,我用LibreOffice +重新制作了表单,一切似乎都在工作!
发布于 2012-07-26 13:56:20
如果您使用以下列表,我认为您会有更多的运气:
Ä表示(而不是Ä)Å (而不是Å)Ö for (而不是Ö)Ü (而不是Ü)ß (而不是ß)ä for (而不是ä)å for (而不是å)ö for (而不是ö)ü forü(而不是ü)我会让你自己知道如何扩展这个列表,直到它达到完整为止:-)
发布于 2012-07-26 14:18:28
这是因为在PHP脚本中使用了htmlentities。,它将重音符号转换为&xxxx;。
将XML编码设置为iso-8859-1或WINDOWS-1252,并在htmlentities脚本中省略htmlentities
另一件要尝试的事情是使用utf8_encode而不是htmlentities (而不是修改XML编码)。
发布于 2014-01-22 23:20:00
为了支持任何UFT-8字符,我编写了PdfFormFillerUTF-8:http://sourceforge.net/projects/pdfformfiller2/
https://stackoverflow.com/questions/11665394
复制相似问题