Illustrator SVG导出无法正常工作(未定义名称空间前缀inkscape)

时间:2012-12-06 13:16:30

标签: html graphics vector svg inkscape

我是矢量编辑世界的新手。我正在尝试从.AI文件导出.SVG文件。 但是,当我导出它时,我在生成的文件中收到以下错误:

Error on line 57 at column 354: Namespace prefix inkscape for cy on namedview is not defined 

有人可以告诉我这意味着什么以及如何解决它?

3 个答案:

答案 0 :(得分:4)

尝试使用文本编辑器打开SVG文件:您将看到一些带有inkscape命名空间的XML属性,例如

inkscape:label="Some label"

这些属性可能来自原始SVG文件(我猜你从维基百科中获取它?)。您可以安全地将它们全部删除 - 也许在文本编辑器中使用grep查找和替换,如:

find inkscape:label="[^"]*" replace with ""

答案 1 :(得分:3)

我当然希望他们最终解决这个问题。对于Adobe的信誉,这个问题的原因是Illustrator试图保留它不能使用的信息,以便与其他程序一起玩。

有几种解决方法。

  1. 使用InkScape另存为普通SVG。如果您事先了解问题并且可以在导入AI之前简单地从InkScape中保存普通副本,则此方法很有效。或者,如果你事先不知道,但不要介意重新开始并重新推翻任何"坏"自从从InkScape导入后您已更改的元素,您可以从InkScape中保存为普通元素,然后拉入并重新调整那些有问题的元素。但是,如果你想进行后处理而不是修复AI文件(参见Chip的答案),最快且破坏性最小的选项可能是使用正则表达式(正则表达式,见下文)而不是使用InkScape

  2. 导出到SVG。 Illustrator的最新版本现在允许您导出到SVG,作为执行保存复制/另存为的替代方法。即使有最初来自InkScape的元素,也会产生Chrome和InkScape都能打开的文件,而任何人都无法打开我使用“保存副本”创建的无效文件。警告:在我非常小的尺度(16像素高的图标),这"网络优化"导出明显丢失的信息/精度 - 即使精确度为5位小数 - 尽管它确实摆脱了严重错误。

  3. [更新:保存副本 /另存为SVG现在可行。我刚刚升级了两个程序,看起来InkScape现在能够打开由Illustrator创建的无效文件,尽管Chrome和Illustrator仍然不能。我希望这意味着从Illustrator执行另存为,然后从InkScape执行另存为平原是现在最快方式获得一个同样精确的干净SVG(尽管InkScape确实警告平原会丢失某些数据)。 ]

  4. 修复SVG代码。 Philippe的解决方案似乎是最好的方法,可以在不丢失(多少?)精度/信息的情况下真正修复最新文件中的内容。在Notepad ++中,我可以使用任何内容替换此正则表达式:inkscape:[^"]+"[^"]+"或更安全地inkscape:(export-|connector-curvature)[^"]+"[^"]+"。一旦您将副本保存为SVG并手动识别并修复了问题,Illustrator就可以打开SVG文件,这样您就可以将有问题的元素复制/粘贴回AI文件并将问题放回原处。呼。

  5. 注意:手动识别"坏"没有查看任何SVG代码的元素是将内容分解为画板,保存为SVG,并查看哪些无法打开。一旦你知道这一点,你可以使用上面的一个解决方法来替换那些部分(因为你仍然会失去那些部分的精确度)。

答案 2 :(得分:2)

Inkscape允许您将文件保存为普通文件。这将摆脱Inkscape引用。批处理工作还有一个命令行(bash)方法。

for i in *.svg; do inkscape -z -f $i -l $i; done

这可以通过" Saved As"从Illustrator创建的SVG文件(Illustrator此时不导出SVG)。我还没有弄清楚如何将Illustrator文件中的引用放在那里。现在,我很难对所有Illustrator创建的SVG文件进行后期处理。