将 SVG 转换为 PNG 和 PDF 命令行

Convert SVG to PNG and PDF command line

我有一个 SVG 文件,我想将其转换为 PDF 格式。

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

它包括渐变

我试过 magick、inkskape、librsvg2 将其转换为 png 和/或 pdf。 最大的问题是不支持 stop-color 和 stop-color-opacity 注意,这里只有inkscape给出了这个消息,其他转换器不给出任何信息,即使是冗长的但结果很糟糕 ```bash

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

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

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

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

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

备注我用的是SVGclass,但是样式在SVG本身的样式§中


解决方案

来自 ccprog 的解决方案

我将 defs 移到了 svg 的顶部 xml, 我使用 fill=url(#gradientid) 来声明渐变而不是 classes 我替换了 classes 中停止颜色和停止不透明度的定义,以将它们内联到停止标记中。

这里的问题是样式表没有得到除浏览器之外的各种渲染器的良好支持。您需要内联所有样式才能使其正常工作

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

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