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-1orWINDOWS-1252に設定しhtmlentities、PHP スクリプトで を省略します

試してみるもう1つのことは、 utf8_encode 代わりに使用することです htmlentities (XMLエンコーディングを変更しないでください)

于 2012-07-26T14:18:28.693 に答える