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いまいましい問題を修正しました。もともと、フォームは OSX Snow Leopard 上の Adobe Acrobat Pro で作成されていました。今、LibreOffice + Oracle PDF Import プラグインを使用してフォームを作り直しましたが、すべてが機能しているようです!