Печать по русски из-под Linux.

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Сообщение debi12345 » 16.01.2008 20:38:10

В этом файле нужно посмотреть, какой шрифт выбирается перед посылкой кодов русских символов. Затем найти название этого шрифта в "Fontmap.GS", и выписать - какой файл ему соответствует. Затем открыть этот щрифтовый файл в редакторе шрифтов (том же FontForge) и убедиться, есть ли в нем русские символы. Если есть (но не печатаются) - будем разбираться дальше.
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5752
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Сообщение Lisolog » 17.01.2008 11:28:13

я просто хотел спросить, как применяя Tprinter вывести в .ps файл?
там же принтдиалогов не подразумевается. В дельфах есть assignprn(), а в лазаре чот не вижу такого. Или их както можно связать?
Lisolog
новенький
 
Сообщения: 39
Зарегистрирован: 13.12.2007 14:24:08
Откуда: Russia, SPb

Сообщение alexs » 17.01.2008 14:44:09

Смотри модуль postscriptcanvas
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Сообщение Lisolog » 17.01.2008 17:57:04

alexs писал(а):Смотри модуль postscriptcanvas

вот сижу - туплю, не знаю с какой стороны к процедуре сохранения подступиться.. екзамплчик можно?
даже пытался руками его туда в enddoc вписать - не работает печать потом..
Lisolog
новенький
 
Сообщения: 39
Зарегистрирован: 13.12.2007 14:24:08
Откуда: Russia, SPb

Сообщение alexs » 18.01.2008 00:41:34

Объект TPostScriptCanvas из модуля PostScriptCanvas сам не умеет печатать на принтер - он только сохраняет в PostScript файл то что ты нарисуеш. Смотри свойство OutPutFileName и метод EndDoc.
А вот чтобы напечать это уже другие модули.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Сообщение Lisolog » 18.01.2008 19:34:30

Вот получившийся ps (рисует предварительно выложенную картинку):
Код: Выделить всё
%!PS-Adobe-3.0
%%BoundingBox: 0 0 100 842
%%Creator: Lazarus PostScriptCanvas for /home/fox/MLB!/mlbNIX
%%Title:
%%CreationDate: 18-1-08 18:24:11
%%Pages: 1
%%PageResources: (atend)
%%PageOrder: Ascend
%%Page: 1 1

%------------------------------------------------------------
%================== BEGIN SETUP==============================

% ISO Fonts
/Helvetica findfont
  dup length dict begin
  {1 index /FID ne {def} {pop pop} ifelse} forall
  /Encoding ISOLatin1Encoding def
  currentdict
end
/HelveticaISO exch definefont pop

/Helvetica-Bold findfont
  dup length dict begin
  {1 index /FID ne {def} {pop pop} ifelse} forall
  /Encoding ISOLatin1Encoding def
  currentdict
end
/HelveticaISO-Bold exch definefont pop

/Helvetica-Oblique findfont
  dup length dict begin
  {1 index /FID ne {def} {pop pop} ifelse} forall
  /Encoding ISOLatin1Encoding def
  currentdict
end
/HelveticaISO-Oblique exch definefont pop

/Helvetica-BoldOblique findfont
  dup length dict begin
  {1 index /FID ne {def} {pop pop} ifelse} forall
  /Encoding ISOLatin1Encoding def
  currentdict
end
/HelveticaISO-BoldOblique exch definefont pop

/Courier findfont
  dup length dict begin
  {1 index /FID ne {def} {pop pop} ifelse} forall
  /Encoding ISOLatin1Encoding def
  currentdict
end
/CourierISO exch definefont pop

/Courier-Bold findfont
  dup length dict begin
  {1 index /FID ne {def} {pop pop} ifelse} forall
  /Encoding ISOLatin1Encoding def
  currentdict
end
/CourierISO-Bold exch definefont pop

/Courier-Oblique findfont
  dup length dict begin
  {1 index /FID ne {def} {pop pop} ifelse} forall
  /Encoding ISOLatin1Encoding def
  currentdict
end
/CourierISO-Oblique exch definefont pop

/Courier-BoldOblique findfont
  dup length dict begin
  {1 index /FID ne {def} {pop pop} ifelse} forall
  /Encoding ISOLatin1Encoding def
  currentdict
end
/CourierISO-BoldOblique exch definefont pop

/Times findfont
  dup length dict begin
  {1 index /FID ne {def} {pop pop} ifelse} forall
  /Encoding ISOLatin1Encoding def
  currentdict
end
/TimesISO exch definefont pop

/Times-Bold findfont
  dup length dict begin
  {1 index /FID ne {def} {pop pop} ifelse} forall
  /Encoding ISOLatin1Encoding def
  currentdict
end
/TimesISO-Bold exch definefont pop

/Times-Italic findfont
  dup length dict begin
  {1 index /FID ne {def} {pop pop} ifelse} forall
  /Encoding ISOLatin1Encoding def
  currentdict
end
/TimesISO-Italic exch definefont pop

/Times-BoldItalic findfont
  dup length dict begin
  {1 index /FID ne {def} {pop pop} ifelse} forall
  /Encoding ISOLatin1Encoding def
  currentdict
end
/TimesISO-BoldItalic exch definefont pop

/Times-Roman findfont
  dup length dict begin
  {1 index /FID ne {def} {pop pop} ifelse} forall
  /Encoding ISOLatin1Encoding def
  currentdict
end
/Times-RomanISO exch definefont pop

/underline_on
{%def
    /underline true def
    /underlineposition exch def
    /underlinethickness exch def
    /TEXT { TEXTwith } def
} def
/underline_off
{ %def
    /undefline false def
    /TEXT { TEXTwithout } def
} def
/TEXTwithout { moveto show } bind def
/TEXTwith { %def
    moveto
    gsave
       [] 0 setdash
       0 underlineposition rmoveto
       underlinethickness setlinewidth
       dup stringwidth rlineto stroke
    grestore
    show
} bind def
%%BeginProcSet: patternfill 1.0 0
% width height matrix proc key cache
% definepattern -\> font
/definepattern { %def
    7 dict begin
        /FontDict 9 dict def
        FontDict begin
            /cache exch def
            /key exch def
            /proc exch cvx def
            /mtx exch matrix invertmatrix def
            /height exch def
            /width exch def
            /ctm matrix currentmatrix def
            /ptm matrix identmatrix def
            /str
            (12345678901234567890123456789012)
            def
        end
        /FontBBox [ %def
            0 0 FontDict /width get
            FontDict /height get
        ] def
        /FontMatrix FontDict /mtx get def
        /Encoding StandardEncoding def
        /FontType 3 def
        /BuildChar { %def
            pop begin
            FontDict begin
                width 0 cache { %ifelse
                    0 0 width height setcachedevice
                }{ %else
                    setcharwidth
                } ifelse
                0 0 moveto width 0 lineto
                width height lineto 0 height lineto
                closepath clip newpath
                gsave proc grestore
            end end
        } def
        FontDict /key get currentdict definefont
    end
} bind def
% dict patternpath -
% dict matrix patternpath -
/patternpath { %def
    dup type /dicttype eq { %ifelse
        begin FontDict /ctm get setmatrix
    }{ %else
        exch begin FontDict /ctm get setmatrix
        concat
    } ifelse
    currentdict setfont
    FontDict begin
        FontMatrix concat
        width 0 dtransform
        round width div exch round width div exch
        0 height dtransform
        round height div exch
        round height div exch
        0 0 transform round exch round exch
        ptm astore setmatrix
       
        pathbbox
        height div ceiling height mul 4 1 roll
        width div ceiling width mul 4 1 roll
        height div floor height mul 4 1 roll
        width div floor width mul 4 1 roll
       
        2 index sub height div ceiling cvi exch
        3 index sub width div ceiling cvi exch
        4 2 roll moveto
       
        FontMatrix ptm invertmatrix pop
        { %repeat
            gsave
                ptm concat
                dup str length idiv { %repeat
                    str show
                } repeat
                dup str length mod str exch
                0 exch getinterval show
            grestore
            0 height rmoveto
        } repeat
        pop
    end end
} bind def

% dict patternfill -
% dict matrix patternfill -
/patternfill { %def
    gsave
        clip patternpath
    grestore
    newpath
} bind def

% dict patterneofill -
% dict matrix patterneofill -
/patterneofill { %def
    gsave
        eoclip patternpath
    grestore
    newpath
} bind def

% dict patternstroke -
% dict matrix patternstroke -
/patternstroke { %def
    gsave
        strokepath clip patternpath
    grestore
    newpath
} bind def

% dict ax ay string patternashow -
% dict matrix ax ay string patternashow -
/patternashow { %def
    (0) exch { %forall
        2 copy 0 exch put pop dup
        false charpath
        currentpoint
        5 index type /dicttype eq { %ifelse
            5 index patternfill
        }{ %else
            6 index 6 index patternfill
        } ifelse
        moveto
        3 copy pop rmoveto
    } forall
    pop pop pop
    dup type /dicttype ne { pop } if pop
} bind def

% dict string patternshow -
% dict matrix string patternshow -
/patternshow { %def
    0 exch 0 exch patternashow
} bind def

/opaquepatternfill { %def
    gsave
    1 setgray
    fill
    grestore
    patternfill
} bind def

%%EndProcSet
%%EndProlog

%%BeginSetup
15 15 [300 72 div 0 0 300 72 div 0 0]
{ %definepattern
    2 setlinecap
    7.5 0 moveto 15 7.5 lineto
    0 7.5 moveto 7.5 15 lineto
    2 setlinewidth stroke
} bind
/bsBDiagonal true definepattern pop

15 15 [300 72 div 0 0 300 72 div 0 0]
{ %definepattern
    2 setlinecap
    7.5 0 moveto 0 7.5 lineto
    15 7.5 moveto 7.5 15 lineto
    2 setlinewidth stroke
} bind
/bsFDiagonal true definepattern pop
30 30 [300 72 div 0 0 300 72 div 0 0]
{ %definepattern
    2 2 scale
    2 setlinecap
    7.5 0 moveto 15 7.5 lineto
    0 7.5 moveto 7.5 15 lineto
    7.5 0 moveto 0 7.5 lineto
    15 7.5 moveto 7.5 15 lineto
    0.5 setlinewidth stroke
} bind
/bsDiagCross true definepattern pop

30 30 [300 72 div 0 0 300 72 div 0 0]
{ %definepattern
    2 setlinecap
    15 0 moveto 15 30 lineto
    0 15 moveto 30 15 lineto
    2 setlinewidth stroke
} bind
/bsCross true definepattern pop

15 15 [300 72 div 0 0 300 72 div 0 0]
{ %definepattern
    2 setlinecap
    0 7.5 moveto 15 7.5 lineto
    2 setlinewidth stroke
} bind
/bsHorizontal true definepattern pop

15 15 [300 72 div 0 0 300 72 div 0 0]
{ %definepattern
    2 setlinecap
    7.5 0 moveto 7.5 15 lineto
    2 setlinewidth stroke
} bind
/bsVertical true definepattern pop
%%EndSetup
%%====================== END SETUP =========================

%MoveTo(0,0)
2 840 moveto
%LineTo(136656014,0)
1 setlinewidth
136656016 840 lineto stroke
%MapedFontName "sansertif" -> "HelveticaISO"
/HelveticaISO-Bold findfont 12 scalefont setfont
2 826 moveto
(abcdefgh_абвгдежз_1234567890) show
136656014 0 moveto %last pos
2 813 moveto
(abcdefgh_AÃŅLJ_1234567890) show
136656014 0 moveto %last pos
%MapedFontName "times" -> "TimesISO"
/TimesISO-Bold findfont 12 scalefont setfont
2 778 moveto
(abcdefgh_абвгдежз_1234567890) show
136656014 0 moveto %last pos
2 763 moveto
(abcdefgh_AÃŅLJ_1234567890) show
136656014 0 moveto %last pos
%MapedFontName "courier" -> "CourierISO"
/CourierISO-Bold findfont 12 scalefont setfont
2 728 moveto
(abcdefgh_абвгдежз_1234567890) show
136656014 0 moveto %last pos
2 713 moveto
(abcdefgh_AÃŅLJ_1234567890) show
136656014 0 moveto %last pos
stroke
showpage
%%EOF

ЗЫж звиняюсь за многобукф
Lisolog
новенький
 
Сообщения: 39
Зарегистрирован: 13.12.2007 14:24:08
Откуда: Russia, SPb

Сообщение debi12345 » 18.01.2008 20:52:37

Файлы выбранных в шрифтов "*ISO" в ФонтФорже открывали ? Есть в них русские буквы ?
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5752
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Сообщение Lisolog » 18.01.2008 22:08:55

debi12345 писал(а):Файлы выбранных в шрифтов "*ISO" в ФонтФорже открывали ? Есть в них русские буквы ?

ага, всё чесно - русские
Lisolog
новенький
 
Сообщения: 39
Зарегистрирован: 13.12.2007 14:24:08
Откуда: Russia, SPb

Сообщение debi12345 » 18.01.2008 23:35:42

Убедитесь, что это те самые файлы. Например - удалите или переименуйте их - если ничего не изменится при печати, значит - подцепляются другие файлы.

Если есть русские буквы, то какие коды занимают они занимают в этом шрифте ?
(они должны вписываться в диапазон 0...255, иначе нужно создавать виртуальный шрифт, где это условие соблюдено )
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5752
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Сообщение Lisolog » 19.01.2008 16:34:49

debi12345 писал(а):Убедитесь, что это те самые файлы. Например - удалите или переименуйте их - если ничего не изменится при печати, значит - подцепляются другие файлы.

Если есть русские буквы, то какие коды занимают они занимают в этом шрифте ?
(они должны вписываться в диапазон 0...255, иначе нужно создавать виртуальный шрифт, где это условие соблюдено )

выявил, что ситуация всетаки с последним, средствами FontForge виртуальный шрифт создать можно?
Lisolog
новенький
 
Сообщения: 39
Зарегистрирован: 13.12.2007 14:24:08
Откуда: Russia, SPb

Сообщение debi12345 » 19.01.2008 19:40:53

средствами FontForge виртуальный шрифт создать можно?
===========
Можно - невиртуальный, за неделю мучений.

Что делать:

Вариант 1(невиртуальный) - утиллитой ttf2pt1 :

а) ttf2pt1 -e -l plane+4 <TTF-font> - создает пару файлов, описывающих шрифт как "iso10646-1" выборку "unicode-ru". Если иксы в юникоде, то созданный шрифт может и подойти (важно, чтобы коды символов не исказились при FPC-компиляции )

b) ttf2pt1 -e -L <MAP-file> <TTF-font> - создает пару файлов, описывающих шрифт как выборку, описанную в MAP-файле.

Формат MAP-файла:

Код: Выделить всё
!F5 U+00F5 affii10083
....


где:

!<char_code> <uni_code> <glyph_name>

, каждая из кодировок koi8,cp1251,... описывается своим файлом (нужно создать или найти в Сети - у меня были, но потерял ).

Вариант 2 (виртуальный):

см. страницу 2 этой темы, о векторах кодировок. Требует подготовки заданий, отличную от Вашего задания на печать.
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5752
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Сообщение AMD » 21.02.2008 13:14:32

Lisolog писал(а):Всякие TimesNewROman, Arial и тд отсутствуют.
Есть например Liberation, DejaVu...


А ты эти шрифты установил в системе?
Это виндовозные и в линуксах по дефольту их нет
AMD
постоялец
 
Сообщения: 189
Зарегистрирован: 23.01.2008 22:25:25
Откуда: Кишинев

Сообщение Lisolog » 21.02.2008 13:34:10

AMD писал(а):
Lisolog писал(а):Всякие TimesNewROman, Arial и тд отсутствуют.
Есть например Liberation, DejaVu...


А ты эти шрифты установил в системе?
Это виндовозные и в линуксах по дефольту их нет

конечно.. мандрива начинает из цеплять, как только помещаешь их в каталог шрифтов - так и проверял
Lisolog
новенький
 
Сообщения: 39
Зарегистрирован: 13.12.2007 14:24:08
Откуда: Russia, SPb

Сообщение AMD » 21.02.2008 13:48:57

Lisolog писал(а):
AMD писал(а):
Lisolog писал(а):Всякие TimesNewROman, Arial и тд отсутствуют.
Есть например Liberation, DejaVu...


А ты эти шрифты установил в системе?
Это виндовозные и в линуксах по дефольту их нет

конечно.. мандрива начинает из цеплять, как только помещаешь их в каталог шрифтов - так и проверял

Эти Всякие TimesNewROman, Arial ни в одном компоненте не видны?

У меня под Кубунту 7.10 все ок вроде
AMD
постоялец
 
Сообщения: 189
Зарегистрирован: 23.01.2008 22:25:25
Откуда: Кишинев

Сообщение Lisolog » 21.02.2008 13:58:37

AMD писал(а):
Lisolog писал(а):
AMD писал(а):
Lisolog писал(а):Всякие TimesNewROman, Arial и тд отсутствуют.
Есть например Liberation, DejaVu...


А ты эти шрифты установил в системе?
Это виндовозные и в линуксах по дефольту их нет

конечно.. мандрива начинает из цеплять, как только помещаешь их в каталог шрифтов - так и проверял

Эти Всякие TimesNewROman, Arial ни в одном компоненте не видны?

У меня под Кубунту 7.10 все ок вроде

не, всё видно, тока при printer.canvas.font не петались по русски, хотя вроде цеплялись
Lisolog
новенький
 
Сообщения: 39
Зарегистрирован: 13.12.2007 14:24:08
Откуда: Russia, SPb

Пред.След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 81

Рейтинг@Mail.ru