1__all__=('dumpttf',) 2def dumpttf(fn,fontName=None, verbose=0): 3 '''dump out known glyphs from a ttf file''' 4 import os 5 if not os.path.isfile(fn): 6 raise IOError('No such file "%s"' % fn) 7 from reportlab.pdfbase.pdfmetrics import registerFont, stringWidth 8 from reportlab.pdfbase.ttfonts import TTFont 9 from reportlab.pdfgen.canvas import Canvas 10 if fontName is None: 11 fontName = os.path.splitext(os.path.basename(fn))[0] 12 dmpfn = '%s-ttf-dump.pdf' % fontName 13 ttf = TTFont(fontName, fn) 14 K = list(ttf.face.charToGlyph.keys()) 15 registerFont(ttf) 16 c = Canvas(dmpfn) 17 W,H = c._pagesize 18 titleFontSize = 30 # title font size 19 titleFontName = 'Helvetica' 20 labelFontName = 'Courier' 21 fontSize = 10 22 border = 36 23 dx0 = stringWidth('12345: ', fontName, fontSize) 24 dx = dx0+20 25 dy = 20 26 K.sort() 27 y = 0 28 page = 0 29 for i, k in enumerate(K): 30 if y<border: 31 if page: c.showPage() 32 page += 1 33 y = H - border - titleFontSize 34 c.setFont(titleFontName, titleFontSize) 35 c.drawCentredString(W/2.0,y, 'TrueType Font %s Page %d' %(fontName,page)) 36 y -= 0.2*titleFontSize + dy 37 x = border 38 c.setFont(labelFontName, 10) 39 c.drawString(x,y,'%5.5x:' % k ) 40 c.setFont(fontName, 10) 41 c.drawString(x+dx0,y,chr(k).encode('utf8')) 42 x += dx 43 if x+dx>W-border: 44 x = border 45 y -= dy 46 c.showPage() 47 c.save() 48 if verbose: 49 print('Font %s("%s") has %d glyphs\ndumped to "%s"' % (fontName,fn,len(K),dmpfn)) 50 51if __name__=='__main__': 52 import sys, glob 53 if '--verbose' in sys.argv: 54 sys.argv.remove('--verbose') 55 verbose = 1 56 else: 57 verbose = 0 58 for a in sys.argv[1:]: 59 for fn in glob.glob(a): 60 dumpttf(fn, verbose=verbose) 61