Библиотека С/С++ для создания PostScript файлов

nawok

Необходимо сохранять графики в формате PostScript. Графики, помимо всяких примитивов, содержат подписи на русском языке.
Подскажите пожалуйста библиотеку на С/С++ для создания файлов PostScript с поддержкой кирилицы, платформа - windows.

yolki

metapost не проканает?
основная проблема с PostScript - это русские шрифты. и её по-хорошему на коленке не решить. разве что свои собственные..

nawok

Я так понял, что вся прелесть metapost заключается в том, чтобы потом использовать LaTeX для внедрения необходимых шрифтов. Не хотелось бы таскать вместе с прогой заодно и дистрибутив LaTeX. Что ж придется найти какой-нибудь шрифт и научиться самому его внедрять.

yolki

Можно пойти по более трудному пути: взять какой-нибудь Type1 кириллический шрифт и его использовать.
Я всегда EPS руками генерил, там синтаксис тривиальный:

%!PS
%%Creator:

0 0 moveto
10 10 lineto
20 0 lineto
stroke
showpage

для экономии места можно делать так:

...
/m {moveto} def
/l {lineto} def
/s {stroke} def
/n {newpath} def

n 0 0 m 10 10 l 20 0 l s
showpage

С английскими шрифтами там тривиально:

/Times-Roman findfont 18 scalefont setfont
100 100 moveto
(Preved) show
showpage

с русскими сложнее - надо их встраивать, я так глубоко в PLRM не заглядывал.
можно конечно перевести их и вручную отрисовывать - но это возни много..

nawok

Спасибо за советы. Пока решил попробовать по такой схеме. Сделал в LaTeX'е простенький файл

\documentclass{article}
\usepackage[russian]{babel}
\begin{document}
абвгдежзийклмнопрстуфхцчшщъыьэюя
\end{document}

Потом с помощью DviPS сделал файл PS. Теперь разбираюсь что получилось.

yolki

в такой конфигурации тех цепляет растровые шрифты, это не тру.
попробуй прикрутить пакет pscyr. в этом случае у тебя буду векторные шрифты.
вот тут например, инструкция: http://tex.imm.uran.ru/texserver/fonts/pscyr/pscyr4c/

yolki

В общем, essential часть вот тут:

Teict begin 1 0 bop 639 523 a Fa(\340\341\342\343)n
(\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364)n
(\365\366\367\370\371\372\373\374\375\376)n(\377)1926
5255 y(1)p eop end

Анализ библиотеки показал примерно следующее:
bop - begin of page
eop - end of page
a - moveto
Fa - преобразование fontencoding
n - show, сдвиг позиции на -2, применение n видимо из-за кернинга. можно на него забить.
p - show
итого, это можно преобразовать в:

Teict
begin
1 0 bop %begin of page
639 523 a % moveto
Fa(\340\341\342\343)n % кернинг между г и д
(\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364)n % ещё кернинг
(\365\366\367\370\371\372\373\374\375\376)n % кернинг между ю и я
(\377) % буква я
1926 5255 y % moveto - это уже позиция номера страницы "1"
(1) % собственно, номер страницы
p % отрисовка номера и буквы я видимо
eop
end

соответственно, можно стырить шрифт computer modern :cool: или любой друго кириллический из pscyr, кодировку угадать нетрудно.
под твои нужды это будет примерно так (на кернинг забиваем):

Teict
begin
1 0 bop %begin of page
639 523 a % moveto - первая надпись
Fa(здесь кодированная строка что-то типа \354\374\362...) p
329 423 a % moveto - вторая надпись
Fa(здесь кодированная строка что-то типа \354\374\362...) p
%%%% ну а здесь пошёл рисунок:
0 0 moveto
200 200 lineto
400 0 lineto
stroke
eop % end of page
end

nawok

Наконец разобрался как самому внедрить нужный шрифт, без всякого TeX'a. Оказалось это очень просто.
Я взял, как ты и посоветовал, шрифт из pscyr. С помощью утилиты PfbToPfa перевел шрифт из бинарного формата в текстовый. Вставил его в файл PS сразу после заголовка и все заработало.
Оставить комментарий
Имя или ник:
Комментарий: