def remove_extra(badge_page, offset): tree = etree.parse(open(badge_page, 'r')) root = tree.getroot() children = root.findall('.//{http://www.w3.org/2000/svg}g') for i in range(offset, len(children)): children[i].getparent().remove(children[i]) etree.ElementTree(root).write(badge_page, pretty_print=True)
def do_svg2png(self, opacity, fill): """ Module to convert svg to png :param `opacity` - Opacity for the output :param `fill` - Background fill for the output """ filename = os.path.join(self.APP_ROOT, 'svg', 'user_defined.svg') tree = parse(open(filename, 'r')) element = tree.getroot() # changing style using XPath. path = element.xpath('//*[@id="rect4504"]')[0] style_detail = path.get("style") style_detail = style_detail.split(";") style_detail[0] = "opacity:" + str(opacity) style_detail[1] = "fill:" + str(fill) style_detail = ';'.join(style_detail) path.set("style", style_detail) # changing text using XPath. path = element.xpath('//*[@id="tspan932"]')[0] # Saving in the original XML tree etree.ElementTree(element).write(filename, pretty_print=True) print("done") png_name = os.path.join(self.APP_ROOT, 'static', 'uploads', 'image', str(uuid.uuid4())) + ".png" svg2png(url=filename, write_to=png_name) return png_name
def save(self, output=None, options=None): self.options = options or {} output = self.open_out_stream(output) self.prefixes.clear() self.reverse_nsmap.clear() serialize_default = \ self.options.get(XMIOptions.SERIALIZE_DEFAULT_VALUES, False) nsmap = {XMI: XMI_URL, XSI: XSI_URL} if len(self.contents) == 1: root = self.contents[0] self.register_eobject_epackage(root) tmp_xmi_root = self._go_across(root, serialize_default) else: tag = etree.QName(XMI_URL, 'XMI') tmp_xmi_root = etree.Element(tag) for root in self.contents: root_node = self._go_across(root, serialize_default) tmp_xmi_root.append(root_node) # update nsmap with prefixes register during the nodes creation nsmap.update(self.prefixes) xmi_root = etree.Element(tmp_xmi_root.tag, nsmap=nsmap) xmi_root[:] = tmp_xmi_root[:] xmi_root.attrib.update(tmp_xmi_root.attrib) xmi_version = etree.QName(XMI_URL, 'version') xmi_root.attrib[xmi_version] = '2.0' tree = etree.ElementTree(xmi_root) tree.write(output, pretty_print=True, xml_declaration=True, encoding=tree.docinfo.encoding) self.uri.close_stream()
def configure_badge_page(self, badge_page): paper_width = self.paper_size.get(self.paper_dimen)[0] paper_height = self.paper_size.get(self.paper_dimen)[1] tree = parse(open(badge_page, 'r')) root = tree.getroot() path = root.xpath('//*[@id="svg2"]')[0] path.set('width', paper_width) path.set('height', paper_height) etree.ElementTree(root).write(badge_page, pretty_print=True)
def change_font_size(self, filename, badge_size, paper_size, font_size_1, font_size_2, font_size_3, font_size_4, font_size_5): """ Module to change size of each badge lines :param `filename` - svg file to modify. :param `font_size_1` - Size to be applied on first line :param `font_size_2` - Size to be applied on Second line :param `font_size_3` - Size to be applied on Third line :param `font_size_4` - Size to be applied on Fourth line :param `font_size_5` - Size to be applied on Fifth line """ font_size = [ 1, font_size_1, font_size_2, font_size_3, font_size_4, font_size_5 ] dimensions = badge_config[paper_size][badge_size] if config.ENV == 'LOCAL': filename = 'static/badges/' + dimensions.badgeSize + 'on' + dimensions.paperSize + '.svg' else: filename = os.getcwd( ) + '/api/static/badges/' + dimensions.badgeSize + 'on' + dimensions.paperSize + '.svg' tree = etree.parse(open(os.path.join(self.APP_ROOT, filename), 'r')) element = tree.getroot() for idx in range(1, dimensions.badges + 1): for row in range(1, 6): _id = 'Person_color_{}_{}'.format(idx, row) path = element.xpath(("//*[@id='{}']").format(_id))[0] style_detail = path.get("style") style_detail = style_detail.split(";") for ind, i in enumerate(style_detail): if i.split(':')[0] == 'font-size': style_detail[ind] = "font-size:" + str( font_size[row]) + 'px' style_detail = ';'.join(style_detail) text_nodes = path.getchildren() path.set("style", style_detail) for t in text_nodes: text_style_detail = t.get("style") if text_style_detail is not None: text_style_detail = text_style_detail.split(";") for ind, i in enumerate(text_style_detail): if i.split(':')[0] == 'font-size': text_style_detail[ind] = "font-size:" + str( font_size[row]) + 'px' text_style_detail = ";".join(text_style_detail) t.set("style", text_style_detail) else: t.set("style", "font-size:" + str(font_size[row]) + 'px') etree.ElementTree(element).write(filename, pretty_print=True) print("Font Size Saved!")
def do_text_fill(self, filename, fill, badge_size, paper_size): """ Module to change color of badge's details :param `filename` - svg file to modify. :param `fill` - lis of color to be applied on each line """ dimensions = badge_config[paper_size][badge_size] if config.ENV == 'LOCAL': filename = 'static/badges/' + dimensions.badgeSize + 'on' + dimensions.paperSize + '.svg' else: filename = os.getcwd( ) + '/api/static/badges/' + dimensions.badgeSize + 'on' + dimensions.paperSize + '.svg' tree = etree.parse(open(os.path.join(self.APP_ROOT, filename), 'r')) element = tree.getroot() for idx in range(1, dimensions.badges + 1): for row in range(1, 6): _id = 'Person_color_{}_{}'.format(idx, row) path = element.xpath(("//*[@id='{}']").format(_id))[0] style_detail = path.get("style") style_detail = style_detail.split(";") if style_detail[7].split(':')[0] == 'fill': style_detail[7] = "fill:" + str(fill) print(style_detail[7]) elif style_detail[6].split(':')[0] == 'fill': style_detail[6] = "fill:" + str(fill) print(style_detail[6]) else: for ind, i in enumerate(style_detail): if i.split(':')[0] == 'fill': style_detail[ind] = "fill:" + str(fill) style_detail = ';'.join(style_detail) text_nodes = path.getchildren() path.set("style", style_detail) for t in text_nodes: text_style_detail = t.get("style") text_style_detail = text_style_detail.split(";") for ind, i in enumerate(text_style_detail): if i.split(':')[0] == 'fill': text_style_detail[ind] = "fill:" + str(fill) text_style_detail = ";".join(text_style_detail) t.set("style", text_style_detail) etree.ElementTree(element).write(filename, pretty_print=True) print("Text Fill saved!")
def change_text_align(self, filename, badge_size, paper_size, align_1, align_2, align_3, align_4, align_5): """ Module to change Text Alignment of each badge line :param `filename` - svg file to modify. :param `align_1` - Text Alignment to be applied on first line :param `align_2` - Text Alignment to be applied on Second line :param `align_3` - Text Alignment to be applied on Third line :param `align_4` - Text Alignment to be applied on Fourth line :param `align_5` - Text Alignment to be applied on Fifth line """ align = [1, align_1, align_2, align_3, align_4, align_5] dimensions = badge_config[paper_size][badge_size] if config.ENV == 'LOCAL': filename = 'static/badges/' + dimensions.badgeSize + 'on' + dimensions.paperSize + '.svg' else: filename = os.getcwd( ) + '/api/static/badges/' + dimensions.badgeSize + 'on' + dimensions.paperSize + '.svg' tree = etree.parse(open(os.path.join(self.APP_ROOT, filename), 'r')) element = tree.getroot() for idx in range(1, dimensions.badges + 1): for row in range(1, 6): _id = 'Person_color_{}_{}'.format(idx, row) path = element.xpath(("//*[@id='{}']").format(_id))[0] style_detail = path.get("style") style_detail = style_detail.split(";") for ind, i in enumerate(style_detail): if i.split(':')[0] == 'text-align': style_detail[ind] = "text-align:" + align[row] style_detail = ';'.join(style_detail) text_nodes = path.getchildren() path.set("text-align", style_detail) for t in text_nodes: text_style_detail = t.get("style") text_style_detail = text_style_detail.split(";") text_style_detail[-1] = "text-align:" + align[row] text_style_detail = ";".join(text_style_detail) t.set("style", text_style_detail) etree.ElementTree(element).write(filename, pretty_print=True) print("Text Alignment Saved!")