J'utilise reportlab pour créer des fichiers PDF. Lorsque j'essaie de définir une police à l'aide de la méthode suivante, j'obtiens une KeyError
:
pdf = Canvas('test.pdf')
pdf.setFont('Tahoma', 16)
Mais si j'utilise 'Courier'
au lieu de 'Tahoma'
, il n'y a pas de problème. Comment puis-je utiliser Tahoma?
Perhabs Tahoma est une police TrueType et vous devez d'abord l'enregistrer. Selon le manuel d'utilisation de ReportLab, vous devez procéder comme suit:
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
pdfmetrics.registerFont(TTFont('Vera', 'Vera.ttf'))
pdfmetrics.registerFont(TTFont('VeraBd', 'VeraBd.ttf'))
pdfmetrics.registerFont(TTFont('VeraIt', 'VeraIt.ttf'))
pdfmetrics.registerFont(TTFont('VeraBI', 'VeraBI.ttf'))
canvas.setFont('Vera', 32)
canvas.drawString(10, 150, "Some text encoded in UTF-8")
canvas.drawString(10, 100, "In the Vera TT Font!")
L'objet canvas a une méthode getAvailableFonts
qui doit renvoyer toutes les polices actuellement enregistrées (et donc utilisables).
Commencez par La réponse de Reiner .
C'est parfait avec une mise en garde.
Reportlab recherche uniquement les polices dans dossiers prédéfinis :
TTFSearchPath = (
'c:/winnt/fonts',
'c:/windows/fonts',
'/usr/lib/X11/fonts/TrueType/',
'/usr/share/fonts/truetype',
'/usr/share/fonts', #Linux, Fedora
'/usr/share/fonts/dejavu', #Linux, Fedora
'%(REPORTLAB_DIR)s/fonts', #special
'%(REPORTLAB_DIR)s/../fonts', #special
'%(REPORTLAB_DIR)s/../../fonts',#special
'%(CWD)s/fonts', #special
'~/fonts',
'~/.fonts',
'%(XDG_DATA_HOME)s/fonts',
'~/.local/share/fonts',
#mac os X - from
#http://developer.Apple.com/technotes/tn/tn2024.html
'~/Library/Fonts',
'/Library/Fonts',
'/Network/Library/Fonts',
'/System/Library/Fonts',
)
Si vous essayez d'utiliser une police ttf que vous avez téléchargée sur Internet et souhaitez qu'elle soit disponible sur tous vos serveurs, je vous suggère ce qui suit:
Assurez-vous que vous avez quelque chose comme BASE_DIR/ROOT_DIR dans vos paramètres:
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
ajoutez la ligne suivante à un fichier python qui génère un pdf:
import reportlab
from Django.conf import settings
reportlab.rl_config.TTFSearchPath.append(str(settings.BASE_DIR) + '/app/lib/reportlabs/fonts')
pdfmetrics.registerFont(TTFont('Copperplate', 'Copperplate-Gothic-Bold.ttf'))
En ajoutant DejaVuSans Font à l'application a résolu mon problème. Voici l'extrait de code
pdfmetrics.registerFont(TTFont('DejaVuSans','DejaVuSans.ttf'))
Et utilisez UTF8 pour tout le codage :)