【发布时间】:2013-07-29 20:58:12
【问题描述】:
有没有办法使用“rsvg-convert”将多页 SVG 或多 SVG 文件转换为单个多页 PDF?
我正在使用命令:
/usr/bin/rsvg-convert -f pdf -o out.pdf in.svg
【问题讨论】:
标签: linux pdf svg pdf-generation
有没有办法使用“rsvg-convert”将多页 SVG 或多 SVG 文件转换为单个多页 PDF?
我正在使用命令:
/usr/bin/rsvg-convert -f pdf -o out.pdf in.svg
【问题讨论】:
标签: linux pdf svg pdf-generation
您可以在转换为 pdf 时提供 .svg 文件的列表。
rsvg-convert -f pdf -o out.pdf file1.svg file2.svg file3.svg
或者,您可以将文件夹中的所有 .svg 文件转换为 1 个 pdf,如下所示:
rsvg-convert -f pdf -o out.pdf *.svg
【讨论】:
rsvg-convert 完成多 SVG 到单 PDF 任务 see @holger-will's answer。但是,它会将所有 PDF 页面的大小调整为与第一个 SVG 文件相同的大小(无论第二个、第三个等是否更大)。这不适合组合具有不同高度和宽度的各种 SVG。
另一种选择 -- svgstopdf -- 在基于 Debian 的系统上可用 https://github.com/pimpreneil/svgstopdf 并移植到 Windows https://github.com/flueterflam/svgstopdf
语法也类似:
svgstopdf file1.svg file2.svg (...) out.pdf
或
svgstopdf *.svg out.pdf
使用svgstopdf 的好处是每个PDF 页面的大小恰好是对应的SVG 图像的大小。您无需将所有 SVG 调整为统一的宽度或高度!如果第一个较小,后续的 SVG 也不会被剪裁。
虽然 OP 要求 rsvg-convert,但请注意,此方法完成相同的任务。发现此问题的未来用户可能有兴趣了解不受 rsvg-convert 固有限制的替代方案(截至 2018 年 8 月)。这在rsvg-convert.c 的librsvg see https://github.com/brion/librsvg/blob/master/rsvg-convert.c 的第244-245 行非常清楚:
/* in the case of multi-page output, all subsequent SVGs are scaled to the first's size */
rsvg_handle_set_size_callback (rsvg, rsvg_cairo_size_callback, &dimensions, NULL);
虽然它在评论中说“缩放”,但我使用rsvg-convert 的测试表明后续 PDF 页面的大小与第一个相同。此外,后续的 SVG没有调整大小以适应 PDF 页面,而是被剪裁了。所以“缩放”过程是指 PDF 页面而不是 SVG 图像。
这方面的一个例子是采用两个 SVG 文件: 128px x 128 px - https://en.wikipedia.org/wiki/File:Blue_sphere.svg 288px x 288px - https://www.shareicon.net/download/2015/10/03/111553_wifi.svg
使用rsvg-convert -f pdf -o out.pdf Blue_sphere.svg 111553_wifi.svg,生成的 PDF 如下所示:
显然,这不是预期的结果。相反,使用 svgstopdf.exe Blue_sphere.svg wifi.svg out2.pdf 会导致:
【讨论】: