Evolus 铅笔是一款功能强大的 FOSS GUI 模型工具。遗憾的是,它不支持开箱即用的 SVG 导出。我还能用什么方法将 Pencil 模型转换为 SVG 吗?
答案1
概述
事实证明,有一种方法可以使用xsltproc
命令行 xslt 处理器来实现这一点。我们将要使用的样式表是由罗伯特·科斯滕并于evolus Pencil 项目页面的问题跟踪器。
引用自错误报告:
我希望通过 UI 来实现这一点,但在此之前,我已经编写了一个小型 XSLT 表单,基本上只从 http://www.evolus.vn/Namespace/Pencil命名空间(无论如何,导出时大多数管理数据都不需要)。生成的文件应该可以在 Firefox 中正常工作(其中 SVG 的 foreignObject 标签得到了很好的支持),但像 batik 这样的库(例如在 apache fop 中使用)在处理其中的 XHTML、XUL 或 XLink 时会遇到问题。我打算扩展工作表以支持至少我遇到的几个元素,但我不会做出我无法兑现的承诺 ;-)
附件文件也可以作为我的工具集合的一部分找到(用于为我的项目生成 DocBook 然后生成 PDF): https://github.com/Robert-Kosten/de.robertkosten.tools/blob/master/xsl/ep2svg.xsl
它目前遵循 GPLv3,但我愿意遵循 GPLv2 发布它,这样如果有人希望将它包含在他们的软件中,就无需调用“任何更高版本”;-)
安装
从上面的链接下载样式表,或者将以下段落复制并粘贴到名为的文件中ep2svg.xsl
:
<?xml version="1.0" encoding="UTF-8"?>
<!--
This file is part of de.robertkosten.tools. de.robertkosten.tools 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 3 of the License, or (at your option) any later version.
de.robertkosten.tools 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 de.robertkosten.tools. If not, see
<http://www.gnu.org/licenses/>.
I suggest calling this with:
xsltproc -o dir/ ep2svg.xsl input.ep
@author Robert Kosten
-->
<xsl:stylesheet version="1.0" extension-element-prefixes="exsl" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/2000/svg" xmlns:p="http://www.evolus.vn/Namespace/Pencil" xmlns:html="http://www.w3.org/1999/xhtml" xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:exsl="http://exslt.org/common">
<xsl:output omit-xml-declaration="yes" />
<xsl:strip-space elements="p:Document p:Pages p:Page"/>
<xi:include href="includes/tools.xsl" />
<xsl:template match="/p:Document">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="p:Pages">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="p:Page">
<exsl:document href="{p:Properties/p:Property[@name='name']}.svg" method="xml" version="1.0" encoding="utf-8" doctype-public="-//W3C//DTD SVG 1.1//EN" doctype-system="http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" media-type="image/svg+xml">
<svg version="1.1">
<xsl:apply-templates />
</svg>
</exsl:document>
</xsl:template>
<xsl:template match="p:Content">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="*[namespace-uri() != 'http://www.evolus.vn/Namespace/Pencil']">
<xsl:copy>
<xsl:copy-of select="@*[namespace-uri() != 'http://www.evolus.vn/Namespace/Pencil']" />
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:template match="*">
<!-- Void -->
</xsl:template>
</xsl:stylesheet>
将以下脚本保存为ep2svg.sh
:
#!/bin/bash
# converts evol.us Pencil mockup files to svg
# (c) 2013 Glutanimate (http://askubuntu.com/users/81372/)
# released under GNU GPL v2
# XSL source: (c) 2013 Robert Kosten (https://code.google.com/p/evoluspencil/issues/detail?id=260#c1)
XSLFILE="./ep2svg.xsl"
WORKINGDIR=$(dirname "$1")
xsltproc -o "$WORKINGDIR"/ "$XSLFILE" "$@"
确保指向XSLFILE
正确的位置。
用法:
ep2svg.sh <mockup1.ep> <mockup2.ep> ...
答案2
如果你使用 Java 和 maven 开发的模型,则可以使用 maven 插件pencil2svg-maven-插件。