【问题标题】:Weird symbols when exporting SVG to EPS using Inkscape使用 Inkscape 将 SVG 导出为 EPS 时出现奇怪的符号
【发布时间】:2019-03-04 09:14:44
【问题描述】:

我正在尝试使用 Inkscape 命令行将 SVG 图像转换为 EPS 文件。这是我运行(从 Python 脚本)进行转换的命令:

bashCommand = "inkscape " + file + " -D --without-gui --export-eps=exports/" + type + ".eps"
process = subprocess.Popen(bashCommand.split(), stdout=subprocess.PIPE)
output, error = process.communicate()

文件已生成,当它打开时,大部分文件似乎都符合预期。问题是某些文本不会显示(见下面的屏幕截图)。取而代之的是奇怪的矩形符号。大多数缺失的文本没有特殊字符。我真的不知道是什么导致了这个问题。

这是我在打印错误变量时看到的错误:

(process:1855): Gtk-WARNING **: Locale not supported by C library.
Using the fallback 'C' locale.
Fontconfig warning: ignoring UTF-8: not a valid region tag 

/etc/default/locale 我尝试添加以下内容(我在寻找解决方案时遇到了这个可能的修复):

LANG="en_US.UTF-8"
LANGUAGE="en_US.UTF-8"
LC_ALL="en_US.UTF-8"

然后我使用sudo dpkg-reconfigure locales重新配置语言环境

这是我使用locale 命令时得到的输出:

LANG=en_US.UTF-8
LANGUAGE=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8

我使用 Open Sans 作为字体并在服务器上安装了该字体。将字体添加到/usr/local/share/fonts 后,我使用fc-cache -f -v 命令重建字体缓存。

使用以下代码将 SVG 转换为 PDF 时,一切正常。所有文本都是可见的,并且使用了 Open Sans 字体。

bashCommand = "inkscape " + file + " -D -d 300 --without-gui --export-pdf=exports/" + type + ".pdf"
process = subprocess.Popen(bashCommand.split(), stdout=subprocess.PIPE)
output, error = process.communicate()

这是 PDF 的样子:

我已经在互联网上搜索了一段时间以找到解决方案,但到目前为止我找不到。

我正在使用 Ubuntu 16.04 服务器。我安装了 Inkscape 0.91。

有谁知道如何正确输入文本?为什么将文本转换为这些符号(第一个屏幕截图)?希望有人能帮忙!

【问题讨论】:

  • 我已经看到与这些参数一起使用的命令(--export-ignore-filters --export-ps-level=3)。让我知道这对你有什么作用。
  • 感谢您的回复,我添加了参数,但我得到了与没有它们时相同的输出@HassanVoyeau
  • 看看这是否有帮助 thomas-krenn.com/en/wiki/Configure_Locales_in_Ubuntu - 注意它说在哪里重新启动。
  • 您是否可能使用较旧的 Inkscape 版本(当前为 0.92)? v0.47 使用 cairo 实现 (E)PS 导出,release notes 明确提到“更好地支持...非 ASCII 字符”。我似乎记得对于某些版本,GUI 导出对话框中可以在 cairo 和旧导出方法之间进行选择,但现在它已经消失了,而且我不知道 CLI 是否支持它。

标签: python svg export inkscape eps


【解决方案1】:

我只能告诉你发生了什么。 “奇怪的矩形字符”是 TrueType .notdef 字形。当您使用字体时,它并不包含人类已知的每种书面语言中的所有可能字形。此外,在 PostScript 中,常规字体(相对于 CIDFonts)一次只能访问 255 个不同的字形。

因此,为了满足您尝试使用字体没有副本的字形的情况,字体应该包含一个 .notdef 字形,并且当您尝试使用一个字形时会使用 thsat不见了。一般来说,PostScript 字体定义了一个不做标记的 .notdef,而 TrueType 字体定义了一个空心矩形。还有其他可能性,但这些是最常见的。

那么你为什么要得到 .notdef 呢?好吧,这似乎也可能是(在某种意义上)由来自 gtk 的关于不支持语言环境的错误消息引起的,并且忽略了 UTF-8。

gtk 需要将文本的字符代码重新映射为可以与嵌入字体一起使用的“东西”,并且它似乎不知道如何处理 UTF-8 编码的文本,所以它退回到假装我认为它的“C”基本上是美国 ASCII。

不幸的是,我不能告诉你如何解决这个问题,我对前端的了解不够,但这在我看来不像是一个真正的“EPS”问题,问题在于生成 EPS 的应用程序,特别是可能使用 gtk。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多