def textarea(self, box, string, font, **kwargs): self.canvas.saveState() if 'rotate' in kwargs and kwargs['rotate'] != 0: angle = 360 - int(kwargs['rotate']) % 360 self.canvas.rotate(angle) if angle == 90: box = Box(-box.y2, box.x1, -box.y1, box.x1 + box.width) box = box.shift(x=self.size.y, y=self.size.y) elif angle == 180: box = Box(-box.x2, -box.y2, -box.x1, -box.y2 + box.height) box = box.shift(y=self.size.y * 2) elif angle == 270: box = Box(box.y1, -box.x2, box.y2, -box.x1) box = box.shift(x=-self.size.y, y=self.size.y) self.set_font(font) lines = self.textfolder(box, string, font, **kwargs) if kwargs.get('outline'): outline = kwargs.get('outline') self.rectangle(lines.outlinebox, fill='white', outline=outline) rendered = False for string, xy in lines.lines: self.text(xy, string, font, **kwargs) rendered = True self.canvas.restoreState() if not rendered and font.size > 0: font.size = int(font.size * 0.8) self.textarea(box, string, font, **kwargs)
def textarea(self, box, string, font, **kwargs): if 'rotate' in kwargs and kwargs['rotate'] != 0: angle = 360 - int(kwargs['rotate']) % 360 self.write("%d rotate", angle) if angle == 90: box = Box(-box.y2, box.x1, -box.y1, box.x1 + box.width) box = box.shift(x=self.size.y, y=self.size.y) elif angle == 180: box = Box(-box.x2, -box.y2, -box.x1, -box.y2 + box.height) box = box.shift(y=self.size.y * 2) elif angle == 270: box = Box(box.y1, -box.x2, box.y2, -box.x1) box = box.shift(x=-self.size.y, y=self.size.y) lines = self.textfolder(box, string, font, **kwargs) if kwargs.get('outline'): outline = kwargs.get('outline') self.rectangle(lines.outlinebox, fill='white', outline=outline) rendered = False for string, xy in lines.lines: self.text(xy, string, font, **kwargs) rendered = True if not rendered and font.size > 0: font.size = int(font.size * 0.8) self.textarea(box, string, font, **kwargs)
def rotated_textarea(self, box, string, font, **kwargs): angle = int(kwargs['rotate']) % 360 del kwargs['rotate'] if angle in (90, 270): _box = Box(box[0], box[1], box[0] + box.height, box[1] + box.width) if angle == 90: _box = _box.shift(x=box.width) elif angle == 270: _box = _box.shift(y=box.height) elif angle == 180: _box = Box(box[2], box[3], box[2] + box.width, box[3] + box.height) else: _box = Box(box[0], box[1], box[0] + box.width, box[1] + box.height) rotate = "rotate(%d,%d,%d)" % (angle, _box[0], _box[1]) group = g(transform="%s" % rotate) self.svg.addElement(group) elem = SVGImageDrawElement(group, self) elem.textarea(_box, string, font, **kwargs)
def rotated_textarea(self, box, string, font, **kwargs): angle = int(kwargs["rotate"]) % 360 del kwargs["rotate"] if angle in (90, 270): _box = Box(box[0], box[1], box[0] + box.height, box[1] + box.width) if angle == 90: _box = _box.shift(x=box.width) elif angle == 270: _box = _box.shift(y=box.height) elif angle == 180: _box = Box(box[2], box[3], box[2] + box.width, box[3] + box.height) else: _box = Box(box[0], box[1], box[0] + box.width, box[1] + box.height) rotate = "rotate(%d,%d,%d)" % (angle, _box[0], _box[1]) group = g(transform="%s" % rotate) self.svg.addElement(group) elem = SVGImageDrawElement(group, self) elem.textarea(_box, string, font, **kwargs)