¿Cómo configurar cualquier fuente en reportlab Canvas en python?

Estoy usando reportlab para crear archivos PDF. Cuando bash establecer una fuente con el siguiente método, obtengo un KeyError :

 pdf = Canvas('test.pdf') pdf.setFont('Tahoma', 16) 

Pero si uso 'Courier' lugar de 'Tahoma' no hay problema. ¿Cómo puedo usar Tahoma?

Perhabs Tahoma es una fuente TrueType, y debes registrarla primero. De acuerdo con la guía del usuario de ReportLab, debe hacer esto:

 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!") 

El objeto de canvas tiene un método getAvailableFonts que debe devolver todas las fonts registradas actualmente (y, por lo tanto, utilizables).

Comienza con la respuesta de Reiner .

Es perfecto con una advertencia.

Reportlab solo busca fonts en carpetas predefinidas :

 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 está tratando de usar una fuente ttf que ha descargado de Internet y desea que esa fuente esté disponible en todos sus servidores, sugeriría lo siguiente:

  • Agregue la fuente a su proyecto en cualquier directorio. por ejemplo: / raíz_proyecto / app / lib / reportlabs / fonts /
  • Asegúrate de tener algo como BASE_DIR / ROOT_DIR en tu configuración:

     BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 
  • agrega la siguiente línea a un archivo python que genera 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')) 

Al agregar la fuente DejaVuSans a la aplicación resolví mi problema. Aquí está el fragmento de código

 pdfmetrics.registerFont(TTFont('DejaVuSans','DejaVuSans.ttf')) 

Y usa UTF8 para toda la encoding. 🙂