python - 使用 Inkscape 将 SVG 导出到 EPS 时出现奇怪的符号

标签 python svg export inkscape eps

我正在尝试使用 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()

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

enter image description here

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

(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 的样子:

enter image description here

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

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

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

最佳答案

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

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

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

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

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

关于python - 使用 Inkscape 将 SVG 导出到 EPS 时出现奇怪的符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52554211/

相关文章:

symfony - 自定义 Sonata Admin bundle 导出的 CSV 内容

c++ - 将类型转换为 python

linux - 如何在 c 中运行 sh 文件并导出变量

python - 如何在 PyQt4 中保持按钮相对于标签大小的变化不变

html - 在 HTML5 Canvas 上绘制 SVG 文件

python - 如何使用另一个数据帧的 pandas 查询结果来过滤 pandas 数据帧

javascript - 重叠 SVG 元素的鼠标处理未按预期工作

javascript - 交互式世界地图,在鼠标悬停时突出显示国家

python - scipy sobel边缘检测,提取外部像素

python - 在Python(pyrasite)中检查线程中的局部变量?