[reportlab-users] Using an OEM font

Tim Roberts timr at probo.com
Fri Oct 20 18:12:53 EDT 2006


Luc Saffre wrote:

>Hello,
>
>I'd like to create PDF files with texts encoded in cp437 or cp850. These
>texts also contain box characters which are not part of the latin
>character set. But most Windows machines can display and print such text
>if you use a font that provides the OEM charset (and if you activate the
>appropriate codepage).
>
>For example the following script should print a horizontal line that is
>20 characters wide. First on the consoloe ("print s"), then in a PDF
>file. The console displays it correctly, but the PDF file doesn't.
>
>import os
>from reportlab.pdfgen import canvas
>from reportlab.lib.units import mm
>filename="tmp.pdf"
>s=u'\u2500'*20
>print s
>canvas = canvas.Canvas(filename)
>t=canvas.beginText()
>t.setTextOrigin(20*mm,200*mm)
>t.textOut(s)
>canvas.drawText(t)
>canvas.showPage()
>canvas.save()
>os.startfile(filename)
>
>I guess that I must specify the right font to use --- but how?
>  
>

The default font is Helvetica, which is a Type 1 font that doesn't
support Unicode encoding.

import os
from reportlab.pdfgen import canvas
from reportlab.lib.units import mm
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont

pdfmetrics.registerFont( TTFont( 'Arial', 'arial.ttf'))
filename="tmp.pdf"
s=u'\u2500'*20
print s
canvas = canvas.Canvas(filename)
canvas.setFont( 'Arial', 12 )
t=canvas.beginText()
t.setTextOrigin(20*mm,200*mm)
t.textOut(s)
canvas.drawText(t)
canvas.showPage()
canvas.save()
os.startfile(filename)

-- 
Tim Roberts, timr at probo.com
Providenza & Boekelheide, Inc.



More information about the reportlab-users mailing list