将SVG转换为PNG和PDF命令行

时间:2018-05-29 22:06:44

标签: pdf svg png inkscape

我有一个SVG文件,我想将其转换为在PDF中使用它。

它在我的浏览器(chrome,edge,firefox)上呈现得很好。 文件可在此处获取:https://gist.github.com/acourdavault/329b8670517e0716cd38eab202e2ca0e

它包括渐变 enter image description here

我尝试了magick,inkskape,librsvg2将其转换为png和/或pdf。 最大的问题是不支持停止颜色和停止颜色不透明度 enter image description here 注意,这里只有inkscape提供此消息,其他转换器不提供任何信息,即使是冗长但结果很糟糕 ```的bash

**(inkscape:648850):警告**:未实现的样式属性SP_PROP_STOP_COLOR:value:#ffa500

**(inkscape:648850):警告**:未实现的样式属性SP_PROP_STOP_OPACITY:value:0.59999999999999998

**(inkscape:648850):警告**:未实现的样式属性SP_PROP_STOP_COLOR:value:#ffff00 ```

PDF(保持格式矢量)我想是理想的, 但是我需要能够从命令行运行它。

你知道为什么,这不起作用以及如何解决它?

备注我使用SVG类,但样式是SVG本身的样式§

溶液

来自ccprog的解决方案

我将defs移到了svg xml的顶部, 我使用fill = url(#gradientid)来声明渐变而不是类 我替换了stop-color和stop-opacity的定义,即在类中将它们嵌入到stop标记中。

1 个答案:

答案 0 :(得分:1)

这里的问题是浏览器旁边的各种渲染器不能很好地支持样式表。您需要内联所有样式才能使其正常工作

个人广告:我为该任务编写了一个节点模块:svg-icon-toolbox。您可以加载文件,执行inline任务并使用write将其写回。然后可以在回调中的衍生过程中完成PDF转换。

第二个问题是在使用后说明渐变。根据规范它完全有效,但librsvg不喜欢它。 Inkscape会很好。 (在系统上存在Inkscape或librsvg时,magick将使用其中一个进行渲染,因此这是多余的。)