2010-10-28 30 views
1

J'ai essayé de convertir des fichiers html en hébreu sans succès; les caractères hébreux apparaissent dans le PDF de sortie sous la forme de rectangles noirs, quel que soit le codage que j'ai essayé.problème d'utilisation de xhtml2pdf avec unicode

J'ai essayé quelques fichiers de test unicode inclus dans la distribution pisa: pisa-3.0.33\test\test-unicode-all.html et \test-bidirectional-text.html. J'ai couru xhtml2pdf à partir de la ligne de commande à la fois avec et sans --encoding utf-8. Même résultat: aucun des caractères non latins ne l'a fait.

Est-ce un problème de fontes *? Si le fichier de test Unicode fonctionne pour vous, avez-vous fait quelque chose pour le configurer? * FWIW, au moins certaines de ces langues, y compris l'hébreu, devraient fonctionner avec Arial.

EDIT: Sinon, si quelqu'un a mis en place pisa et pourrait essayer de convertir le fichier de test Unicode ci-dessus, je serais très reconnaissant.

+1

Quel encodage est le code HTML enregistré dans? Est-ce UTF-8? –

+0

Oui. J'ai également essayé avec Windows-1255 HTML (et utilisé --encoding windows-1255 dans ce cas). – user490616

Répondre

5

Insérer le code suivant en html m'a aidé

<style> 
@page { 
size: a4; 
margin: 0.5cm; 
} 

@font-face { 
font-family: "Verdana"; 
src: url("verdana.ttf"); 
} 

html { 
font-family: Verdana; 
font-size: 11pt; 
} 

</style> 

dans l'URL au lieu de « verdana.ttf » vous devez mettre le chemin absolu à la police dans votre os

+0

notez que le chemin url() doit être relatif à votre racine de projet (selon mon expérience) –

3

Si quelqu'un dans l'avenir tente, comme moi , pour comprendre comment CORRECTEMENT créer un fichier PDF contenant l'hébreu à l'aide xhtml2pdf, voici ce qui a fonctionné pour moi:

  1. Première chose: y compris les paramètres de polices tels que décrits ici par @eviltrue dans mon HTML. Cela peut être n'importe quelle police tant qu'elle prend en charge les caractères hébreux, sinon tous les caractères hébreux dans le code HTML d'entrée apparaîtraient simplement comme des rectangles noirs dans le PDF.

  2. Au moment de la rédaction de cette réponse, alors qu'il est possible de sortie des caractères hébreux au format PDF en xhtml2pdf, les caractères hébreux sont émis dans l'ordre Revers, à savoir שלום כיתה א
    serait א התיכ םולש.

À ce stade, je suis coincé, mais je suis tombé sur ce SO asnwer: https://stackoverflow.com/a/15449145/1918837

Après avoir installé le package python-bidi, voici un exemple d'une solution complète (utilisée dans une application python) :

from bidi import algorithm as bidialg 
from xhtml2pdf import pisa 

HTMLINPUT = """ 
      <!DOCTYPE html> 
      <html> 
      <head> 
       <meta http-equiv="content-type" content="text/html; charset=utf-8"> 
       <style> 
        @page { 
         size: a4; 
         margin: 1cm; 
        } 

        @font-face { 
         font-family: DejaVu; 
         src: url(my_fonts_dir/DejaVuSans.ttf); 
        } 

        html { 
         font-family: DejaVu; 
         font-size: 11pt; 
        } 
       </style> 
      </head> 
      <body> 
       <div>Something in English - משהו בעברית</div> 
      </body> 
      </html> 
      """ 

pdf = pisa.CreatePDF(bidialg.get_display(HTMLINPUT, base_dir="L"), outpufile) 

# I'm using base_dir="L" so that "< >" signs in HTML tags wouldn't be 
flipped by the bidi algorithm 

la bonne chose à propos de l'algorithme bidi est que vous pouvez avoir mélangé des langues RTL et RLT dans la même ligne (comme dans l'exemple HTML ci-dessus) et ont toujours un résultat formaté correctement.

EDIT: La meilleure façon d'aller est maintenant définitivement à l'aide wkhtmltopdf