Inkscape - 如何从unix命令行设置笔触样式

时间:2014-01-06 16:20:39

标签: javascript html svg inkscape

我正在编写一个使用svg在图像上绘制点的应用程序。该图像最初以pdf形式出现,我使用命令中的Inkscape将其转换为.svg文件:

inkscape –l convertedImage.svg baseImage.pdf

然后在我的html中使用我的svg标签中的转换图像。

<svg>
    <image x=”100” y=”100” width=”500” height=”500”
    xlink:href=”/my/location/convertedImage.svg”></image>
    …
</sig>

我的问题是转换后图像线太亮了。如果我打开Inkscape GUI,我可以选择图像,然后在“笔触样式”选项卡中将宽度增加1px。这样做会让图像看起来像我一样,但我需要能够以编程方式完成它,因为我每天都在运行这个命令,通过许多pdf文件。

有没有办法可以:

  1. 在inkscape unix命令中包含“笔触样式宽度”设置?
  2. 以某种方式使用css?
  3. 在svg img标签中设置它

1 个答案:

答案 0 :(得分:5)

SVG是一种XML格式,因此您可以使用这样的XML转换来修复它:

壳&GT; xsltproc svglinewidth.xsl convertedImage.svg&gt; fixedImage.svg

其中svglinewidth.xsl包含以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml"/>

    <xsl:param name="stroke-width">1px</xsl:param>

    <xsl:template match="*">
        <xsl:copy>
            <xsl:apply-templates select="@*|text()|*"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="@style[contains(., 'stroke-width:')]">
        <xsl:variable name="before" select="substring-before(.,'stroke-width:')"/>
        <xsl:variable name="rest" select="substring-after(.,'stroke-width:')"/>
        <xsl:variable name="after" select="substring-after($rest,';')"/>
        <xsl:attribute name="style">
            <xsl:value-of select="$before"/>
            <xsl:text>stroke-width:</xsl:text>
            <xsl:value-of select="$stroke-width"/>
            <xsl:text>;</xsl:text>
            <xsl:value-of select="$after"/>
        </xsl:attribute>
    </xsl:template>

    <xsl:template match="@*|text()">
        <xsl:copy/>
    </xsl:template>

</xsl:stylesheet>

这将使用值stroke-width替换样式属性中出现的所有stroke-width:1px,

要指定另一个宽度,可以将参数传递给xsltproc,如下所示:

壳&GT; xsltproc - stringparam stroke-width 5px svglinewidth.xsl convertedImage.svg&gt; fixedImage.svg

xsltproc几乎适用于任何平台。 Linux将其作为包,对于Unix,请参阅http://xmlsoft.org/XSLT/xsltproc2.html

希望有所帮助。

<强>更新 如果您不想设置固定的笔触宽度,但添加到笔划宽度,则以下更改将完成此任务:

  1. 从xsl:param值中删除单位(px),使其显示为<xsl:param name="stroke-width">1</xsl:param>
  2. 在现有变量之后添加一个新变量:<xsl:variable name="current" select="substring-before($rest,';')"/>
  3. select标记的xsl:value-of属性替换为$current + $stroke-width,如下所示:<xsl:value-of select="$current + $stroke-width"/>
  4. 这假设源SVG中stroke-width:之后没有单元。要添加,旧值和增量都必须是普通数字。