【问题标题】:Inkscape doesn't allow to edit svg text lines once it has been saved as plain svg or treated with scour一旦保存为纯 svg 或经过冲刷处理,Inkscape 不允许编辑 svg 文本行
【发布时间】:2015-11-04 11:45:40
【问题描述】:

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

  • 创建带有文本的svg(只需使用文本工具点击添加文本,不要拖动打开框架)
  • 输入回车创建多行文本,添加多行文本
  • 另存为纯 svg 或优化 svg
  • 或在命令行中使用冲刷处理

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

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

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

并在下面查看我的答案以更正 svg 代码,以便让您的 Inkscape 文件恢复正常工作!!!

【问题讨论】:

    标签: svg sed inkscape


    【解决方案1】:

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

    当您保存为优化的 SVG 时,Inkscape 会去除其所有自定义 XML 属性并写入一个普通的 SVG 文件。因此,什么是文本块的感觉消失了。

    【讨论】:

    • 是的,但希望冲刷不会删除<text>,包括<tspans>。当您通过首先使用文本工具创建框架来创建正确的(流动的)文本块时,它无法在浏览器甚至 nautilus 文件资源管理器中正确显示......我真的不明白为什么会有这种限制。 SVG 可能是一种非常棒的发布格式,它支持多行文本流。
    • SVG 文件旨在用作图形描述格式。与 PDF 不同。它实际上没有任何自动布局功能。话虽如此,简单的多行文本可能会成为 SVG2 的一部分。
    【解决方案2】:

    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 时出现严重错误)

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

    然后:

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

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

    【讨论】:

    • 作为旁注,在 scour 中有一个选项可以保留编辑器数据,但我不确定它是否仍然优化了 svg。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-08
    • 2020-05-31
    • 2011-08-23
    • 2018-09-02
    • 1970-01-01
    • 1970-01-01
    • 2021-10-09
    相关资源
    最近更新 更多