【问题标题】:Convert SVG to PNG and PDF command line将 SVG 转换为 PNG 和 PDF 命令行
【发布时间】:2018-11-08 15:47:59
【问题描述】:

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

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

它包括渐变

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

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

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

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

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

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

备注我使用 SVG 类,但样式在 SVG 本身的样式中


解决方案

来自 ccprog 的解决方案

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

【问题讨论】:

  • 如果仅用于该单个图形,您也可以从浏览器打印到文件。例如,Inkscape 可以导入创建的 pdf(使用 poppler/cairo 选项在我的测试中得到了更好的结果)。

标签: pdf svg png inkscape


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢 ccprog,我已经解决了我的问题(在我的例子中是通过更改 xml 的生成)
猜你喜欢
  • 1970-01-01
  • 2016-04-16
  • 2011-06-09
  • 2010-10-13
  • 2018-09-07
  • 1970-01-01
  • 2013-06-29
  • 2011-05-06
相关资源
最近更新 更多