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