一旦将svg文本行保存为普通svg或使用scour处理,它就不允许编辑svg文本行

时间:2015-11-04 11:45:40

标签: svg sed inkscape

我试图找到以下问题的解决方案几天了:

  • 使用文本创建svg(只需单击文本工具即可添加文本,不要拖动以打开框架)
  • 输入enter以创建多行文字,添加多行文字
  • 另存为普通svg或优化svg
  • 或者在命令行中使用scour处理

使用Inkscape重新打开:您无法编辑文本,它会正确显示,但当您转到下一行(使用鼠标或键盘向下箭头)时,光标会停留在第一行。

这是一个令人讨厌的错误,在Inkscape中运行了一段时间,对网络版没有帮助。

但是有解决方案...请参阅以下线程以手动(在vim中)替换所有tspans: Vim search replace regex + incremental function

请参阅下面的答案以更正svg代码,以便让Inkscape文件恢复正常工作状态!!!

2 个答案:

答案 0 :(得分:0)

Sed非常有用,可以批量修正您的文件:

cd /home/user/my/svg/files
sed -i.bak 's|<svg|<svg\nxmlns:xlink="http://www.w3.org/1999/xlink"\nxmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"|g' *.svg

这将在当前文件夹中的所有svg文件上运行,并且:

  1. 创建一个.bak文件,您可以将其重命名为svg以获取原始文件(但我强烈主张复制您的工作文件夹,以避免在摆弄sed时出现可怕的错误)< / p>

  2. 使用换行符添加正确的命名空间(\n

  3. 然后:

    sed -i.2.bak 's|<tspan|<tspan sodipodi:role="line" |g' *.svg
    

    这会将sodipodi:role="line"附加到当前文件夹中的所有tspan标记,并创建file.2.bak个备份。

答案 1 :(得分:0)

SVG文件目前不支持多行文字。 Inkscape使用自定义XML属性来跟踪哪个文本跨度是该文本块的一部分。

当您保存为优化的SVG时,Inkscape将删除其所有自定义XML属性并写入一个vanilla SVG文件。因此,对一个文本块的意义消失了。