如何在 Linux 上将 SVG 转换为 PDF

如何在 Linux 上将 SVG 转换为 PDF

如何在 Linux 上将 SVG(包含几个拉丁文本和一些简单的矢量图形)转换为 PDF?

我在 Ubuntu Lucid 上尝试了 Inkscape 0.47,但它会随机移动一些子图形,并使输出 PDF 中的一些线条变短。因此它的输出毫无用处,因为图形看起来完全不同。

我尝试在 Google Chrome 16 中打开 SVG 并将其打印为 PDF,但它扭曲了所有颜色,还删除了一些元素。(SVG 在屏幕上显示正常,但在打印预览中已经很糟糕,生成的 PDF 也很糟糕)

我不想栅格化或渲染 SVG。将 SVG 转换为位图图像,然后创建嵌入图像的 PDF 的解决方案无法回答我的问题。(仅供参考,在渲染为 PNG 时,Inscape 0.47 以非常丑陋的方式渲染文本,没有抗锯齿)

还有其他选择吗?

答案1

rsvg-转换对我想要转换的 SVG 做了以下操作:

$ sudo apt-get install librsvg2-bin
$ rsvg-convert -f pdf -o t.pdf t.svg

rsvg-convert -f pdf不会栅格化 SVG,它会嵌入和子集字体(至少它嵌入了 Arial 字体使用的字符)。有时字体嵌入会失败(例如 LMRoman17 字体),整个字体文件会复制到生成的 PDF 中。

Ubuntu Lucid 的依赖项:

  • 库.so.2
  • libgobject-2.0.so.0
  • libgthread-2.0.so.0
  • libglib-2.0.so.0
  • librsvg-2.so.2
  • libpthread.so.0
  • libc.so.6

默认情况下,libcairo 需要 libX11,因此 rsvg-convert 可能很难安装到无头系统。

笔记: 的手册页rsvg-convert指出该工具始终会进行栅格化,但事实并非如此。手册已经过时了。有时您的 svg 生成工具可能会部分栅格化 svg 图像,这也会误导您。

答案2

这在 Ubuntu Lucid 上有效:

$ sudo apt-get install inkscape
$ inkscape t.svg --export-pdf=t.pdf

上述命令行 Inkscape 调用即使在无头模式下也可以工作,无需 GUI ( DISPLAY=)。但是,安装 Inscape 会安装许多依赖项,包括 X11。

请注意,即使发生错误,Inskscape 的退出状态也始终为 0 - 因此请注意其 stderr。

还有inkscape --shell,适合批量转换多个文档。这避免了每个文件的 Inkscape 启动时间过长:

$ (echo t.svg --export-pdf=t.pdf;
   echo u.svg --export-pdf=u.pdf) |
  DISPLAY= inkscape --shell

Inkscape 对于简化 SVG 也很有用:

$ DISPLAY= inkscape t.svg --export-plain-svg=t.plain.svg

答案3

我已经在 OSX 和 Ubuntu 上成功使用了 CairoSVG。

pip install cairosvg
cairosvg in.svg -o out.pdf

CairoSVG 文档

答案4

我从 Inkscape(也是 0.47)打印到 PDF 以及保存为 PDF(但略有不同)获得了良好的效果,但这可能取决于手头的图形。

分辨率较低的替代方案(我没有尝试任何开关来改进它)是

 convert file.svgz file.pdf 

convert是软件包的一部分ImageMagick。Rasterizer 是另一个程序:

 rasterizer -m application/pdf file.svgz -d file.pdf 

要了解你的系统上安装了哪些处理 svg 的程序,只需尝试

 apropos -s 1 svg

这些程序的手册页应该解释该程序是否可用于将 svg 转换为 pdf。

相关内容