Spaces:
Runtime error
Runtime error
| from fontTools.pens.basePen import BasePen | |
| from reportlab.graphics.shapes import Path | |
| __all__ = ["ReportLabPen"] | |
| class ReportLabPen(BasePen): | |
| """A pen for drawing onto a ``reportlab.graphics.shapes.Path`` object.""" | |
| def __init__(self, glyphSet, path=None): | |
| BasePen.__init__(self, glyphSet) | |
| if path is None: | |
| path = Path() | |
| self.path = path | |
| def _moveTo(self, p): | |
| (x, y) = p | |
| self.path.moveTo(x, y) | |
| def _lineTo(self, p): | |
| (x, y) = p | |
| self.path.lineTo(x, y) | |
| def _curveToOne(self, p1, p2, p3): | |
| (x1, y1) = p1 | |
| (x2, y2) = p2 | |
| (x3, y3) = p3 | |
| self.path.curveTo(x1, y1, x2, y2, x3, y3) | |
| def _closePath(self): | |
| self.path.closePath() | |
| if __name__ == "__main__": | |
| import sys | |
| if len(sys.argv) < 3: | |
| print( | |
| "Usage: reportLabPen.py <OTF/TTF font> <glyphname> [<image file to create>]" | |
| ) | |
| print( | |
| " If no image file name is created, by default <glyphname>.png is created." | |
| ) | |
| print(" example: reportLabPen.py Arial.TTF R test.png") | |
| print( | |
| " (The file format will be PNG, regardless of the image file name supplied)" | |
| ) | |
| sys.exit(0) | |
| from fontTools.ttLib import TTFont | |
| from reportlab.lib import colors | |
| path = sys.argv[1] | |
| glyphName = sys.argv[2] | |
| if len(sys.argv) > 3: | |
| imageFile = sys.argv[3] | |
| else: | |
| imageFile = "%s.png" % glyphName | |
| font = TTFont(path) # it would work just as well with fontTools.t1Lib.T1Font | |
| gs = font.getGlyphSet() | |
| pen = ReportLabPen(gs, Path(fillColor=colors.red, strokeWidth=5)) | |
| g = gs[glyphName] | |
| g.draw(pen) | |
| w, h = g.width, 1000 | |
| from reportlab.graphics import renderPM | |
| from reportlab.graphics.shapes import Group, Drawing, scale | |
| # Everything is wrapped in a group to allow transformations. | |
| g = Group(pen.path) | |
| g.translate(0, 200) | |
| g.scale(0.3, 0.3) | |
| d = Drawing(w, h) | |
| d.add(g) | |
| renderPM.drawToFile(d, imageFile, fmt="PNG") | |