Измерение ширины шрифта postscript в переполнении стека

Это не может быть так сложно, но я просто не справляюсь. Ни google, ни stackoverflow, ни документация по ubuntu или ghostscript не помогли.

Я генерирую PostScript из C ++. Я помещаю текст слово за словом для обработки переноса строк. Чтобы решить, где разместить следующее слово и подходит ли оно для текущей строки, я полагаюсь на freetype, чтобы измерить «продвижение» каждого глифа.

Текст представляет собой смесь обычного текста и исходного кода, поэтому у меня есть два шрифта. Я выбрал Helvetica для обычного текста и Courier для исходного кода, так как оба легко доступны в postscript и не требуют встраивания. Проблемная часть моего постскриптального вывода не намного сложнее, чем

(Helvetica) findfont 11 scalefont setfont
40 100 moveto (hello world) show
123 100 moveto (hello again) show   % I care for the first number

Конечно, есть правильный заголовок eps и т. Д.

Мне не удалось найти файлы шрифтов в моей системе Ubuntu 16.04, поэтому я загрузил лучшие догадки с бесплатных веб-сайтов шрифтов. Оказывается, они явно отличаются от тех, которые использует мой постскриптумный интерпретатор. По крайней мере, после преобразования в PDF с epstopdf (который поставляется с LaTeX, насколько мне известно), я вижу, что мой шрифт Helvetica слишком широкий, а мой шрифт Courier слишком узкий, так что расстояние между словами отключено, вплоть до того, что длинные слова перекрываются с последующим словом.

Мой вопрос: Как я могу получить измерения ширины шрифта, совпадающие с таковыми из интерпретатора PostScript?

  • Я даже не уверен, правильно ли задан вопрос, но почему-то я предполагаю, что существует один-единственный эталонный шрифт Helvetica, так что вывод postscript выглядит одинаково на всех системах и принтерах.
  • Возможно, наиболее подходящим решением будет загрузка правильных шрифтов с помощью freetype, но я не знаю, как найти файлы.
  • Источник для загрузки точно совпадающих шрифтов также решил бы проблему, хотя иметь их дважды было бы странно.
  • Более того, было бы предпочтительнее запрашивать интерпретатор postscript, такой как ghostscript, за основную правду, но документации библиотеки ghostscript недостаточно, и я не нашел никаких примеров.
  • Я мог бы создать файл postscript, который печатает ширину текста, полученного с textwidth, преобразовать в PDF и извлечь текст. Это было бы уродливо и медленно, и я бы хотел найти правильное решение C ++.

Прогресс в любом из этих или, возможно, в других направлениях был бы просто великолепен!

-1

Решение

Используемые шрифты должны иметь файл .afm (Adobe Font Metrics), из которого вы можете читать метрики шрифтов из если это шрифт PostScript. Также верно, что «базовые 13» шрифты должны быть одинаковыми с точки зрения метрик во всех реализациях PostScript. Конечно, если вы используете TrueType шрифт, чтобы получить метрики, тогда они могут отличаться от шрифта PostScript.

Вы не сказали, какой интерпретатор PostScript вы используете, возможно, он не использует стандартный шрифт, но я предполагаю, что вы используете шрифт TrueType из Ubuntu, который не совсем соответствует PostScript, который вы используете в своем «переводчик». Если память используется, вы можете посмотреть в /etc/fonts/fonts.conf, где хранятся ваши шрифты.

FWIW Ghostscript поставляется с реализациями базовых 13 шрифтов, которые соответствуют шрифтам Adobe, интерпретаторы PostScript должны соответствовать им. Однако мы не отправляем файлы AFM, но вы можете загрузить шрифты в Fontographer, или использовать FreeType, или просто получить расширенную ширину, используя ширину строки (не текстовую) в программе PostScript.

Я бы не сказал, что документация Ghostscript «редкая». Трудно найти то, что вы хотите, может быть, но там много документации. Просто используйте .htm, базовую информацию, это HTML-файл размером 265 КБ.

Последняя альтернатива, конечно, состоит в том, чтобы загрузить шрифты, которые вы фактически используете в программе PostScript, тогда вы знаете, что они в первую очередь соответствуют метрикам, которые вы использовали для создания PostScript. Как и в случае с PDF, это настоятельно рекомендуется, особенно для шрифтов за пределами базы 13, поскольку это единственный способ получить надежный вывод.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]