コード例 #1
0
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)
コード例 #2
0
    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
コード例 #3
0
    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()
コード例 #4
0
 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)
コード例 #5
0
ファイル: svg_to_png.py プロジェクト: ym2108/badgeyay
    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!")
コード例 #6
0
    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!")
コード例 #7
0
    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!")