Измерьте ширину шрифта postscript в C ++ - PullRequest
0 голосов
/ 04 ноября 2018

Это не может быть так сложно, но я просто не справляюсь. Ни 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 слишком узкий, так что расстояние между словами отключено, вплоть до Дело в том, что длинные слова перекрываются с последующим словом.

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

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

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

1 Ответ

0 голосов
/ 04 ноября 2018

Используемые шрифты должны иметь файл .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, поскольку это единственный способ получить надежный вывод.

...