[reportlab-users] Farsi[persian] characters are printed wrong

Nima nima.g.67 at gmail.com
Tue Oct 12 00:42:54 EDT 2010


thank you kay.i was realy helpful and correct.
to be more helpful to others yesterday i wrote a complete program that
prints persian characters which use dejavu fonts :

#################################################################
# -*- encoding: utf-8 -*-
from reportlab.pdfgen import canvas
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont

canv = canvas.Canvas('test_03.pdf')
fontname = 'CS'

my_location_of_TTF = 'C:\WINDOWS\Fonts\DejaVuSans.ttf'

pdfmetrics.registerFont(TTFont(fontname,my_location_of_TTF))
a=u'\u010d\u0107\u017e\u0161\u0111\u010c\u0106\u017d\u0160\u0110'
canv.setFont(fontname,10)
canv.drawString(50,100,'hjhjgjhhj!!!!!!!!!!!!!!!!!'+a.encode('UTF8'))
canv.save()

################################################################

ps.any user have to download font files and install them in fonts folder.



On Mon, 11 Oct 2010 19:50:12 +0330, Kay D <dtc.kay at gmail.com> wrote:


> 1) Find TTF font which have all glyphs you need, put it to

> reportlab/fonts

>

> 2) Register it:

> from reportlab.pdfbase import pdfmetrics

> from reportlab.pdfbase.ttfonts import TTFont

> from reportlab import rl_config

>

> rl_config.warnOnMissingFontGlyphs = 0

> pdfmetrics.registerFont(TTFont('FreeSerif', 'FreeSerif.ttf'))

>

> 3) Use it:

> c.setFont('FreeSerif', 12)

> c.drawString(3*inch, -3*inch, "Farsi chars here")

>

> Works fine for Russian and special chars like copyright.

>

> PS. As for your question - what you're doing wrong - you just using fonts

> which don't have Farsi glyphs. You also can try Asian fonts from Adobe,

> but

> ttf approach above is easier and faster to do.

>

> -- Kay

>

> hello all,

>> i tried to print a persian document with reportlab but the result was

>> unknows black squares.

>> my code is this:

>>

>> #########################################################################

>> # -*- encoding: utf-8 -*-

>> from reportlab.pdfgen import canvas

>> c = canvas.Canvas("hello.pdf")

>> from reportlab.lib.units import inch

>> # move the origin up and to the left

>> c.translate(inch,inch)

>> # define a large font

>> c.setFont("Helvetica", 80)

>> # choose some colors

>> c.setStrokeColorRGB(0.2,0.5,0.3)

>> c.setFillColorRGB(1,0,1)

>> # draw a rectangle

>> c.rect(inch,inch,6*inch,9*inch, fill=1)

>> # make text go straight up

>> c.rotate(90)

>> # change color

>> c.setFillColorRGB(0,0,0.77)

>> # say hello (note after rotate the y coord needs to be negative!)

>> c.drawString(3*inch, -3*inch, "?????????????")

>> c.showPage()

>> c.save()

>> #########################################################################

>> what am i doing wrong?

>>

>>



--
Using Opera's revolutionary email client: http://www.opera.com/mail/


More information about the reportlab-users mailing list