Печать по русски из-под Linux.
Модератор: Модераторы
- debi12345
- долгожитель
- Сообщения: 5761
- Зарегистрирован: 10.05.2006 23:41:15
- Откуда: Ташкент (Узбекистан)
В этом файле нужно посмотреть, какой шрифт выбирается перед посылкой кодов русских символов. Затем найти название этого шрифта в "Fontmap.GS", и выписать - какой файл ему соответствует. Затем открыть этот щрифтовый файл в редакторе шрифтов (том же FontForge) и убедиться, есть ли в нем русские символы. Если есть (но не печатаются) - будем разбираться дальше.
Вот получившийся 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
ЗЫж звиняюсь за многобукф
- debi12345
- долгожитель
- Сообщения: 5761
- Зарегистрирован: 10.05.2006 23:41:15
- Откуда: Ташкент (Узбекистан)
Убедитесь, что это те самые файлы. Например - удалите или переименуйте их - если ничего не изменится при печати, значит - подцепляются другие файлы.
Если есть русские буквы, то какие коды занимают они занимают в этом шрифте ?
(они должны вписываться в диапазон 0...255, иначе нужно создавать виртуальный шрифт, где это условие соблюдено )
Если есть русские буквы, то какие коды занимают они занимают в этом шрифте ?
(они должны вписываться в диапазон 0...255, иначе нужно создавать виртуальный шрифт, где это условие соблюдено )
debi12345 писал(а):Убедитесь, что это те самые файлы. Например - удалите или переименуйте их - если ничего не изменится при печати, значит - подцепляются другие файлы.
Если есть русские буквы, то какие коды занимают они занимают в этом шрифте ?
(они должны вписываться в диапазон 0...255, иначе нужно создавать виртуальный шрифт, где это условие соблюдено )
выявил, что ситуация всетаки с последним, средствами FontForge виртуальный шрифт создать можно?
- debi12345
- долгожитель
- Сообщения: 5761
- Зарегистрирован: 10.05.2006 23:41:15
- Откуда: Ташкент (Узбекистан)
средствами 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-файла:
где:
!<char_code> <uni_code> <glyph_name>
, каждая из кодировок koi8,cp1251,... описывается своим файлом (нужно создать или найти в Сети - у меня были, но потерял ).
Вариант 2 (виртуальный):
см. страницу 2 этой темы, о векторах кодировок. Требует подготовки заданий, отличную от Вашего задания на печать.
===========
Можно - невиртуальный, за неделю мучений.
Что делать:
Вариант 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 этой темы, о векторах кодировок. Требует подготовки заданий, отличную от Вашего задания на печать.
Lisolog писал(а):AMD писал(а):Lisolog писал(а):Всякие TimesNewROman, Arial и тд отсутствуют.
Есть например Liberation, DejaVu...
А ты эти шрифты установил в системе?
Это виндовозные и в линуксах по дефольту их нет
конечно.. мандрива начинает из цеплять, как только помещаешь их в каталог шрифтов - так и проверял
Эти Всякие TimesNewROman, Arial ни в одном компоненте не видны?
У меня под Кубунту 7.10 все ок вроде
AMD писал(а):Lisolog писал(а):AMD писал(а):Lisolog писал(а):Всякие TimesNewROman, Arial и тд отсутствуют.
Есть например Liberation, DejaVu...
А ты эти шрифты установил в системе?
Это виндовозные и в линуксах по дефольту их нет
конечно.. мандрива начинает из цеплять, как только помещаешь их в каталог шрифтов - так и проверял
Эти Всякие TimesNewROman, Arial ни в одном компоненте не видны?
У меня под Кубунту 7.10 все ок вроде
не, всё видно, тока при printer.canvas.font не петались по русски, хотя вроде цеплялись
