Domanda

Il mio scenario:

  • Un modello di PDF con formfields: TEMPLATE.PDF
  • Un file XFDF che contiene i dati da compilare: fieldData.xfdf

Ora ho bisogno di avere questi per file combinati e appiattite. pdftk fa il lavoro facilmente all'interno di php:

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

Purtroppo questo non funziona con il pieno supporto UTF-8. Per esempio: cirillico e lettere greche vengono strapazzate. Ho usato Arial per questo, con un set di caratteri Unicode.

  • Come posso compiere per appiattire i miei file Unicode?
  • C'è qualche altro strumento PDF che offre supporto Unicode?
  • pdftk
  • ha un interruttore unicode che mi manca?

EDIT 1: Poiché a questa domanda non è stato risolto per più di 9 mesi, ho deciso di iniziare una taglia per questo. Nel caso in cui ci sono opzioni per sponsorizzare una caratteristica o un bugfix in pdftk, sarei felice di donare.

EDIT 2: non sto lavorando su questo progetto più, quindi non posso verificare nuove risposte. Se qualcuno ha un problema simile, io sono contento se si può rispondere a mio favore.

È stato utile?

Soluzione

Purtroppo, UTF-8 codifica dei caratteri non funziona né con decimali, né esadecimali riferimenti di caratteri non-ASCII nei fonte .xfdf file. . PDFTK v 1,44.

Altri suggerimenti

Ho trovato usando modello di Jon ma usando il DomDocument la codifica numerica è stata gestita per me e ha funzionato bene. La mia piccola variazione è inferiore a:

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

Si potrebbe provare la versione di prova di http://www.adobe.com/products/ LiveCycle / designer / e vedere che cosa i file PDF che genera.

Un altro software commerciale che si può provare è http://www.appligent.com/fdfmerge . Vedere a pagina 16 in http://146.145.110.1/docs/userguide/FDFMergeUserGuide.pdf per come gestisce XFDF con UTF-8.

Ho anche avuto uno sguardo al DFF specifica http: / /partners.adobe.com/public/developer/en/xml/xfdf_2.0.pdf A pagina 12 si legge:

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

Ho guardato attraverso pdftk-1.44-dist / java / com / Lowagie / testo / pdf / XfdfReader.java. Non sembra di fare nulla di speciale con l'ingresso.

Forse pdftk farà ciò che si vuole, quando si codifica dei caratteri strani come riferimenti di carattere nel vostro ingresso XFDF.

Uso della pdftk 1.44 su una macchina Win7 che incontro gli stessi problemi con XFDF-files mentre DFF funziona bene. Ho fatto un XFDF-file senza caratteri speciali (solo ANSI), ma pdftk caduto di nuovo. Ho inviato il developper. Purtroppo nessuna risposta fino ad ora.

ho fatto qualche progresso su questo. A partire con il codice da http://koivi.com/fill-pdf-form-fields/, ho modificato il valore di uscita codificante codici numerici per qualsiasi carattere non aSCII.

Ora con stringhe speciali di pitulski:

Poznań Śródmieście Ćwiartka Ósma uscite Pozna ródmiecie wiartka Ósma con qualche scatola forme sovrapposto

ęóąśłżźćńĘÓĄŚŁŻŹĆŃ uscite óÓ con più forme scatola. Penso che potrebbe essere che le forme di scatola sono personaggi il mio server non riconosce.

ho provato con alcuni personaggi francesi: ùûüÿ€’“”«»àâæçéèêëïôœÙÛÜŸÀÂÆÇÉÈÊËÏÎÔ e tutti uscito OK, ma alcuni di loro sono stati sovrapposizione

.

- edit-- ho solo cercato di entrare questi manualmente nella forma ed ha ottenuto lo stesso risultato meno le forme di dialogo (utilizzando Evince). Allora ho provato con una forma diversa (creato da qualcun altro) - dopo aver inserito ęóąśłżźćńĘÓĄŚŁŻŹĆŃ, è stato visualizzato ółÓŁ. Sembra che dipende quali caratteri sono incluse nel font incorporati del documento.

/*
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 versione di Cosa PDFTK? Ho provato la stessa cosa con i caratteri polacchi (UTF-8).

non funziona per me.

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

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

pdftk file.pdf fill_form file.xfdf uscita new.pdf appiattire

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)

Ma, con file FDF, con lo stesso contenuto, ha funzionato correttamente. Ma i personaggi di new.PDF sono cattivi.

pdftk file.pdf fill_form file.fdf uscita new.pdf appiattire

--- --- DFF

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

Si può introdurre caratteri UTF-8, dando loro codice unicode in ottale con \ ddd

Per risolvere questo problema, ho scritto PdfFormFillerUTF-8: http://sourceforge.net/projects/pdfformfiller2/

C'è un rimpiazzo per lo strumento pdftk

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

che risolve Unicode problemi quando compilare i moduli. Opere per me con CP1250 caratteri (Europa centrale).

Dalla pagina del progetto:

  

i seguenti riempimenti comando in dati di modulo da DATA.xfdf in form.pdf   e scrive il risultato di RESULT.pdf. Si appiattisce anche il documento di   Impedire ulteriori modifiche:

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

consegnare esattamente il solito comando pdftk:

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

Si noti che è necessario avere installato JRE.

Sono riuscito a farlo funzionare con pdftk creando un file XFDF con codifica UTF-8.

Ci sono voluti diversi provato ma che farlo funzionare come exepcted era di aggiungere 'need_appearances'

Ecco un esempio:

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

??PDFTK codificano in UTF-16 BE. Non è poi così difficile convertire da UTF-8 a UTF-16BE.

See: strani caratteri quando si riempie PDF con pdftk

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top