[python] reportlab a čeština
RMiklos na pss.sk
RMiklos na pss.sk
Pondělí Únor 5 09:46:11 CET 2007
Problem s diakritikou v Reportlabe som kedysi riesil. Podarilo sa mi to
tak, ze som pouzil TTF-fonty s windows.
Tu uvadtzam postup:
*****************************************************************************
Pretoze standardne fonty Reportlabu pouzivaju tzv. znak sadu
WinAnsiEncoding, znamu ako Code Page 1252,
co ma byt prakticky identicke s ISO Latin-1, nie su tam zahrnute urcite
znaky (ako napr. ľ ..etc.)
Nastastie umoznuje reportlab pouzit aj TrueTypeFonty.
K tomu treba urobit toto:
1) Naimportovat tieto veci
import reportlab.rl_config
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
2) Nakonfigurovat search path pre TTF
reportlab.rl_config.TTFSearchpath ="c:\\Windows\\Fonts"
3) Zaregistrovat patricny font
(ja som zvolil namiesto vstavaneho fontu Helvetica arial.ttf a
zaregistroval som si ho pod menom Arial)
pdfmetrics.registerFont(TTFont('Arial', 'arial.ttf'))
4) Zamenit font v metode
setFont("Helvetica", ..)
za
setFont("Arial", ..)
5) Prepisat stringy v metode drawString na unicode-stringy s diakritikou ,
napr.
drawString(1.2*inch, 11.25* inch, "MESTSKE LESY A MAJETKY s.r.o., Velka
Lomnica")
na
drawString(1.2*inch, 11.25* inch, u"MESTSKÉ LESY A MAJETKY s.r.o., Veľká
Lomnica".encode("utf-8"))
"Vladislav Ludík" <vlada na ludik.cz>
Sent by: python-bounces na py.cz
04.02.2007 08:58
Please respond to
Konference PyCZ <python na py.cz>
To
python na py.cz
cc
Subject
[python] reportlab a čeština
Problém: latin2 v modulu reportlab
Když použiju program viz níže, jsou vygenerovány pdf tabulky v latin1.
Jak dostat z reportlab co nejjednodušeji českou sadu na výstupu pdf ?
import sys
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfgen import canvas
import string
label_formats = {'dec':('%d=', 'Decimal'),
'oct':('%o=','Octal'),
'hex':('0x%x=', 'Hexadecimal')}
def run(mode):
label_formatter, caption = label_formats[mode]
for enc in ['WinAnsi','MacRoman']:
canv = canvas.Canvas(
'StandardFonts_%s.pdf' % enc,
)
canv.setPageCompression(0)
for faceName in pdfmetrics.standardFonts:
if faceName in ['Symbol', 'ZapfDingbats']:
encLabel = faceName+'Encoding'
else:
encLabel = enc + 'Encoding'
fontName = faceName + '-' + encLabel
pdfmetrics.registerFont(pdfmetrics.Font(fontName,
faceName,
encLabel)
)
canv.setFont('Times-Bold', 18)
canv.drawString(80, 744, fontName)
canv.setFont('Times-BoldItalic', 12)
canv.drawRightString(515, 744, 'Labels in ' + caption)
#for dingbats, we need to use another font for the numbers.
#do two parallel text objects.
for byt in range(32, 256):
col, row = divmod(byt - 32, 32)
x = 72 + (66*col)
y = 720 - (18*row)
canv.setFont('Helvetica', 14)
canv.drawString(x, y, label_formatter % byt)
canv.setFont(fontName, 14)
canv.drawString(x+44, y,
chr(byt).decode(encLabel,'ignore').encode('utf8'))
canv.showPage()
canv.save()
if __name__ == '__main__':
mode = 'hex'
run(mode)
_______________________________________________
Python mailing list
Python na py.cz
http://www.py.cz/mailman/listinfo/python
Mgr. Ing. Roman MIKLÓŠ
Prvá stavebná sporiteľňa a.s.
Bajkalská 30, P. O. Box 48
829 48 Bratislava 25
Tel.: +421/ 2 / 582 31 174
Fax: +421/ 2 / 582 31 109
Další informace o konferenci Python