12

私のシナリオ:

  • フォームフィールドを含む 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: 私はもうこのプロジェクトに取り組んでいないので、新しい回答を確認できません。誰かが同様の問題を抱えている場合、彼らが私に有利な対応をしてくれるとうれしいです.

4

13 に答える 13

3

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 );
于 2013-01-23T16:20:45.383 に答える
1

http://www.adobe.com/products/livecycle/designer/の試用版を試して、生成されるPDFファイルを確認できます。

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

また、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があなたの望むことをするかもしれません。

于 2011-08-03T13:04:50.490 に答える
1

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

今ピトゥルスキーの特別な文字列で:

Poznań Śródmieście Ćwiartka ÓsmaPozna ródmiecie wiartka Ósmaいくつかのボックス形状を重ね合わせた出力

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

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

--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;
}
于 2013-01-17T09:42:48.407 に答える
1

Win7マシンでpdftk 1.44を使用すると、xfdfファイルで同じ問題が発生しますが、fdfは正常に動作します。特殊文字 (ANSI のみ) を使用せずに xfdf ファイルを作成しましたが、pdftk が再びクラッシュしました。開発者にメールしました。残念ながら、今のところ答えはありません。

于 2011-08-12T18:33:24.607 に答える
1

残念ながら、UTF-8 文字エンコーディングは、ソース .xfdf ファイル内の非 ASCII 文字の 10 進数参照でも 16 進数参照でも機能しません。PDFTK v. 1.44。

于 2012-02-17T14:34:19.250 に答える
0

PDFTKのバージョンは何ですか?ポーランド語の文字(utf-8)でも同じことを試しました。

私には効かない。

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

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

pdftk file.pdf fill_form file.xfdf output 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 output 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Ä—ÅıņŻŹăÅ
于 2010-11-17T16:46:11.440 に答える
0

pdftk ツールのドロップイン代替品があります

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

フォームに入力する際のユニコードの問題を解決します。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 をインストールする必要があることに注意してください。

于 2015-04-15T17:07:50.757 に答える
0

\ddd を使用して 8 進数で Unicode コードを指定することにより、utf-8 文字を導入できます。

于 2013-11-27T11:50:02.697 に答える
0

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

于 2014-01-22T22:49:35.630 に答える
-2

pdftk は UTF-16BE でのエンコーディングをサポートしています。UTF-8 から UTF-16BE への変換はそれほど難しくありません。

参照: PDFTk で PDF を埋めるときの奇妙な文字

于 2013-10-04T08:14:40.823 に答える