如何在Linux命令行按指定物理尺寸(厘米)将SVG转PDF?
Linux命令行实现SVG转指定尺寸带边距的PDF
核心思路
你的SVG通过viewBox="-1 -1 2 2"定义了实际内容的坐标系(宽高均为2单位),我们需要忽略SVG内部的width/height参数,直接基于viewBox渲染内容,再将其精准缩放并放置到PDF的指定位置。
解决方案(使用Inkscape)
Inkscape是Linux下处理SVG的首选工具,支持精准控制导出参数,完全满足需求。
1. 安装Inkscape(若未安装)
sudo apt update && sudo apt install inkscape
2. 执行导出命令
如果需要页面刚好容纳图像+2cm边距(页面尺寸19cm×19cm):
inkscape input.svg \ --export-type=pdf \ --export-area-viewbox \ --export-width=150 \ --export-height=150 \ --export-pdf-page-size="190mmx190mm" \ --export-pdf-x=20 \ --export-pdf-y=20
如果需要使用A4页面(图像左上角距页面左、顶部各2cm):
inkscape input.svg \ --export-type=pdf \ --export-area-viewbox \ --export-width=150 \ --export-height=150 \ --export-pdf-page-size="210mmx297mm" \ --export-pdf-x=20 \ --export-pdf-y=$((297 - 20 - 150))
参数解释
--export-area-viewbox:仅渲染viewBox定义的内容,完全忽略SVG内部的width/height参数,确保不受其干扰--export-width=150/--export-height=150:设置导出图像尺寸为150mm(即15cm),与需求匹配--export-pdf-page-size:指定PDF页面尺寸,190mmx190mm对应19cm×19cm(刚好容纳15cm图像+2cm四边边距),210mmx297mm为标准A4--export-pdf-x=20:图像左上角距页面左侧20mm(2cm)--export-pdf-y:图像左上角距页面顶部的距离(PDF坐标系原点在左下角,因此A4页面需计算297-20-150=127,确保顶部边距为2cm)
关于浏览器显示问题(补充说明)
Firefox显示200×200是因为SVG的viewBox宽高为2,浏览器默认将每个viewBox单位映射为100像素(width="100"对应2个viewBox单位,因此总宽度为200像素),但这对PDF导出无影响,我们的命令已完全绕过这个问题。
内容的提问来源于stack exchange,提问作者spraff
相关产品推荐
相关产品推荐

