muff
|
old hand
|
|
|
|
Рег.: 07.06.2004
|
Сообщений: 721
|
|
Рейтинг: 144
|
|
Библиотека С/С++ для создания PostScript файлов
20.06.2008 19:31
|
|
|
Необходимо сохранять графики в формате PostScript. Графики, помимо всяких примитивов, содержат подписи на русском языке. Подскажите пожалуйста библиотеку на С/С++ для создания файлов PostScript с поддержкой кирилицы, платформа - windows.
|
|
Basilio
|
GreenOne
|
|
|
|
Рег.: 14.10.2002
|
Сообщений: 13749
|
Из: Москва
|
Рейтинг: 3476
|
|
Re: Библиотека С/С++ для создания PostScript файлов
[re: muff]
20.06.2008 22:16
|
|
|
metapost не проканает?
основная проблема с PostScript - это русские шрифты. и ее по-хорошему на коленке не решить. разве что свои собственные..
|
|
muff
|
old hand
|
|
|
|
Рег.: 07.06.2004
|
Сообщений: 721
|
|
Рейтинг: 144
|
|
Re: Библиотека С/С++ для создания PostScript файлов
[re: Basilio]
21.06.2008 10:31
|
|
|
Я так понял, что вся прелесть metapost заключается в том, чтобы потом использовать LaTeX для внедрения необходимых шрифтов. Не хотелось бы таскать вместе с прогой заодно и дистрибутив LaTeX. Что ж придется найти какой-нибудь шрифт и научиться самому его внедрять.
|
|
Basilio
|
GreenOne
|
|
|
|
Рег.: 14.10.2002
|
Сообщений: 13749
|
Из: Москва
|
Рейтинг: 3476
|
|
Re: Библиотека С/С++ для создания PostScript файлов
[re: muff]
21.06.2008 12:05
|
|
|
Можно пойти по более трудному пути: взять какой-нибудь Type1 кириллический шрифт и его использовать.
Я всегда EPS руками генерил, там синтаксис тривиальный:
code:
%!PS
%%Creator: Basilio
0 0 moveto
10 10 lineto
20 0 lineto
stroke
showpage
для экономии места можно делать так:
code:
...
/m {moveto} def
/l {lineto} def
/s {stroke} def
/n {newpath} def
n 0 0 m 10 10 l 20 0 l s
showpage
С английскими шрифтами там тривиально:
code:
/Times-Roman findfont 18 scalefont setfont
100 100 moveto
(Preved) show
showpage
с русскими сложнее - надо их встраивать, я так глубоко в PLRM не заглядывал. можно конечно перевести их и вручную отрисовывать - но это возни много..
|
|
muff
|
old hand
|
|
|
|
Рег.: 07.06.2004
|
Сообщений: 721
|
|
Рейтинг: 144
|
|
Re: Библиотека С/С++ для создания PostScript файлов
[re: Basilio]
22.06.2008 14:07
|
|
|
Спасибо за советы. Пока решил попробовать по такой схеме. Сделал в LaTeX'е простенький файл
code:
\documentclass{article}
\usepackage[russian]{babel}
\begin{document}
абвгдежзийклмнопрстуфхцчшщъыьэюя
\end{document}
Потом с помощью DviPS сделал файл PS. Теперь разбираюсь что получилось.
|
|
Basilio
|
GreenOne
|
|
|
|
Рег.: 14.10.2002
|
Сообщений: 13749
|
Из: Москва
|
Рейтинг: 3476
|
|
Re: Библиотека С/С++ для создания PostScript файлов
[re: muff]
22.06.2008 14:11
|
|
|
|
Basilio
|
GreenOne
|
|
|
|
Рег.: 14.10.2002
|
Сообщений: 13749
|
Из: Москва
|
Рейтинг: 3476
|
|
Re: Библиотека С/С++ для создания PostScript файлов
[re: muff]
22.06.2008 18:48
|
|
|
В общем, essential часть вот тут:
code:
TeXDict 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 итого, это можно преобразовать в:
code:
TeXDict
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 или любой друго кириллический из pscyr, кодировку угадать нетрудно.
под твои нужды это будет примерно так (на кернинг забиваем):
code:
TeXDict
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
|
|
muff
|
old hand
|
|
|
|
Рег.: 07.06.2004
|
Сообщений: 721
|
|
Рейтинг: 144
|
|
Re: Библиотека С/С++ для создания PostScript файлов
[re: Basilio]
01.07.2008 16:51
|
|
|
Наконец разобрался как самому внедрить нужный шрифт, без всякого TeX'a. Оказалось это очень просто. Я взял, как ты и посоветовал, шрифт из pscyr. С помощью утилиты PfbToPfa перевел шрифт из бинарного формата в текстовый. Вставил его в файл PS сразу после заголовка и все заработало.
|
|