diff options
Diffstat (limited to '')
-rw-r--r-- | share/extensions/doc_ai_convert.py | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/share/extensions/doc_ai_convert.py b/share/extensions/doc_ai_convert.py new file mode 100644 index 0000000..db85306 --- /dev/null +++ b/share/extensions/doc_ai_convert.py @@ -0,0 +1,79 @@ +#!/usr/bin/env python +# coding=utf-8 +# +# Copyright (C) 2021 Windell H. Oskay, www.evilmadscientist.com +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +""" +An Inkscape extension to assist with importing AI SVG files. +""" + +import inkex +from inkex import units + + +class DocAiConvert(inkex.EffectExtension): + """ + Main class of the doc_ai_convert extension + + This extension performs the following two actions: + 1) Recognize intended dimensions of original document. + - If the AI document was set up with a size given in picas, cm, mm, or in, + and then exported to SVG, no conversion is needed. + - If the AI document was set up with any other dimensions, + (point, yard, px, ft/in, ft, or m), then the exported SVG + will be in units of 72 DPI pixels. This causes an issue, + as Inkscape uses CSS pixels (px) which are at 96 DPI. + In this case, we re-interpret the size as 72 DPI points (pt), + which will convert the artwork to appear at the correct size. + 2) Recognize Adobe Illustrator layers. + - Group (<g>) elements with non-empty data-name attributes are + groups in an Illustrator SVG document. + - We re-label these as layers such that Inkscape will recognize them. + + """ + + def effect(self): + """ + Main entry point of the doc_ai_convert extension + """ + # 1) Recognize intended dimensions of original document, if given + width_string = self.svg.get("width") + height_string = self.svg.get("height") + + if width_string and height_string: + width_num, width_units = units.parse_unit(width_string) + height_num, height_units = units.parse_unit(height_string) + + # Note that units.parse_unit will return units of 'px' + # for unitless values, and not None. + + if width_num: + if width_units == "px": + self.svg.set("width", units.render_unit(width_num, "pt")) + if height_num: + if height_units == "px": + self.svg.set("height", units.render_unit(height_num, "pt")) + + # 2) Recognize Adobe Illustrator layers. + for node in self.svg.xpath("//svg:g[@data-name]"): + node.set("inkscape:groupmode", "layer") + node.set("inkscape:label", node.pop("data-name")) + + +if __name__ == "__main__": + DocAiConvert().run() |