Question

Mon scénario:

  • Un modèle PDF avec formfields: TEMPLATE.PDF
  • Un fichier XFDF qui contient les données à remplir: fieldData.xfdf

Maintenant, je dois avoir ces fichiers combinés et aplaties. pdftk fait le travail facilement à php:

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

Malheureusement, cela ne fonctionne pas avec soutien utf-8. Par exemple: lettres cyrillique et le grec se brouillées. Je Arial pour cela, avec un jeu de caractères unicode.

  • Comment puis-je accomplir pour aplatir mes fichiers unicode?
  • Y at-il un autre outil pdf qui offre un soutien UNICODE?
  • Est-ce pdftk ont ??un interrupteur unicode que je suis absent?

EDIT 1: Cette question n'a pas été résolu depuis plus de neuf mois, j'ai décidé de commencer une prime pour cela. Dans le cas où il existe des options pour parrainer une fonction ou un bugfix dans pdftk, je serais heureux de faire un don.

EDIT 2: Je ne travaille pas sur ce projet plus, donc je ne peux pas vérifier de nouvelles réponses. Si quelqu'un a un problème similaire, je suis heureux s'ils peuvent répondre en ma faveur.

Était-ce utile?

La solution

Malheureusement, le caractère encodage UTF-8 ne fonctionne pas non plus avec des références décimales ni hexadécimaux de caractères non-ASCII dans la source .xfdf fichier. PDFTK v. 1.44.

Autres conseils

J'ai trouvé en utilisant le modèle de Jon mais en utilisant le DomDocument le codage numérique a été traité pour moi et a bien fonctionné. Mon légère variation est ci-dessous:

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

Vous pouvez essayer la version d'essai de http://www.adobe.com/products/ livecycle / concepteur / et voir quels fichiers PDF qu'il génère.

Un autre logiciel commercial, vous pouvez essayer est http://www.appligent.com/fdfmerge . Voir page 16 http://146.145.110.1/docs/userguide/FDFMergeUserGuide.pdf pour la façon dont il gère XFDF UTF-8.

J'ai eu aussi un coup d'œil à la spécification http: / /partners.adobe.com/public/developer/en/xml/xfdf_2.0.pdf A la page 12, il dit:

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

J'ai regardé par pdftk-1,44-dist / java / com / LOWAGIE / text / pdf / XfdfReader.java. Il ne semble pas faire quelque chose de spécial à l'entrée.

Peut-être pdftk faire ce que vous voulez, quand vous encodez les personnages étranges comme les références de caractères dans votre entrée XFDF.

Utilisation du pdftk 1,44 sur une machine Win7 je rencontre les mêmes problèmes avec les fichiers XFDF-alors fdf fonctionne très bien. J'ai fait un fichier XFDF-sans caractères spéciaux (uniquement ANSI), mais pdftk sombré à nouveau. J'ai envoyé le developpeur. Malheureusement, aucune réponse jusqu'à présent.

J'ai fait des progrès à ce sujet. Commençant par le code de http://koivi.com/fill-pdf-form-fields/, j'ai modifié la valeur codant pour des codes numériques de sortie pour tous les caractères en dehors de la plage ASCII.

avec des chaînes spéciales pitulski:

sorties Poznań Śródmieście Ćwiartka Ósma Pozna ródmiecie wiartka Ósma avec une boîte de formes superposées

de ęóąśłżźćńĘÓĄŚŁŻŹĆŃ de óÓ avec plus de formes de boîte. Je pense qu'il est peut-être que les formes de la boîte sont des caractères mon serveur ne reconnaît pas.

Je l'ai essayé avec quelques caractères français: ùûüÿ€’“”«»àâæçéèêëïôœÙÛÜŸÀÂÆÇÉÈÊËÏÎÔ et ils ont tous sorti OK, mais certains d'entre eux se chevauchaient

.

- edit-- Je viens d'essayer d'entrer ces manuellement dans la forme et a obtenu le même résultat moins les formes de boîte (en utilisant Evince). J'ai ensuite essayé avec une autre forme (créé par quelqu'un d'autre) - après avoir entré ęóąśłżźćńĘÓĄŚŁŻŹĆŃ, ółÓŁ a été affiché. On dirait que cela dépend des caractères qui sont inclus dans les polices incorporées du document.

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

La version est ce que PDFTK? J'ai essayé la même chose avec des personnages polonais (UTF-8).

ne fonctionne pas pour moi.

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

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

pdftk file.pdf fill_form file.xfdf sortie new.pdf aplatir

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)

Mais, avec le fichier FDF, avec le même contenu, cela a fonctionné correctement. Mais les personnages new.PDF sont mauvais.

pdftk file.pdf fill_form file.fdf sortie new.pdf aplatir

--- --- 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Ä—ÅıņŻŹăÅ

Vous pouvez introduire des caractères UTF-8 en donnant leur code unicode en octal avec \ ddd

Pour résoudre ce problème, je l'ai écrit PdfFormFillerUTF-8: http://sourceforge.net/projects/pdfformfiller2/

Il y a une solution de remplacement pour l'outil pdftk

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

qui permet de résoudre les problèmes UNICODE lors du remplissage des formulaires. Travaux pour moi avec CP1250 caractères (Europe centrale).

De la page du projet:

  

remplissages de commande suivantes à des données de formulaire à partir de DATA.xfdf dans form.pdf   et écrit le résultat RESULT.pdf. Il aplatit également le document   Éviter un montage:

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

correspond exactement à la commande habituelle PDFtk:

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

Notez que vous devez avoir installé JRE.

J'ai réussi à le faire fonctionner avec pdftk en créant un fichier XFDF avec le codage utf-8.

il a fallu plusieurs ont essayé, mais ce qui fait fonctionner comme exepcted était d'ajouter « need_appearances »

voici un exemple:

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

supports de pdftk codant pour en UTF-16BE. Ce n'est pas difficile de convertir de UTF-8 en UTF-16BE.

Voir: caractères étranges lors du remplissage PDF avec pdftk

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top