Flatten FDF / XFDFフォームは、UTF-8文字を使用してPHPでPDFにフォームします

StackOverflow https://stackoverflow.com/questions/3973283

質問

私のシナリオ:

  • Formfieldsを備えたPDFテンプレート:template.pdf
  • 入力するデータを含むXFDFファイル:fielddata.xfdf

これで、ファイルを組み合わせて平らにする必要があります。 PDFTKはPHP内で簡単にジョブを行います。

exec("pdftk template.pdf fill_form fieldData.xfdf output flatFile.pdf flatten");

残念ながら、これは完全なUTF-8サポートでは機能しません。例:キリル語とギリシャ語の文字がスクランブルされます。これには、Unicode文字セットを使用してArialを使用しました。

  • Unicodeファイルを平らにするにはどうすればよいですか?
  • Unicodeサポートを提供する他のPDFツールはありますか?
  • PDFTKにはUnicodeスイッチがあります。

編集1:この質問は9か月以上解決されていないため、私はそれのために賞金を始めることにしました。 PDFTKに機能またはバグフィックスを後援するオプションがある場合は、寄付できてうれしいです。

編集2:私はもうこのプロジェクトに取り組んでいないので、新しい回答を確認することはできません。誰かが同様の問題を抱えている場合、彼らが私の好意で応答できることを嬉しく思います。

役に立ちましたか?

解決

残念ながら、UTF-8文字エンコードは、ソース.XFDFファイルの非ASCII文字の小数または16進言語では機能しません。 PDFTKv。1.44。

他のヒント

Jonのテンプレートを使用して見つけましたが、Domdocumentを使用して数値エンコードが処理され、うまく機能しました。私のわずかなバリエーションは以下です:

$xml = new DOMDocument( '1.0', 'UTF-8' );

$rootNode = $xml->createElement( 'xfdf' );
$rootNode->setAttribute( 'xmlns', 'http://ns.adobe.com/xfdf/' );
$rootNode->setAttribute( 'xml:space', 'preserve' );
$xml->appendChild( $rootNode );

$fieldsNode = $xml->createElement( 'fields' );
$rootNode->appendChild( $fieldsNode );

foreach ( $fields as $field => $value )
{
    $fieldNode = $xml->createElement( 'field' );
    $fieldNode->setAttribute( 'name', $field );
    $fieldsNode->appendChild( $fieldNode );

    $valueNode = $xml->createElement( 'value' );
    $valueNode->appendChild( $xml->createTextNode( $value ) );
    $fieldNode->appendChild( $valueNode );
}

$xml->save( $file );

トライアルバージョンを試すことができます http://www.adobe.com/products/livecycle/designer/ そして、それが生成するPDFファイルを確認します。

あなたが試すことができる別の商用ソフトウェアはです http://www.appligent.com/fdfmerge. 。 16ページを参照してください http://146.145.110.1/docs/userguide/fdfmergeuserguide.pdf UTF-8でXFDFを処理する方法について。

また、FDF仕様も見ていました http://partners.adobe.com/public/developer/en/xml/xfdf_2.0.pdf12ページでは次のように述べています。

Although XFDF is encoded in UTF-8, double byte characters are encoded as character references when 
exported from Acrobat. 
For example, the Japanese double byte characters ,  , and  are exported to XFDF using 
three character references. Here is an example of double byte characters in a form field: 
  ...
<fields>  
  <field name="Text1"> 
     <value>Here are 3 UTF-8 double byte  
        characters: &#x3042;&#x3044;&#x3046;
</value>  
  </field>  
</fields> ... 

PDFTK-1.44-DIST/JAVA/COM/LOWAGIE/TEXT/PDF/XFDFREADER.javaを調べました。入力で特別なことはないようです。

XFDF入力の文字参照として奇妙な文字をエンコードするとき、PDFTKはあなたが望むことをするかもしれません。

Win7マシンでPDFTK 1.44を使用すると、XFDF-Filesで同じ問題が発生しますが、FDFは正常に機能します。特殊文字(ANSIのみ)なしでXFDFファイルを作成しましたが、PDFTKは再びクラッシュしました。 DevelopPerを郵送しました。残念ながら、今まで答えはありません。

私はこれについていくらか進歩しました。からのコードから始めます http://koivi.com/fill-pdf-form-fields/, 、ASCII範囲以外の文字の数値コードを出力するためにエンコードを変更しました。

Pitulskiの特別な文字列で:

Poznań Śródmieście Ćwiartka Ósma 出力 Pozna ródmiecie wiartka Ósma いくつかの箱の形が重ねられています

ęóąśłżźćńĘÓĄŚŁŻŹĆŃ 出力 óÓ より多くのボックス形状があります。ボックスの形状は、私のサーバーが認識していない文字であると思います。

フランス語のキャラクターで試してみました: ùûüÿ€’“”«»àâæçéèêëïôœÙÛÜŸÀÂÆÇÉÈÊËÏÎÔ そして、それらはすべて大丈夫でしたが、それらのいくつかは重複していました。

-edit--これらを手動でフォームに入力しようとしたところ、同じ結果を除いてボックスシェイプ(evinceを使用して)を除いて取得しました。それから私は別のフォーム(他の誰かによって作成された)で試しました - 入力した後 ęóąśłżźćńĘÓĄŚŁŻŹĆŃ, ółÓŁ 表示されました。ドキュメントの埋め込まれたフォントに含まれている文字に依存するようです。

/*
KOIVI HTML Form to FDF Parser for PHP (C) 2004 Justin Koivisto
Version 1.2.?
Last Modified: 2013/01/17 - Jon Hulka(jon dot hulka at gmail dot com)
  - changed character encoding, all non-ascii characters get encoded as numeric character references

    This library is free software; you can redistribute it and/or modify it
    under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation; either version 2.1 of the License, or (at
    your option) any later version.

    This library is distributed in the hope that it will be useful, but
    WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
    or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
    License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with this library; if not, write to the Free Software Foundation,
    Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 

    Full license agreement notice can be found in the LICENSE file contained
    within this distribution package.

    Justin Koivisto
    justin dot koivisto at gmail dot com
    http://koivi.com
*/

/**
 * createXFDF
 * 
 * Tales values passed via associative array and generates XFDF file format
 * with that data for the pdf address sullpiled.
 * 
 * @param string $file The pdf file - url or file path accepted
 * @param array $info data to use in key/value pairs no more than 2 dimensions
 * @param string $enc default UTF-8, match server output: default_charset in php.ini
 * @return string The XFDF data for acrobat reader to use in the pdf form file
 */
function createXFDF($file,$info,$enc='UTF-8'){
    $data=
'<?xml version="1.0" encoding="'.$enc.'"?>
<xfdf xmlns="http://ns.adobe.com/xfdf/" xml:space="preserve">
    <fields>';
    foreach($info as $field => $val){
        $data.='
        <field name="'.$field.'">';
        if(is_array($val)){
            foreach($val as $opt)
//2013.01.17 - Jon Hulka - all non-ascii characters get character references
            $data.='
            <value>'.mb_encode_numericentity(htmlspecialchars($opt),array(0x0080, 0xffff, 0, 0xffff), 'UTF-8').'</value>';
//                $data.='<value>'.htmlentities($opt,ENT_COMPAT,$enc).'</value>'."\n";
        }else{
            $data.='
            <value>'.mb_encode_numericentity(htmlspecialchars($val),array(0x0080, 0xffff, 0, 0xffff), 'UTF-8').'</value>';
//            $data.='<value>'.htmlentities($val,ENT_COMPAT,$enc).'</value>'."\n";
        }
        $data.='
        </field>';
    }
    $data.='
    </fields>
    <ids original="'.md5($file).'" modified="'.time().'" />
    <f href="'.$file.'" />
</xfdf>';
    return $data;
}

どのPDFTKのバージョン?ポーランド語のキャラクター(UTF-8)で同じことを試しました。

私のためには機能しません。

pdftk.exe、libiconv2.dll from: http://www.pdflabs.com/docs/install-pdftk/

Windows 7、cmd、file.pdf + file.fdf-> new.pdf

pdftk file.pdf fill_form file.xfdf出力new.pdf flatten

Unhandled Java Exception:
java.lang.NoClassDefFoundError: gnu.gcj.convert.Input_UTF8 not found in [file:.\, core:/]
   at 0x005a3abe (Unknown Source)
   at 0x005a3fb2 (Unknown Source)
   at 0x006119f4 (Unknown Source)
   at 0x00649ee4 (Unknown Source)
   at 0x005b4c44 (Unknown Source)
   at 0x005470a9 (Unknown Source)
   at 0x00549c52 (Unknown Source)
   at 0x0059d348 (Unknown Source)
   at 0x007323c9 (Unknown Source)
   at 0x0054715a (Unknown Source)
   at 0x00562349 (Unknown Source)

しかし、FDFファイルでは、同じコンテンツを使用すると、適切に機能しました。しかし、new.pdfのキャラクターは悪いです。

pdftk file.pdf fill_form file.fdf出力new.pdf flatten

--- fdf ---

%FDF-1.2
%âãÏÓ
1 0 obj<</FDF<</F(file.pdf)
/Fields[
<</T(Miejsce)/V(666 Poznań Śródmieście Ćwiartka Ósma)>>
<</T(Nr)/V(ęóąśłżźćńĘÓĄŚŁŻŹĆŃ)>>
]>>>>
endobj
trailer
<</Root 1 0 R>>
%%EOF

--- xfdf ---

<?xml version="1.0" encoding="UTF-8"?>
<xfdf xmlns="http://ns.adobe.com/xfdf/" xml:space="preserve">
<f href="file.pdf"/>
<fields>
<field name="Miejsce">
<value>666 Poznań Śródmieście Ćwiartka Ósma</value>
</field>
<field name="Nr">
<value>ęóąśłżźćńĘÓĄŚŁŻŹĆŃ</value>
</field>
</fields>
</xfdf>

--- PDF ---

Miejsce: 666 PoznaÅ— ÅıródmieÅłcie ăwiartka Ãfisma
Nr: ÄŽÃ³Ä–ÅłÅ‡Å¼ÅºÄ⁄Å—ÄŸÃfiÄ—ÅıņŻŹăÅ

dddを使用してOctalでUnicodeコードを提供することにより、UTF-8文字を紹介できます

これを解決するために、私はpdfformfillerutf-8を書きました: http://sourceforge.net/projects/pdfformfiller2/

PDFTKツールのドロップイン交換があります

MCPDF: https://github.com/m-click/mcpdf

これは、フォームに記入するときにUnicodeの問題を解決します。 CP1250文字(中央ヨーロッパ)で私のために働きます。

プロジェクトページから:

次のコマンドは、data.xfdfからform.pdfにフォームデータを記入し、結果をresult.pdfに書き込みます。また、ドキュメントを平らにして、さらなる編集を防ぎます。

java -jar mcpdf.jar FORM.pdf fill_form - output - flatten < DATA.xfdf > RESULT.pdf

これは、通常のPDFTKコマンドに正確に対応しています。

pdftk FORM.pdf fill_form - output - flatten < DATA.xfdf > RESULT.pdf

JREをインストールする必要があることに注意してください。

UTF-8エンコードを備えたXFDFファイルを作成することにより、PDFTKで動作させることができました。

いくつかの試みがかかりましたが、それを機能させたように機能させるのは、「ニーズ」を追加することでした

これが例です:

pdftk source.pdf fill_form data.xfdf output output.pdf need_appearances

PDFTKは、UTF-16BEでのエンコードをサポートしています。 UTF-8からUTF-16BEに変換することはそれほど難しくありません。

見る: PDFをPDFTKで記入するときの奇妙な文字

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top