[reportlab-users] TrueType fonts and barcode widgets

Markos Kapes mkapes at gmail.com
Tue Feb 26 23:23:34 EST 2013


When using True Type fonts as prescribed in the documentation, I get a value error if I use a unicode font with a barcode widget if I don't also set the font of the barcode widget to the same font. For the time being, it's not a big deal as it still gets the job done, but I'm curious what I might be doing wrong. The code works fine with builtin 'Courier' but if I try a system unicode font, it chokes unless I make sure barcode has the same font.

Thanks,
--Markos Kapes

The code relevant code is as follows, followed by the stack trace.
rl_config.warnOnMissingFontGlyphs = 1
registerFont(TTFont('Courier New', 'Courier New.ttf'))
registerFont(TTFont('Courier New Bold', 'Courier New Bold.ttf'))
registerFont(TTFont('Courier New Italic', 'Courier New Italic.ttf'))
registerFont(TTFont('Courier New Bold Italic', 'Courier New Bold Italic.ttf'))
registerFontFamily('Courier New', normal='Courier New', bold='Courier New Bold', italic='Courier New Italicc', boldItalic='Courier New Bold Italic')

font = 'Courier New'
font_size = 9
doc_width = 2.4*inch
doc_height = 2*inch
margin = 0.1*inch
tmpfile = tempfile.NamedTemporaryFile(delete=False)

canvas1 = canvas.Canvas(tmpfile, (doc_width, doc_height))
#change coordinates so origin is now at left bottom margin corner
canvas1.translate(margin, margin)
text_object = canvas1.beginText()
text_object.setFont(font, font_size)
text_object.setTextOrigin(0, column_height-margin)
text_object.textOut( title)
text_object.moveCursor(120, 0)
text_object.textLine(price)
canvas1.drawText(text_object)
#create barcode and draw it at the origin.
barcode1=barcode.createBarcodeDrawing('EAN13', value=isbn, validate=True, width= column_width, height=1.4*inch, humanReadable=True, fontName=font)
renderPDF.draw(barcode1, canvas1, 0,0)
canvas1.showPage()
canvas1.save()


---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
/Library/Python/2.7/site-packages/ipython-0.14.dev-py2.7.egg/IPython/utils/py3compat.pyc in execfile(fname, *where)
177 else:
178 filename = fname
--> 179 __builtin__.execfile(filename, *where)

/Users/mkapes/Documents/Developer/git_repos/infoshopkeeper/specialOrderLabel.py in <module>()
92 canvas1.save()
93
---> 94 print_special_order_label(isbn=isbn, booktitle=booktitle, author=author, price=price, customer_name=customer_name, customer_phone=customer_phone, customer_email=customer_email)

/Users/mkapes/Documents/Developer/git_repos/infoshopkeeper/specialOrderLabel.py in print_special_order_label(isbn, booktitle, author, price, customer_name, customer_phone, customer_email)
90 canvas1.drawText(text_object)
91 canvas1.showPage()
---> 92 canvas1.save()
93
94 print_special_order_label(isbn=isbn, booktitle=booktitle, author=author, price=price, customer_name=customer_name, customer_phone=customer_phone, customer_email=customer_email)

/Library/Python/2.7/site-packages/reportlab/pdfgen/canvas.pyc in save(self)
1192 After this operation the canvas must not be used further."""
1193 if len(self._code): self.showPage()
-> 1194 self._doc.SaveToFile(self._filename, self)
1195
1196 def getpdfdata(self):

/Library/Python/2.7/site-packages/reportlab/pdfbase/pdfdoc.pyc in SaveToFile(self, filename, canvas)
234 filename = utf8str(filename)
235 f = open(filename, "wb")
--> 236 f.write(self.GetPDFData(canvas))
237 if myfile:
238 f.close()

/Library/Python/2.7/site-packages/reportlab/pdfbase/pdfdoc.pyc in GetPDFData(self, canvas)
246 # realize delayed fonts
247 for fnt in self.delayedFonts:
--> 248 fnt.addObjects(self)
249 # add info stuff to signature
250 self.info.invariant = self.invariant

/Library/Python/2.7/site-packages/reportlab/pdfbase/ttfonts.pyc in addObjects(self, doc)
1124 if doc.compression:
1125 cmapStream.filters = [pdfdoc.PDFZCompress]
-> 1126 pdfFont.ToUnicode = doc.Reference(cmapStream, 'toUnicodeCMap:' + baseFontName)
1127
1128 pdfFont.FontDescriptor = self.face.addSubsetObjects(doc, baseFontName, subset)

/Library/Python/2.7/site-packages/reportlab/pdfbase/pdfdoc.pyc in Reference(self, object, name, InstanceType)
534 other = idToObject[name]
535 if other!=object:
--> 536 raise ValueError, "redefining named object: "+repr(name)
537 return PDFObjectReference(name)
538 if iob:

ValueError: redefining named object: 'toUnicodeCMap:AAAAAA+CourierNewPSMT'

> /Library/Python/2.7/site-packages/reportlab/pdfbase/pdfdoc.py(536)Reference()

535 if other!=object:
--> 536 raise ValueError, "redefining named object: "+repr(name)
537 return PDFObjectReference(name)


More information about the reportlab-users mailing list