我有PlantUML制作的SVG图像,该图像的某些部分在画布之外。这使使用此类图像变得困难,我需要将绘图裁剪为画布大小。无论如何我用脚本生成UML图时,在该处执行裁剪也将非常有效。
到目前为止,我已经尝试了两件事:a)调整画布大小以使用Inkscape进行绘制
inkscape --verb=FitCanvasToDrawing --verb=FileSave --verb=FileClose *.svg
这可以正常工作,但我需要将绘图裁剪为画布大小,并且此操作似乎不可用。
b)使用rsvg-convert调整大小
rsvg-convert image.svg -w 1870 -h 1195 -f svg -o image.svg
这确实可以裁剪到所需的大小,但是图像大小增加了约10倍,因为现在在SVG中嵌入了一些二进制图像。这对我来说是不可接受的。
画布大小很好。我必须裁剪所有文本,线条和矩形,这些文本,线条和矩形的一部分在画布之外。那需要比较它们的边界框和画布框。对于shell脚本来说,这是很多方法。
—
divanov 2014年
哦,我记得我为inkscape感到生气,为什么它不这样做。甚至有一个错误报告。当时他们什么也没做。此外,没有标准工具可从pdf文件中删除不可见的越界内容(Acrobat Pro当然是最差的工具之一)。但是,如果您只想剪辑部分可见的内容,则可以将全部内容分组,然后将边框大小的剪辑放在所有内容上。但是它们仍然在文件中,并且仍然占用空间。
—
Orion
感谢您的建议。用sed更改xml有点危险,但仍然比手动编辑更好。
—
divanov 2014年
svg
format是基于xml的ascii格式,因此最简单的方法应该是使用sed
或您喜欢的文本处理工具来插入或修改设置边界框的行。这甚至都不会触及文件的其他内容。尝试在一个示例svg文件上(在文本编辑器中)手动执行一次,然后将您的操作转换为脚本。