Странные символы при экспорте SVG в EPS с использованием Inkscape - PullRequest
0 голосов
/ 28 сентября 2018

Я пытаюсь преобразовать изображение SVG в файл EPS с помощью командной строки Inkscape.Это команда, которую я запускаю (из скрипта 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.

Кто-нибудь знает, как правильно получить текст?И почему текст преобразуется в эти символы (первый скриншот)?Надеюсь, что кто-то может помочь!

1 Ответ

0 голосов
/ 28 сентября 2018

Я могу рассказать вам только часть того, что происходит.«Странные прямоугольные символы» - это символы TrueType .notdef.Когда вы используете шрифт, он не содержит все возможные символы в каждом письменном языке, известном человеку.Кроме того, в PostScript обычные фотны (в отличие от CIDFonts) могут одновременно получать доступ только к 255 различным глифам.копия шрифтов, как предполагается, содержит глиф .notdef, и это то, что используется всякий раз, когда вы пытаетесь использовать глиф, который отсутствует.В общем, шрифты PostScript определяют .notdef, который не делает отметок, а шрифты TrueType определяют тот, который создает полый прямоугольник.Есть и другие возможности, но они самые распространенные.

Так почему вы получаете .notdef?Ну, это, скорее всего, тоже вызвано (в некотором смысле) сообщением об ошибке от gtk о том, что локаль не поддерживается, и игнорированием UTF-8.

gtk необходимо преобразовать коды символов текста в 'что-то«который будет работать со встроенными шрифтами, и, похоже, он не знает, как обращаться с текстом в кодировке UTF-8, поэтому он вынужден притворяться, что его« C »- это, по сути, американский ASCII.

К сожалению, я не могу сказать вам, как это исправить, я не знаю достаточно о внешнем интерфейсе, но мне это не кажется реальной проблемой "EPS", проблема заключается в приложении.генерирование EPS, и, возможно, с помощью gtk, в частности.

...