1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- 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")
|