Я думаю, что эта проблема связана с тем, что gs не нашел китайский шрифт, который я использовал.
Это может показаться очень странным.Если Ghostscript не может найти шрифт, он будет использовать замену для замены отсутствующего шрифта.В зависимости от ряда факторов, он выберет «подходящий» шрифт.Я не буду утверждать, что это невозможно победить, и вместо этого я получу ошибку, но мне кажется, что это маловероятно.
этот путь шрифта - / usr / share / fonts / truetype / yozo / yzdwkj6.ttf, я пытаюсь добавить этот шрифт в /usr/share/ghostscript/9.22/Resource/Init/cidfmap,
ОК, так что это не шрифт , это CIDFont , есть существенные различия.
, но в файле PDF есть нижняя строка: / BaseFont / Yozo Kai.Как я могу сделать для этого описания информации является> двухсловный шрифт?
Я предполагаю, что вы имеете в виду для 2-байтовой кодировки.Ответ заключается в том, что вам нужно всего лишь использовать CIDFont с именем «Yozo Kai».Однако .... Использование пробела в имени шрифта - очень плохая идея, потому что пробелы являются разделителями в PostScript и PDF, поэтому размещенная выше строка технически недопустима.
Вместо создания словарясодержащий ключ /BaseFont
и значение /Yozo Kai
, PDF-файл фактически создает словарь с ключом /BaseFont
и значением /Yozo
, с оставшейся запасной строкой Kai
.Это означает, что словарь не имеет четного количества записей, и поэтому является недопустимым.Точно, что происходит при этих обстоятельствах, не определено.
Обратите внимание, я беру то, что вы говорите дословно, так как у меня нет # файла PDF для просмотра, но это сообщение об ошибке:
**** Ошибка: файл не сбалансирован >> (закрыть словарь).Вывод может быть неправильным.
говорит о том, что я прав, число записей даже не так, Ghostscript съел закрывающую >>
, а затем жалуется, потому что не может найти закрывающую словарную метку.
Если я использую приведенный ниже скрипт для описания этого шрифта, драйвер печати выведет журнал сбоя фильтра.
/ Yozo Kai << / FileType / TrueType / Path pssystemparams / GenericResourceDir get (/usr / share / fonts / truetype / yozo / yzdwkj6.ttf) concatstrings / CSI [(GB1) 5] >>;
По той же причине вы не можете создать имя, содержащее пробел, напримерэто потому, что пробелы являются разделителями.В PostScript (именно так определяется cidfmap) вы можете сделать это:
(Yozo Kai) cvn <</FileType...... ...../CSI [(GB1) 5] >> ;
Обратите внимание, что я все еще сомневаюсь в том, какой у вас путь, потому что он объединяет каталог общих ресурсов Ghostscript с«usr / share / ...», что кажется мне неправильным.Я подозреваю, что вы просто хотите /Path (/usr/share/fonts/truetype/yozo/yzdwkj6.ttf)
.
Но реальная проблема заключается (или кажется) в том, что ваш PDF-файл поврежден.Правильный способ вставить шрифт с пробелом в имени:
/BaseFont /Yozo#20Kai
То есть вы заменяете неиспользуемый символ (в данном случае пробел) на escape-символ '#' и затем следуете за нимс байтом, описывающим символ ASCII, который вы хотите использовать, а затем продолжить.Для шрифтов с именами многобайтовой кодировки вы должны использовать управляющие коды для всех «непечатных» кодов символов.
Поскольку ваш файл PDF не соответствует правилам, по которым он в основном нарушен, вам следует обратиться к создателям программного обеспечения.который использовался для создания файла PDF и информирования их об ошибке.Единственный способ исправить это - переделать файл PDF.