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

Kay D dtc.kay at gmail.com
Mon Oct 11 12:20:12 EDT 2010


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?

>

>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://two.pairlist.net/pipermail/reportlab-users/attachments/20101011/a4aaaae8/attachment.html>


More information about the reportlab-users mailing list