[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