5

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

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

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

4

3 回答 3

6

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

inkscape:label="Some label"

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

find inkscape:label="[^"]*" replace with ""
于 2013-08-23T07:57:30.840 回答
4

我当然希望他们最终能解决这个问题。值得 Adob​​e 称赞的是,这个问题的原因是 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 的解决方案似乎是真正修复最新文件中当前损坏的内容而不会丢失(很多?)精度/信息的最佳方法。在记事本++中,我可以用任何东西替换这个正则表达式:inkscape:[^"]+"[^"]+"或者,更安全的是,inkscape:(export-|connector-curvature)[^"]+"[^"]+". 将副本保存为 SVG 并手动识别并修复问题后,Illustrator 能够打开 SVG 文件,因此您可以将有问题的元素复制/粘贴回 AI 文件中,然后解决问题。唷。

注意:在不查看任何 SVG 代码的情况下手动识别“坏”元素的方法是将内容分解为画板,另存为 SVG,然后查看哪些无法打开。一旦你知道了这一点,你就可以使用上面的一种解决方法来替换那些部分(因为你仍然会失去这些部分的精度)。

于 2016-02-29T19:42:08.657 回答
2

Inkscape 允许您将文件保存为纯文本。这将摆脱 Inkscape 引用。还有一种用于批处理的命令行 (bash) 方法。

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

这可以对从 Illustrator 创建的“另存为”SVG 文件执行(此时 Illustrator 不导出 SVG)。我还没有弄清楚如何从 Illustrator 文件中获取参考资料。现在,我坚持对所有 Illustrator 创建的 SVG 文件进行后期处理。

于 2014-06-07T14:30:30.043 回答