pts*_*pts 151 png svg conversion
如何在 Linux 上将 SVG(包含一些拉丁文本和一些简单的矢量图形)转换为 PDF?
我在 Ubuntu Lucid 上尝试了 Inkscape 0.47,但它随机移动了一些子图形,并且它使输出 PDF 中的一些行更短。所以它的输出是无用的,因为图形看起来完全不同。
我尝试在 Google Chrome 16 中打开 SVG 并将其打印为 PDF,但它扭曲了所有颜色,并且还删除了一些元素。(SVG 在屏幕上看起来不错,但在打印预览中已经很糟糕,生成的 PDF 也很糟糕。)
我不想光栅化或渲染 SVG。将 SVG 转换为位图图像然后创建嵌入图像的 PDF 的解决方案不是我的问题的答案。(仅供参考 Inscape 0.47 在渲染到 PNG 时渲染文本是一种非常丑陋的方式,没有抗锯齿。)
我还有什么其他选择?
pts*_*pts 161
rsvg-convert为我想要转换的 SVG 做了诀窍:
$ sudo apt-get install librsvg2-bin
$ rsvg-convert -f pdf -o t.pdf t.svg
Run Code Online (Sandbox Code Playgroud)
rsvg-convert -f pdf
不光栅化 SVG,它嵌入和子集字体(至少它嵌入了 Arial 字体的使用字符)。有时字体嵌入失败(例如对于 LMRoman17 字体),并且整个字体文件被复制到生成的 PDF。
对 Ubuntu Lucid 的依赖:
默认情况下,libcairo 需要 libX11,因此 rsvg-convert 可能很难安装到无头系统。
注意:
手册页rsvg-convert
指出该工具总是光栅化,但事实并非如此。手册已经过时了。有时您的 svg 生成工具可能会部分光栅化 svg 图像,这也会误导您。
pts*_*pts 103
这适用于 Ubuntu Lucid:
$ sudo apt-get install inkscape
$ inkscape t.svg --export-pdf=t.pdf
Run Code Online (Sandbox Code Playgroud)
上面的命令行 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
Run Code Online (Sandbox Code Playgroud)
Inkscape 对于简化 SVG 也很有用:
$ DISPLAY= inkscape t.svg --export-plain-svg=t.plain.svg
Run Code Online (Sandbox Code Playgroud)
小智 15
我已经在 OSX 和 Ubuntu 上成功使用了 CairoSVG。
pip install cairosvg
cairosvg in.svg -o out.pdf
Run Code Online (Sandbox Code Playgroud)
小智 13
我想知道为什么之前没有提到过,但我测试了一堆不同的 svg->pdf 转换器,发现最好的一个是Headless Chrome。它为我提供了最精确的结果。在切换到 Chrome 之前,我试图与 Inkscape 的错误作斗争,但其中许多错误太严重,我对此无能为力(透明度错误、错误字体等)。
chrome \
--headless \
--disable-gpu \
--print-to-pdf-no-header \
--print-to-pdf=output.pdf \
input.svg
Run Code Online (Sandbox Code Playgroud)
它需要一些调整才能使用自定义 PDF 尺寸(默认为 A4),但在谷歌搜索并使用 CSS 和 SVG 属性后我能够设置自定义尺寸(在 stackoverflow 上查看此答案)
从 Inkscape(也是 0.47)打印到 PDF,以及保存为 PDF(但略有不同),我得到了很好的结果,但这可能取决于手头的图形。
分辨率较低的替代方案(我没有尝试任何开关来改进它)是
convert file.svgz file.pdf
Run Code Online (Sandbox Code Playgroud)
convert
是ImageMagick
包的一部分。Rasterizer 是另一个程序:
rasterizer -m application/pdf file.svgz -d file.pdf
Run Code Online (Sandbox Code Playgroud)
要了解您的系统上安装了哪些处理 svgs 的程序,请尝试
apropos -s 1 svg
Run Code Online (Sandbox Code Playgroud)
这些程序的联机帮助页应该解释一下,该程序是否有助于将 svg 转换为 pdf。
https://superuser.com/a/79064/19956提到了gsvg,它是 GhostPDL 的一部分。
我已经在 Ubuntu Lucid 上尝试过 gsvg ghostpdl-9.06,但是对于 Inkscape 生成的两个 SVG 失败了。一个 SVG 中有文本,另一个只有矢量图形。对于没有 Inkscape 扩展或剪辑路径的简单图形,它也失败了。所以我不认为 gsvg 是一个可用的 SVG-to-PDF 转换器。
在Mac OS上(考虑到你已经安装了brew)我这样做:
$ brew install cairo libffi python3
$ pip3 install cairosvg
$ cairosvg -o blah.pdf ./blah.svg
Run Code Online (Sandbox Code Playgroud)
同样的情况应该可以在 Linux 上工作,但是需要使用 apt-get 来代替。
@pts 的答案不适用于最新版本的 Inkscape(1.0 或更高版本)。要将 SVG 文件转换为 PDF:
inkscape --export-type=pdf my_file.svg
Run Code Online (Sandbox Code Playgroud)
这会将其导出到my_file.pdf
.
如果您想为 PDF 文档指定不同的名称,请使用:
inkscape my_file.svg -o new_name.pdf
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
112275 次 |
最近记录: |