Frage

Ihr Szenario:

  • Eine PDF-Vorlage mit Formularfeldern: template.pdf
  • Eine XFDF-Datei, die die Daten enthält, ausgefüllt werden: fieldData.xfdf

Jetzt muss ich diese Dateien kombiniert haben und abgeflacht. pdftk macht die Arbeit leicht in PHP:

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

Leider ist dies nicht mit voller utf-8-Unterstützung arbeiten. Zum Beispiel: kyrillische und griechische Buchstaben bekommen verschlüsseln. Ich verwendete Arial für diese, mit einem Unicode-Zeichensatz.

  • Wie kann ich erreichen meine Unicode-Dateien zu glätten?
  • Gibt es ein anderes PDF-Tool, dass Angebote Unicode-Unterstützung?
  • Does pdftk haben einen Unicode-Schalter, dass ich fehle?

EDIT 1: Da diese Frage hat sich für mehr als 9 Monate nicht gelöst worden, entschied ich mich für sie eine Prämie zu starten. Falls es Optionen, um eine Funktion oder einen Bugfix in pdftk zu fördern, würde ich mich freuen, zu spenden.

EDIT 2: Ich bin nicht an diesem Projekt arbeite mehr, so dass ich keine neue Antworten überprüfen kann. Wenn jemand ein ähnliches Problem hat, bin ich froh, wenn sie zu meinen Gunsten reagieren zu können.

War es hilfreich?

Lösung

Leider UTF-8-Zeichencodierung nicht funktioniert weder mit dezimal noch hexadezimal Referenzen von Nicht-ASCII-Zeichen in Quelle .xfdf Datei. PDFTK v. 1.44.

Andere Tipps

Ich fand von Jons Vorlage aber die DomDocument die numerische Codierung wurde für mich behandelt und gut funktioniert. Meine leichte Variation ist unter:

$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 );

Sie könnten versuchen, die Testversion von http://www.adobe.com/products/ livecycle / Designer / und sehen, was PDF-Dateien erzeugt es.

Eine andere kommerzielle Software, die Sie könnten versuchen, ist http://www.appligent.com/fdfmerge . Siehe Seite 16 in http://146.145.110.1/docs/userguide/FDFMergeUserGuide.pdf für wie Griffe es XFDF mit UTF-8.

Ich hatte auch einen Blick auf die FDF-Spezifikation http: / /partners.adobe.com/public/developer/en/xml/xfdf_2.0.pdf Auf Seite 12 heißt es:

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> ... 

Ich schaute durch pdftk-1,44-dist / java / com / LOWAGIE / text / pdf / XfdfReader.java. Es scheint nichts Besonderes mit dem Eingang zu tun.

Vielleicht pdftk wird tun, was Sie wollen, wenn Sie die seltsamen Zeichen als Zeichenreferenzen in Ihrem XFDF Eingang kodieren.

Mit dem pdftk 1,44 auf einer Maschine Win7 ich die gleichen Probleme mit xfdf-Dateien auftreten, während fdf gut funktioniert. Ich habe eine xfdf-Datei ohne Sonderzeichen (nur ANSI) aber pdftk abgestürzt wieder. Ich verschickte die developper. Leider keine Antwort bis jetzt.

habe ich einige Fortschritte auf diesem. Beginnend mit Code von http://koivi.com/fill-pdf-form-fields/, modifizierte I den Wert auszugeben, codierend numerischen Codes für alle Zeichen außerhalb des ASCII-Bereich.

Jetzt mit pitulski Sonder Strings:

Poznań Śródmieście Ćwiartka Ósma Ausgänge Pozna ródmiecie wiartka Ósma mit einigen Kastenformen überlagerte

ęóąśłżźćńĘÓĄŚŁŻŹĆŃ Ausgänge óÓ mit mehr Kastenformen. Ich denke, es kann sein, dass die Kastenformen sind Zeichen mein Server nicht erkennt.

Ich habe versucht, es mit einigen Französisch Zeichen: ùûüÿ€’“”«»àâæçéèêëïôœÙÛÜŸÀÂÆÇÉÈÊËÏÎÔ und sie kamen alle aus OK, aber einige von ihnen wurden überlappende

.

- edit-- Ich habe gerade versucht, diese manuell in das Formular eingeben und bekam das gleiche Ergebnis abzüglich die Kastenformen (mit Evince). Ich habe dann versucht, mit einer anderen Form (von jemandem anderen erstellt) - nach ęóąśłżźćńĘÓĄŚŁŻŹĆŃ Eingabe ółÓŁ angezeigt wurde. Es sieht aus wie es die Zeichen hängt in dem eingebetteten Schriften des Dokuments enthalten sind.

/*
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;
}

Was PDFTK-Version? Ich habe versucht, das Gleiche mit polnischen Zeichen (utf-8).

nicht funktioniert für mich.

pdftk.exe, libiconv2.dll aus: http://www.pdflabs.com/ docs / install-pdftk /

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

pdftk file.pdf fill_form file.xfdf Ausgang 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)

Aber mit FDF-Datei mit dem gleichen Inhalt, es funktionierte einwandfrei. Aber die Zeichen in new.pdf sind schlecht.

pdftk file.pdf fill_form file.fdf Ausgang 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Ä—ÅıņŻŹăÅ

Sie können, indem sie ihren Unicode-Code in Oktal mit \ ddd

utf-8-Zeichen einführen

Um dies zu lösen, schrieb ich PdfFormFillerUTF-8: http://sourceforge.net/projects/pdfformfiller2/

Es ist eine Drop-in-Ersatz für pdftk Werkzeug

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

Das löst Unicode Probleme beim Ausfüllen von Formularen. Arbeiten für mich mit CP1250 Zeichen (Mitteleuropa).

Von der Projektseite:

Der folgende Befehl füllt in Formulardaten aus DATA.xfdf in Formular.pdf und schreibt das Ergebnis in RESULT.pdf. Es flacht auch das Dokument Verhindern, dass die weitere Bearbeitung:

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

Dies entspricht genau den üblichen pdftk Befehl:

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

Beachten Sie, dass Sie benötigen JRE installiert haben.

Ich habe es geschafft, um es mit pdftk funktioniert, indem eine xfdf Datei mit UTF-8-Codierung zu schaffen.

es dauerte mehr versucht, aber was macht es so exepcted Arbeit war ‚need_appearances‘

hinzufügen

Hier ist ein Beispiel:

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

unterstützt pdftk kodiert in UTF-16 BE. Es ist nicht so schwierig, von UTF-8 in UTF-16 BE zu konvertieren.

Siehe auch: Weird-Zeichen beim Füllen PDF mit pdftk

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top