span - ¿Cómo configurar cualquier fuente en reportlab Canvas en python?
reportlab tutorial español (3)
Al agregar la fuente DejaVuSans a la aplicación se resolvió mi problema. Aquí está el fragmento de código
pdfmetrics.registerFont(TTFont(''DejaVuSans'',''DejaVuSans.ttf''))
Y usa UTF8 para toda la codificación. :)
Estoy usando reportlab para crear archivos PDF. Cuando trato de establecer una fuente usando 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?
Comienza con la respuesta de Reiner .
Es perfecto con una advertencia.
Reportlab solo busca fuentes 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: / project_root / 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:
from django.conf import settings rl_config.TTFSearchPath.append(str(settings.BASE_DIR) + ''/app/lib/reportlabs/fonts'') pdfmetrics.registerFont(TTFont(''Copperplate'', ''Copperplate-Gothic-Bold.ttf''))
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 lienzo tiene un método getAvailableFonts
que debe devolver todas las fuentes registradas actualmente (y, por lo tanto, utilizables).