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

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

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

Сообщение alexs » 14.01.2008 16:04:12

Вся проблема во внутренней реализации генерации PostScript файла в Lazarus-е. Там жёстко прошиты используемые шрифты. Посмотри файл postscriptcanvas.pas
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Сообщение Lisolog » 14.01.2008 16:32:49

alexs писал(а):Вся проблема во внутренней реализации генерации PostScript файла в Lazarus-е. Там жёстко прошиты используемые шрифты. Посмотри файл postscriptcanvas.pas

Ну вот он у меня находится в /usr/lib/lazarus/lcl/
Открываю и редактирую:
Меняю
Код: Выделить всё
   (Name  : 'Times-RomanISO';
    Widths: (250, 333, 408, 500, 500, 833, 778, 180,
             333, 333, 500, 564, 250, 333, 250, 278, 500, 500,...

на (в моём случае) имеющийся LiberationSans:
Код: Выделить всё
   (Name  : 'LiberationSans-Regular';
    Widths: (250, 333, 408, 500, 500, 833, 778, 180,
             333, 333, 500, 564, 250, 333, 250, 278, 500, 500,....

и так далее все 4 типа
Далее компилю лазарь (или lcl тоже надо компильнуть).
Далее код:
Код: Выделить всё
    printer.begindoc;
    printer.canvas.font.name:='Liberation Sans';
    printer.canvas.Font.CharSet:=204;
    тыры-пыры...

и получаюца крокозябы снова 8-\

Или нужно париться искать TimesNewRoman и всё иже с ним?
Lisolog
новенький
 
Сообщения: 39
Зарегистрирован: 13.12.2007 14:24:08
Откуда: Russia, SPb

Сообщение Lisolog » 14.01.2008 19:47:26

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

Сообщение alexs » 14.01.2008 20:36:16

также обрати внимание на функцию
Код: Выделить всё
function TPostScriptPrinterCanvas.MappedFontName: string;
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Сообщение debi12345 » 14.01.2008 20:44:01

Не знаю, как в Лазарусе, но по МСЕ могу сказать необходимые условия. Само задание печати ( PostScript-файл ):

- должно содержать названия шрифтов, которые понятны GhostScript-у (см. "Fontmap" этой программы - шрифты должны быть описаны в этом файле в точной нотации), эта задача возлагается на саму Лазарус-программу (достаточно выработать разумный стандарт именования шрифтов - и прописать для него алиасы в "Fontmap")

- должно содержать карты кодировок (название литеры + код символа), используемых в задании (так как GhostScipt ограничен 255 символами в одном наборе ), плюс это дает возможность печатать юникодный текст

- должно содержать код применения этих карт кодировок

- сами шрифты должны содержать русские литеры, лучше всего нужно использовать TTF-шрифты из дистрибутива русской ВыньИксПи (GhostScript их понимает)

- PS-шрифты должны точно сопрягаться с Х11-шрифтами, чтобы можно было точно рассчитать местоположение и размер текста

Задача абсолютно решаемая, а в МСЕ - уже год как решенная (одним человеком !). Команда лазарусистов - приложите наконец руки и добейте эту смешную "проблему" !

Геморрой с Постскриптом ? Он того стоит, потому что большие плюсы PostScript - реактивная печать на PS-принтерах и позиционно очень точная печать на обычных. Ну и обработка позиций и размеров не в абстрактных пикселах, а в геометрических единицах.

ПС:

Кстати, а печать на обычный GDI ( не-PS )принтер под вынь32 разве не работает ?
Последний раз редактировалось debi12345 14.01.2008 21:05:25, всего редактировалось 1 раз.
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5752
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Сообщение debi12345 » 14.01.2008 20:56:01

Код генерации алиасов :
Код: Выделить всё
#!/bin/sh

SHORTPATHS=1
AUTOSHORTGS=1
PSF_ONLYALIASES=1
TTF_ONLYALIASES=0

LANG_NAME=`basename $LANG .$(locale charmap) | sed -e s/_.*//`

function prefer_list {
cat /etc/fonts/fonts.conf | \
  egrep -v -e "^[ \t]*$" | sed -e "s/^[ \t]\+//g" | sed -e "s/[ \t]\+$//g" | \
  egrep -e "<prefer>" -B 1 -A 25 | \
  egrep "<family>$1</family>" -A 25 | \
  egrep -e "</alias>" -B 25 | \
  egrep -v "</*alias>|</*prefer>" | sed -e "s/<\/*family>//g" | sed 1d > /tmp/$1-pref.txt
}

[ -f /tmp/Fontmap.GS-1 ] && rm -f -- /tmp/Fontmap.GS-1
[ -f /tmp/Fontmap.GS-2 ] && rm -f -- /tmp/Fontmap.GS-2
[ -f /tmp/serif-pref.txt  ] && rm -f -- /tmp/serif-pref.txt
[ -f /tmp/sans-serif-pref.txt  ] && rm -f -- /tmp/sans-serif-pref.txt
[ -f /tmp/monospace-pref.txt ] && rm -f -- /tmp/monospace-pref.txt
[ -f /tmp/fc-list.txt ] && rm -f -- /tmp/fc-list.txt

prefer_list serif
prefer_list sans-serif
prefer_list monospace

fc-list :lang=: file family slant weight > /tmp/fc-list.txt
fc-list :lang=$LANG_NAME file family slant weight >> /tmp/fc-list.txt

cat /tmp/fc-list.txt | egrep -v "^[ \t]*$" | awk \
  -v OPT1=$SHORTPATHS \
  -v OPT2=$AUTOSHORTGS \
  -v OPT3=$PSF_ONLYALIASES \
  -v OPT4=$TTF_ONLYALIASES 'BEGIN {
  sans_n=0;
  delete SANS;
  while (getline SANS[++sans_n] < "/tmp/sans-serif-pref.txt") {;}
  SANS1=sans_n;
  sans_styles_n=0;
  delete SANS_STYLES;
  delete SANS_TYPES;
 
  serif_n=0;
  delete SERIF;
  while (getline SERIF[++serif_n] < "/tmp/serif-pref.txt") {;}
  SERIF1=serif_n;
  serif_styles_n=0;
  delete SERIF_STYLES;
  delete SERIF_TYPES;
 
  mono_n=0;
  delete MONO;
  while (getline MONO[++mono_n] < "/tmp/monospace-pref.txt") {;}
  MONO1=mono_n;
  mono_styles_n=0;
  delete MONO_STYLES;
  delete MONO_TYPES;
 
  print "" > "/tmp/Fontmap.GS-2";
} {
  n1=split($0,A,":");

  gsub("^[ ]+|[ ]+$","",A[1]);
  gsub("^[ ]+|[ ]+$","",A[2]);
  gsub("^[ ]+|[ ]+$","",A[3]);
  gsub("^[ ]+|[ ]+$","",A[4]); 

  style="";
# weight :
#
# 50 = Light
# 75 = Book
# 80,100 = Regular,Normal,Medium
# 180 = Demi
# 200 = Bold
#
  gsub("weight=","",A[4]);
  if ( (A[4]+0) > 170) { style="Bold"; }

# slant :
#
# 100 = Italic
# 110 = Oblique 
#
  gsub("slant=","",A[3]);
  if ( (A[3]+0) > 90 ) {
    if ( style != "" ) {
      style=style" Italic";
    } else {
      style="Italic";
    }
  }
 
  famname= A[2];

  fstyle= style;
  fstyle1= style;
   
  gsub(" ","",fstyle);
  if (fstyle != "") { fstyle="-"fstyle; }
  if (fstyle1 != "") { fstyle1=" "fstyle1; }
 
  gsub(" ","-",style);
  if ( style != "" ) { style="-"style; }
  gsub("--","-",style); 

  if (( OPT1 == 1 ) || (( OPT2 == 1 ) && ( A[1] ~ /\/gsfonts|defoma|cups|ghostscript\//) ) )
  {
    n2= split(A[1],B,"/");
    A[1]=B[n2];
  }
 
  ft=""; 
  if ( A[1] ~ /\.(ttf|TTF)$/) {
    ft="TTF-";
  } else if ( A[1] ~ /\.(pf(a|b))|(PF(A|B))$/ ) {
    ft="PSF-";
  } else if ( A[1] ~ /\.(gsf|GSF)$/ ) {
    ft="GSF-";
  }
   
# B[n2] - short file name
# A[2] - concatenated family name 
# fam - original family name
# style - concatenated style c "-"
 
  for (i=1; i<= sans_n; i++) {
#-- Font name match -----       
    if (SANS[i] == A[2] ) {
#---- at higher priority ---           
      if (i < SANS1) {
#------ set the new priority as current ---     
        SANS1=i;
#------ restart the style info for the font
#------ with the higher priority
   sans_styles_n= 0;
   delete SANS_STYLES;
   delete SANS_TYPES;
        SANS_STYLES[++sans_styles_n]=style;
        SANS_TYPES[sans_styles_n]=ft;
#------ continue on the current priority
      } else if (i == SANS1)  {
        SANS_STYLES[++sans_styles_n]=style;
        SANS_TYPES[sans_styles_n]=ft;
      }
    }
  }

  for (i=1; i <= serif_n; i++) {
    if (SERIF[i] == A[2] ) {
      if (i < SERIF1) {
        SERIF1=i;
   serif_styles_n= 0;
   delete SERIF_STYLES;
   delete SERIF_TYPES;
        SERIF_STYLES[++serif_styles_n]=style;
        SERIF_TYPES[serif_styles_n]=ft;
      } else if (i == SERIF1) {
   SERIF_STYLES[++serif_styles_n]=style;
   SERIF_TYPES[serif_styles_n]=ft;
      }
    }
  }

  for (i=1; i <= mono_n; i++) {
 
    if (MONO[i] == A[2] ) {
      if (i < MONO1) {
        MONO1=i;
   mono_styles_n= 0;
   delete MONO_STYLES;
   delete MONO_TYPES;
        MONO_STYLES[++mono_styles_n]=style;
        MONO_TYPES[mono_styles_n]=ft;
      } else if (i == MONO1) {
   MONO_STYLES[++mono_styles_n]=style;
   MONO_TYPES[mono_styles_n]=ft;
      }
    }
  }

  gsub(" ","-",A[2]);
  if ((( OPT3 != 1 ) && ((ft == "PSF-") || (ft == "GSF-"))) || (( OPT4 != 1 ) && (ft == "TTF-"))) {
    print "/"ft""A[2]""style"\t("A[1]")\t;";
    print "("famname""fstyle")\t/"ft""A[2]""style"\t;" >> "/tmp/Fontmap.GS-2";
  }
 
} END {
  print "" > "/tmp/Fontmap.GS-1";
 
  for (i=1; i <= sans_styles_n; i++) {
    SANS_TYPE=""
    if ((( OPT3 != 1 ) && ((SANS_TYPES[i] == "PSF-") || (SANS_TYPES[i] == "GSF-"))) || (( OPT4 != 1 ) && (SANS_TYPES[i] == "TTF-"))) {
      SANS_TYPE=SANS_TYPES[i];
    }
    SANS_STYLE=SANS_STYLES[i];
    if ( SANS_STYLE != "" ) {
      gsub("-","",SANS_STYLE);
      SANS_STYLE="-"SANS_STYLE;
    }
    gsub(" ","-",SANS[SANS1]);
    print "/Sans"SANS_STYLE"\t/"SANS_TYPE""SANS[SANS1]""SANS_STYLES[i]"\t;" >> "/tmp/Fontmap.GS-1";
    print "/Helvetica"SANS_STYLE"\t/"SANS_TYPE""SANS[SANS1]""SANS_STYLES[i]"\t;" >> "/tmp/Fontmap.GS-1";   
  }

  for (i=1; i <= serif_styles_n; i++) {
    SERIF_TYPE=""
    if ((( OPT3 != 1 ) && ((SERIF_TYPES[i] == "PSF-") || (SERIF_TYPES[i] == "GSF-"))) || (( OPT4 != 1 ) && (SERIF_TYPES[i] == "TTF-"))) {
      SERIF_TYPE=SERIF_TYPES[i];
    }
    SERIF_STYLE=SERIF_STYLES[i];
    if ( SERIF_STYLE != "" ) {
      gsub("-","",SERIF_STYLE);
      SERIF_STYLE="-"SERIF_STYLE;
    }
    gsub(" ","-",SERIF[SERIF1]);
    print "/Serif"SERIF_STYLE"\t/"SERIF_TYPE""SERIF[SERIF1]""SERIF_STYLES[i]"\t;" >> "/tmp/Fontmap.GS-1";
    print "/Times"SERIF_STYLE"\t/"SERIF_TYPE""SERIF[SERIF1]""SERIF_STYLES[i]"\t;" >> "/tmp/Fontmap.GS-1";
  }

  for (i=1; i <= mono_styles_n; i++) {
    MONO_TYPE=""
    if ((( OPT3 != 1 ) && ((MONO_TYPES[i] == "PSF-") || (MONO_TYPES[i] == "GSF-"))) || (( OPT4 != 1 ) && (MONO_TYPES[i] == "TTF-"))) {
      MONO_TYPE=MONO_TYPES[i];
    }
    MONO_STYLE=MONO_STYLES[i];
    if ( MONO_STYLE != "" ) {
      gsub("-","",MONO_STYLE);
      MONO_STYLE="-"MONO_STYLE;
    }
    gsub(" ","-",MONO[MONO1]);
    print "/Mono"MONO_STYLE"\t/"MONO_TYPE""MONO[MONO1]""MONO_STYLES[i]"\t;" >> "/tmp/Fontmap.GS-1";
    print "/Fixed"MONO_STYLE"\t/"MONO_TYPE""MONO[MONO1]""MONO_STYLES[i]"\t;" >> "/tmp/Fontmap.GS-1";
    print "/Courier"MONO_STYLE"\t/"MONO_TYPE""MONO[MONO1]""MONO_STYLES[i]"\t;" >> "/tmp/Fontmap.GS-1";   
  }

}' | sort -u > ./Fontmap.GS.xft

cat /tmp/Fontmap.GS-2 | sort -u >> ./Fontmap.GS.xft
cat /tmp/Fontmap.GS-1 | sort -u >> ./Fontmap.GS.xft

rm -f -- \
  /tmp/Fontmap.GS-1 \
  /tmp/Fontmap.GS-2 \
  /tmp/serif-pref.txt \
  /tmp/sans-serif-pref.txt \
  /tmp/monospace-pref.txt \
  /tmp/fc-list.txt


exit 0


Создает алиасы :
Код: Выделить всё
/TTF-Arial   (arial.ttf)   ;
/TTF-Arial-Black   (ariblk.ttf)   ;
/TTF-Arial-Bold   (arialbd.ttf)   ;
/TTF-Arial-Bold-Italic   (arialbi.ttf)   ;
/TTF-Arial-Italic   (ariali.ttf)   ;
/TTF-Comic-Sans-MS-Bold   (comicbd.ttf)   ;
/TTF-Comic-Sans-MS   (comic.ttf)   ;
/TTF-Courier-New-Bold   (courbd.ttf)   ;
/TTF-Courier-New-Bold-Italic   (courbi.ttf)   ;
/TTF-Courier-New   (cour.ttf)   ;
/TTF-Courier-New-Italic   (couri.ttf)   ;
/TTF-Franklin-Gothic-Medium   (framd.ttf)   ;
/TTF-Franklin-Gothic-Medium-Italic   (framdit.ttf)   ;
/TTF-FreeMono-Bold   (FreeMonoBold.ttf)   ;
/TTF-FreeMono-Bold-Italic   (FreeMonoBoldOblique.ttf)   ;
/TTF-FreeMono   (FreeMono.ttf)   ;
/TTF-FreeMono-Italic   (FreeMonoOblique.ttf)   ;
/TTF-FreeSans-Bold   (FreeSansBold.ttf)   ;
/TTF-FreeSans-Bold-Italic   (FreeSansBoldOblique.ttf)   ;
/TTF-FreeSans   (FreeSans.ttf)   ;
/TTF-FreeSans-Italic   (FreeSansOblique.ttf)   ;
/TTF-FreeSerif-Bold   (FreeSerifBold.ttf)   ;
/TTF-FreeSerif-Bold-Italic   (FreeSerifBoldItalic.ttf)   ;
/TTF-FreeSerif   (FreeSerif.ttf)   ;
/TTF-FreeSerif-Italic   (FreeSerifItalic.ttf)   ;
/TTF-Georgia-Bold   (georgiab.ttf)   ;
/TTF-Georgia-Bold-Italic   (georgiaz.ttf)   ;
/TTF-Georgia   (georgia.ttf)   ;
/TTF-Georgia-Italic   (georgiai.ttf)   ;
/TTF-Impact   (impact.ttf)   ;
/TTF-Lucida-Console   (lucon.ttf)   ;
/TTF-Lucida-Sans-Unicode   (l_10646.ttf)   ;
/TTF-Microsoft-Sans-Serif   (micross.ttf)   ;
/TTF-Palatino-Linotype-Bold-Italic   (palabi.ttf)   ;
/TTF-Palatino-Linotype-Bold   (palab.ttf)   ;
/TTF-Palatino-Linotype-Italic   (palai.ttf)   ;
/TTF-Palatino-Linotype   (pala.ttf)   ;
/TTF-SylfaenARM,Sylfaen   (sylfaen.ttf)   ;
/TTF-Tahoma-Bold   (tahomabd.ttf)   ;
/TTF-Tahoma   (tahoma.ttf)   ;
/TTF-Times-New-Roman-Bold-Italic   (timesbi.ttf)   ;
/TTF-Times-New-Roman-Bold   (timesbd.ttf)   ;
/TTF-Times-New-Roman-Italic   (timesi.ttf)   ;
/TTF-Times-New-Roman   (times.ttf)   ;
/TTF-Trebuchet-MS-Bold-Italic   (trebucbi.ttf)   ;
/TTF-Trebuchet-MS-Bold   (trebucbd.ttf)   ;
/TTF-Trebuchet-MS-Italic   (trebucit.ttf)   ;
/TTF-Trebuchet-MS   (trebuc.ttf)   ;
/TTF-Verdana-Bold-Italic   (verdanaz.ttf)   ;
/TTF-Verdana-Bold   (verdanab.ttf)   ;
/TTF-Verdana-Italic   (verdanai.ttf)   ;
/TTF-Verdana   (verdana.ttf)   ;

(Arial Black)   /TTF-Arial-Black   ;
(Arial-BoldItalic)   /TTF-Arial-Bold-Italic   ;
(Arial-Bold)   /TTF-Arial-Bold   ;
(Arial-Italic)   /TTF-Arial-Italic   ;
(Arial)   /TTF-Arial   ;
(Comic Sans MS-Bold)   /TTF-Comic-Sans-MS-Bold   ;
(Comic Sans MS)   /TTF-Comic-Sans-MS   ;
(Courier New-BoldItalic)   /TTF-Courier-New-Bold-Italic   ;
(Courier New-Bold)   /TTF-Courier-New-Bold   ;
(Courier New-Italic)   /TTF-Courier-New-Italic   ;
(Courier New)   /TTF-Courier-New   ;
(Franklin Gothic Medium-Italic)   /TTF-Franklin-Gothic-Medium-Italic   ;
(Franklin Gothic Medium)   /TTF-Franklin-Gothic-Medium   ;
(FreeMono-BoldItalic)   /TTF-FreeMono-Bold-Italic   ;
(FreeMono-Bold)   /TTF-FreeMono-Bold   ;
(FreeMono-Italic)   /TTF-FreeMono-Italic   ;
(FreeMono)   /TTF-FreeMono   ;
(FreeSans-BoldItalic)   /TTF-FreeSans-Bold-Italic   ;
(FreeSans-Bold)   /TTF-FreeSans-Bold   ;
(FreeSans-Italic)   /TTF-FreeSans-Italic   ;
(FreeSans)   /TTF-FreeSans   ;
(FreeSerif-BoldItalic)   /TTF-FreeSerif-Bold-Italic   ;
(FreeSerif-Bold)   /TTF-FreeSerif-Bold   ;
(FreeSerif-Italic)   /TTF-FreeSerif-Italic   ;
(FreeSerif)   /TTF-FreeSerif   ;
(Georgia-BoldItalic)   /TTF-Georgia-Bold-Italic   ;
(Georgia-Bold)   /TTF-Georgia-Bold   ;
(Georgia-Italic)   /TTF-Georgia-Italic   ;
(Georgia)   /TTF-Georgia   ;
(Impact)   /TTF-Impact   ;
(Lucida Console)   /TTF-Lucida-Console   ;
(Lucida Sans Unicode)   /TTF-Lucida-Sans-Unicode   ;
(Microsoft Sans Serif)   /TTF-Microsoft-Sans-Serif   ;
(Palatino Linotype-BoldItalic)   /TTF-Palatino-Linotype-Bold-Italic   ;
(Palatino Linotype-Bold)   /TTF-Palatino-Linotype-Bold   ;
(Palatino Linotype-Italic)   /TTF-Palatino-Linotype-Italic   ;
(Palatino Linotype)   /TTF-Palatino-Linotype   ;
(SylfaenARM,Sylfaen)   /TTF-SylfaenARM,Sylfaen   ;
(Tahoma-Bold)   /TTF-Tahoma-Bold   ;
(Tahoma)   /TTF-Tahoma   ;
(Times New Roman-BoldItalic)   /TTF-Times-New-Roman-Bold-Italic   ;
(Times New Roman-Bold)   /TTF-Times-New-Roman-Bold   ;
(Times New Roman-Italic)   /TTF-Times-New-Roman-Italic   ;
(Times New Roman)   /TTF-Times-New-Roman   ;
(Trebuchet MS-BoldItalic)   /TTF-Trebuchet-MS-Bold-Italic   ;
(Trebuchet MS-Bold)   /TTF-Trebuchet-MS-Bold   ;
(Trebuchet MS-Italic)   /TTF-Trebuchet-MS-Italic   ;
(Trebuchet MS)   /TTF-Trebuchet-MS   ;
(Verdana-BoldItalic)   /TTF-Verdana-Bold-Italic   ;
(Verdana-Bold)   /TTF-Verdana-Bold   ;
(Verdana-Italic)   /TTF-Verdana-Italic   ;
(Verdana)   /TTF-Verdana   ;

/Courier-BoldItalic   /TTF-Courier-New-Bold-Italic   ;
/Courier-Bold   /TTF-Courier-New-Bold   ;
/Courier-Italic   /TTF-Courier-New-Italic   ;
/Courier   /TTF-Courier-New   ;
/Fixed-BoldItalic   /TTF-Courier-New-Bold-Italic   ;
/Fixed-Bold   /TTF-Courier-New-Bold   ;
/Fixed-Italic   /TTF-Courier-New-Italic   ;
/Fixed   /TTF-Courier-New   ;
/Helvetica-BoldItalic   /TTF-Verdana-Bold-Italic   ;
/Helvetica-Bold   /TTF-Verdana-Bold   ;
/Helvetica-Italic   /TTF-Verdana-Italic   ;
/Helvetica   /TTF-Verdana   ;
/Mono-BoldItalic   /TTF-Courier-New-Bold-Italic   ;
/Mono-Bold   /TTF-Courier-New-Bold   ;
/Mono-Italic   /TTF-Courier-New-Italic   ;
/Mono   /TTF-Courier-New   ;
/Sans-BoldItalic   /TTF-Verdana-Bold-Italic   ;
/Sans-Bold   /TTF-Verdana-Bold   ;
/Sans-Italic   /TTF-Verdana-Italic   ;
/Sans   /TTF-Verdana   ;
/Serif-BoldItalic   /TTF-Times-New-Roman-Bold-Italic   ;
/Serif-Bold   /TTF-Times-New-Roman-Bold   ;
/Serif-Italic   /TTF-Times-New-Roman-Italic   ;
/Serif   /TTF-Times-New-Roman   ;
/Times-BoldItalic   /TTF-Times-New-Roman-Bold-Italic   ;
/Times-Bold   /TTF-Times-New-Roman-Bold   ;
/Times-Italic   /TTF-Times-New-Roman-Italic   ;
/Times   /TTF-Times-New-Roman   ;



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

Сообщение debi12345 » 14.01.2008 23:10:42

Успешный PS-код (***... **** - мои комменты) :
Код: Выделить всё
%!PS-Adobe-3.0
%%BoundingBox: 28 28 567 814
%%Creator: simple_report
%%Title:
%%Pages: (atend)
%%PageOrder: Ascend

*** "/rf" is the font loading procedure (based on a fontname & an encoding vector ) ***

/rf {
findfont
dup length dict begin
{ 1 index /FID ne
{def}
{pop pop}
ifelse
} forall
/Encoding exch def
currentdict
end
definefont pop
} bind def
/sf {
dup length 2 ge {dup dup length 3 ge
{1 2 getinterval aload pop} {1 get dup} ifelse
matrix scale } {matrix} ifelse
1 index length 4 ge {1 index 3 get matrix rotate matrix concatmatrix} if
1 index dup length 5 ge {dup 4 get} {0} ifelse /uli exch def
dup length 6 ge {5 get} {pop 0} ifelse /sou exch def
exch  0 get findfont exch makefont dup /FontMatrix get exch dup /FontBBox get
aload pop 5 index transform /asc exch def pop 3 index transform -1 mul
/desc exch def pop setfont pop
} bind def
/w {
currentfont exch 0 exch { dup length 2 ge{ dup 1 get sf}
if 0 get stringwidth pop add } forall exch setfont
} bind def
/s {
{ currentpoint /ay exch def /ax exch def dup dup length 3 ge
{dup 2 get aload pop setcolor 0 2 getinterval } if
dup length 2 eq {aload pop sf} {aload pop} ifelse
exch dup length 4 eq { [currentcolor] exch 3 get aload pop setcolor exch dup stringwidth pop
currentpoint currentpoint asc add
newpath moveto 2 index 0 rlineto 0 0 asc sub desc sub rlineto 0 3 index sub 0 rlineto
closepath fill moveto pop exch aload pop setcolor show }
{ pop show } ifelse
uli 0 ne {ul} if sou 0 ne {so} if } forall
} bind def
/slt {
asc sub 3 index exch moveto currentpoint /ay exch def /ax exch def pop pop pop s
} bind def
/cy {
2 index sub dup 0 eq
{pop 1 index}
{asc sub desc sub 2 div 2 index add desc add}
ifelse} bind def
/sl {
cy 3 index exch moveto
pop pop pop s
} bind def
/sr { cy exch 4 index
w sub exch moveto pop pop s
} bind def
/sc {
cy 4 index w 4 index 3 index exch sub exch sub 2 div 4 index add
exch moveto
pop pop pop s
} bind def
/slb {
pop pop desc add moveto s
} bind def
/srb {
4 index w 2 index exch sub 3 index desc add moveto
pop pop pop pop s} bind def
/srt {
4 index w 2 index exch sub exch asc sub moveto
pop pop pop s} bind def
/st {
4 index w 4 index 3 index exch sub exch sub 2 div 4 index add
exch asc sub moveto pop pop pop s
} bind def
/sb {
4 index w 4 index 3 index exch sub exch sub 2 div 4 index add
3 index desc add moveto pop pop pop pop s
} bind def
/ul {
gsave desc 4 div setlinewidth 0 setlinecap [] 0 setdash currentpoint desc 2 div sub
dup 2 index exch moveto ax exch lineto stroke pop grestore} bind def
/so { gsave desc 4 div setlinewidth 0 setlinecap [] 0 setdash currentpoint
asc desc add 2 div add desc sub dup 2 index exch moveto ax exch lineto stroke pop grestore
} bind def
/tab { currentpoint pop 2 index sub 1 index 0.01 add add  1 index div floor mul add
} bind def

%%Page: 1 1
initmatrix
0 setgray

*** The encoding vector for Latin chars ***

/E00 [
/uni0000 /uni0001 /uni0002 /uni0003 /uni0004 /uni0005 /uni0006 /uni0007
/uni0008 /uni0009 /uni000A /uni000B /uni000C /uni000D /uni000E /uni000F
/uni0010 /uni0011 /uni0012 /uni0013 /uni0014 /uni0015 /uni0016 /uni0017
/uni0018 /uni0019 /uni001A /uni001B /uni001C /uni001D /uni001E /uni001F
/space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle
/parenleft /parenright /asterisk /plus /comma /hyphen /period /slash
/zero /one /two /three /four /five /six /seven
/eight /nine /colon /semicolon /less /equal /greater /question
/at /A /B /C /D /E /F /G
/H /I /J /K /L /M /N /O
/P /Q /R /S /T /U /V /W
/X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
/grave /a /b /c /d /e /f /g
/h /i /j /k /l /m /n /o
/p /q /r /s /t /u /v /w
/x /y /z /braceleft /bar /braceright /asciitilde /uni007F
/uni0080 /uni0081 /uni0082 /uni0083 /uni0084 /uni0085 /uni0086 /uni0087
/uni0088 /uni0089 /uni008A /uni008B /uni008C /uni008D /uni008E /uni008F
/uni0090 /uni0091 /uni0092 /uni0093 /uni0094 /uni0095 /uni0096 /uni0097
/uni0098 /uni0099 /uni009A /uni009B /uni009C /uni009D /uni009E /uni009F
/uni00A0 /exclamdown /cent /sterling /currency /yen /brokenbar /section
/dieresis /copyright /ordfeminine /guillemotleft /logicalnot /uni00AD /registered /macron
/degree /plusminus /uni00B2 /uni00B3 /acute /uni00B5 /paragraph /periodcentered
/cedilla /uni00B9 /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown
/Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
/Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis
/Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply
/Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls
/agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla
/egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis
/eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide
/oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis
] def

*** /F000 = font "Times New Roman-Bold" for Latin text

/F000 E00 (Times New Roman-Bold) rf
[/F000 13.228] sf
initclip [ 170.079 807.874 259.843 -41.575] rectclip
[[(LIST OF THE MOST GUILTY PRISONERS) [/F000 13.228]]] 170.079 791.811 429.921 807.874 sc
[[(OF THE WORLD) [/F000 13.228]]] 170.079 775.748 429.921 791.811 sc
0.878 setgray
initclip [ 34.016 766.299 529.134 -29.291] rectclip
newpath 34.016 766.299 moveto 563.15 766.299 lineto 563.15 737.008 lineto 34.016 737.008 lineto closepath fill
0 setgray

*** The encoding vector for Math chars ***

/E21 [
/uni2100 /uni2101 /uni2102 /uni2103 /uni2104 /afii61248 /uni2106 /uni2107
/uni2108 /uni2109 /uni210A /uni210B /uni210C /uni210D /uni210E /uni210F
/uni2110 /Ifraktur /uni2112 /afii61289 /uni2114 /uni2115 /afii61352 /uni2117
/weierstrass /uni2119 /uni211A /uni211B /Rfraktur /uni211D /prescription /uni211F
/uni2120 /uni2121 /trademark /uni2123 /uni2124 /uni2125 /uni2126 /uni2127
/uni2128 /uni2129 /uni212A /uni212B /uni212C /uni212D /estimated /uni212F
/uni2130 /uni2131 /uni2132 /uni2133 /uni2134 /aleph /uni2136 /uni2137
/uni2138 /uni2139 /uni213A /uni213B /uni213C /uni213D /uni213E /uni213F
/uni2140 /uni2141 /uni2142 /uni2143 /uni2144 /uni2145 /uni2146 /uni2147
/uni2148 /uni2149 /uni214A /uni214B /uni214C /uni214D /uni214E /uni214F
/uni2150 /uni2151 /uni2152 /onethird /twothirds /uni2155 /uni2156 /uni2157
/uni2158 /uni2159 /uni215A /oneeighth /threeeighths /fiveeighths /seveneighths /uni215F
/uni2160 /uni2161 /uni2162 /uni2163 /uni2164 /uni2165 /uni2166 /uni2167
/uni2168 /uni2169 /uni216A /uni216B /uni216C /uni216D /uni216E /uni216F
/uni2170 /uni2171 /uni2172 /uni2173 /uni2174 /uni2175 /uni2176 /uni2177
/uni2178 /uni2179 /uni217A /uni217B /uni217C /uni217D /uni217E /uni217F
/uni2180 /uni2181 /uni2182 /uni2183 /uni2184 /uni2185 /uni2186 /uni2187
/uni2188 /uni2189 /uni218A /uni218B /uni218C /uni218D /uni218E /uni218F
/arrowleft /arrowup /arrowright /arrowdown /arrowboth /arrowupdn /uni2196 /uni2197
/uni2198 /uni2199 /uni219A /uni219B /uni219C /uni219D /uni219E /uni219F
/uni21A0 /uni21A1 /uni21A2 /uni21A3 /uni21A4 /uni21A5 /uni21A6 /uni21A7
/arrowupdnbse /uni21A9 /uni21AA /uni21AB /uni21AC /uni21AD /uni21AE /uni21AF
/uni21B0 /uni21B1 /uni21B2 /uni21B3 /uni21B4 /carriagereturn /uni21B6 /uni21B7
/uni21B8 /uni21B9 /uni21BA /uni21BB /uni21BC /uni21BD /uni21BE /uni21BF
/uni21C0 /uni21C1 /uni21C2 /uni21C3 /uni21C4 /uni21C5 /uni21C6 /uni21C7
/uni21C8 /uni21C9 /uni21CA /uni21CB /uni21CC /uni21CD /uni21CE /uni21CF
/arrowdblleft /arrowdblup /arrowdblright /arrowdbldown /arrowdblboth /uni21D5 /uni21D6 /uni21D7
/uni21D8 /uni21D9 /uni21DA /uni21DB /uni21DC /uni21DD /uni21DE /uni21DF
/uni21E0 /uni21E1 /uni21E2 /uni21E3 /uni21E4 /uni21E5 /uni21E6 /uni21E7
/uni21E8 /uni21E9 /uni21EA /uni21EB /uni21EC /uni21ED /uni21EE /uni21EF
/uni21F0 /uni21F1 /uni21F2 /uni21F3 /uni21F4 /uni21F5 /uni21F6 /uni21F7
/uni21F8 /uni21F9 /uni21FA /uni21FB /uni21FC /uni21FD /uni21FE /uni21FF
] def

*** /F210 = font "Times New Roman-Bold" for Math text

/F210 E21 (Times New Roman-Bold) rf
[[(\026) [/F210 13.228]]] 34.016 737.008 62.362 766.299 sc
[[(Name) [/F000 13.228]]] 62.362 737.008 232.441 766.299 sc
[[(Term) [/F000 13.228]]] 232.441 737.008 331.654 766.299 sc
[[(Arrest reason) [/F000 13.228]]] 331.654 737.008 459.213 766.299 sc
[[(Prison) [/F000 13.228]]] 459.213 737.008 563.15 766.299 sc
[] 0 setdash
0.567 setlinewidth
2 setlinecap
0 setlinejoin
initclip [ -910.866 1711.181 2418.898 -1919.055] rectclip
newpath 34.016 737.008 moveto 34.016 766.299 lineto stroke
[] 0 setdash
2 setlinecap
newpath 62.362 737.008 moveto 62.362 766.299 lineto stroke
[] 0 setdash
2 setlinecap
newpath 232.441 737.008 moveto 232.441 766.299 lineto stroke
[] 0 setdash
2 setlinecap
newpath 331.654 737.008 moveto 331.654 766.299 lineto stroke
[] 0 setdash
2 setlinecap
newpath 459.213 737.008 moveto 459.213 766.299 lineto stroke
[] 0 setdash
2 setlinecap
newpath 563.15 737.008 moveto 563.15 766.299 lineto stroke
[] 0 setdash
2 setlinecap
newpath 34.016 766.299 moveto 563.15 766.299 lineto stroke
[] 0 setdash
2 setlinecap
newpath 34.016 737.008 moveto 563.15 737.008 lineto stroke

*** /F001 = font "Times New Roman" for Latin text

/F001 E00 (Times New Roman) rf
[/F001 13.228] sf
initclip [ 34.016 737.008 529.134 -16.063] rectclip
[[(1) [/F001 13.228]]] 34.016 720.945 62.362 737.008 sc
[[(Captain Morgan) [/F001 13.228]]] 68.031 720.945 232.441 737.008 sl
[[(99.00) [/F001 13.228]]] 238.11 720.945 328.819 737.008 sc
[[(too loves gold) [/F001 13.228]]] 337.323 720.945 459.213 737.008 sl
[[(Guantanamo) [/F001 13.228]]] 464.882 720.945 563.15 737.008 sl
[] 0 setdash
0.283 setlinewidth
2 setlinecap
initclip [ -910.866 1681.89 2418.898 -1905.827] rectclip
newpath 34.016 720.945 moveto 34.016 737.008 lineto stroke
[] 0 setdash
2 setlinecap
newpath 62.362 720.945 moveto 62.362 737.008 lineto stroke
[] 0 setdash
2 setlinecap
newpath 232.441 720.945 moveto 232.441 737.008 lineto stroke
[] 0 setdash
2 setlinecap
newpath 331.654 720.945 moveto 331.654 737.008 lineto stroke
[] 0 setdash
2 setlinecap
newpath 459.213 720.945 moveto 459.213 737.008 lineto stroke
[] 0 setdash
0.567 setlinewidth
2 setlinecap
newpath 34.016 720.945 moveto 34.016 737.008 lineto stroke
[] 0 setdash
2 setlinecap
newpath 563.15 720.945 moveto 563.15 737.008 lineto stroke
[] 0 setdash
0.283 setlinewidth
2 setlinecap
newpath 34.016 720.945 moveto 563.15 720.945 lineto stroke
initclip [ 34.016 720.945 529.134 -28.346] rectclip
[[(2) [/F001 13.228]]] 34.016 692.598 62.362 720.945 sc

*** The encoding vector for Russian chars ***

/E04 [
/uni0400 /afii10023 /afii10051 /afii10052 /afii10053 /afii10054 /afii10055 /afii10056
/afii10057 /afii10058 /afii10059 /afii10060 /afii10061 /uni040D /afii10062 /afii10145
/afii10017 /afii10018 /afii10019 /afii10020 /afii10021 /afii10022 /afii10024 /afii10025
/afii10026 /afii10027 /afii10028 /afii10029 /afii10030 /afii10031 /afii10032 /afii10033
/afii10034 /afii10035 /afii10036 /afii10037 /afii10038 /afii10039 /afii10040 /afii10041
/afii10042 /afii10043 /afii10044 /afii10045 /afii10046 /afii10047 /afii10048 /afii10049
/afii10065 /afii10066 /afii10067 /afii10068 /afii10069 /afii10070 /afii10072 /afii10073
/afii10074 /afii10075 /afii10076 /afii10077 /afii10078 /afii10079 /afii10080 /afii10081
/afii10082 /afii10083 /afii10084 /afii10085 /afii10086 /afii10087 /afii10088 /afii10089
/afii10090 /afii10091 /afii10092 /afii10093 /afii10094 /afii10095 /afii10096 /afii10097
/uni0450 /afii10071 /afii10099 /afii10100 /afii10101 /afii10102 /afii10103 /afii10104
/afii10105 /afii10106 /afii10107 /afii10108 /afii10109 /uni045D /afii10110 /afii10193
/uni0460 /uni0461 /afii10146 /afii10194 /uni0464 /uni0465 /uni0466 /uni0467
/uni0468 /uni0469 /uni046A /uni046B /uni046C /uni046D /uni046E /uni046F
/uni0470 /uni0471 /afii10147 /afii10195 /afii10148 /afii10196 /uni0476 /uni0477
/uni0478 /uni0479 /uni047A /uni047B /uni047C /uni047D /uni047E /uni047F
/uni0480 /uni0481 /uni0482 /uni0483 /uni0484 /uni0485 /uni0486 /uni0487
/uni0488 /uni0489 /uni048A /uni048B /uni048C /uni048D /uni048E /uni048F
/afii10050 /afii10098 /uni0492 /uni0493 /uni0494 /uni0495 /uni0496 /uni0497
/uni0498 /uni0499 /uni049A /uni049B /uni049C /uni049D /uni049E /uni049F
/uni04A0 /uni04A1 /uni04A2 /uni04A3 /uni04A4 /uni04A5 /uni04A6 /uni04A7
/uni04A8 /uni04A9 /uni04AA /uni04AB /uni04AC /uni04AD /uni04AE /uni04AF
/uni04B0 /uni04B1 /uni04B2 /uni04B3 /uni04B4 /uni04B5 /uni04B6 /uni04B7
/uni04B8 /uni04B9 /uni04BA /uni04BB /uni04BC /uni04BD /uni04BE /uni04BF
/uni04C0 /uni04C1 /uni04C2 /uni04C3 /uni04C4 /uni04C5 /uni04C6 /uni04C7
/uni04C8 /uni04C9 /uni04CA /uni04CB /uni04CC /uni04CD /uni04CE /uni04CF
/uni04D0 /uni04D1 /uni04D2 /uni04D3 /uni04D4 /uni04D5 /uni04D6 /uni04D7
/uni04D8 /afii10846 /uni04DA /uni04DB /uni04DC /uni04DD /uni04DE /uni04DF
/uni04E0 /uni04E1 /uni04E2 /uni04E3 /uni04E4 /uni04E5 /uni04E6 /uni04E7
/uni04E8 /uni04E9 /uni04EA /uni04EB /uni04EC /uni04ED /uni04EE /uni04EF
/uni04F0 /uni04F1 /uni04F2 /uni04F3 /uni04F4 /uni04F5 /uni04F6 /uni04F7
/uni04F8 /uni04F9 /uni04FA /uni04FB /uni04FC /uni04FD /uni04FE /uni04FF
] def

*** /F041 = font "Times New Roman" for Russian text ***

/F041 E04 (Times New Roman) rf

*** writting text with fonts /F041 and /F001 ***

[[(\021>@8A) [/F041 13.228]][( ) [/F001 13.228]][(\025;LF8=) [/F041 13.228]]] 68.031 692.598 232.441 720.945 sl
[[(7.00) [/F001 13.228]]] 238.11 692.598 328.819 720.945 sc
[
[(?>) [/F041 13.228]][(-) [/F001 13.228]][(?LO=5) [/F041 13.228]][( ) [/F001 13.228]][(@0A?@>40;) [/F041 13.228]]] 337.323 706.772 459.213 719.055 sl
[[( >AA8N) [/F041 13.228]]] 337.323 694.488 459.213 706.772 sl
[[(Tash-Tyurma) [/F001 13.228]]] 464.882 692.598 563.15 720.945 sl
[] 0 setdash
0.283 setlinewidth
2 setlinecap
initclip [ -910.866 1665.827 2418.898 -1918.11] rectclip
newpath 34.016 692.598 moveto 34.016 720.945 lineto stroke
[] 0 setdash
2 setlinecap
newpath 62.362 692.598 moveto 62.362 720.945 lineto stroke
[] 0 setdash
2 setlinecap
newpath 232.441 692.598 moveto 232.441 720.945 lineto stroke
[] 0 setdash
2 setlinecap
newpath 331.654 692.598 moveto 331.654 720.945 lineto stroke
[] 0 setdash
2 setlinecap
newpath 459.213 692.598 moveto 459.213 720.945 lineto stroke
[] 0 setdash
0.567 setlinewidth
2 setlinecap
newpath 34.016 692.598 moveto 34.016 720.945 lineto stroke
[] 0 setdash
2 setlinecap
newpath 563.15 692.598 moveto 563.15 720.945 lineto stroke
[] 0 setdash
0.283 setlinewidth
2 setlinecap
newpath 34.016 692.598 moveto 563.15 692.598 lineto stroke
[/F000 13.228] sf
initclip [ 34.016 692.598 529.134 -23.622] rectclip
[[() [/F000 13.228]]] 34.016 668.976 62.362 692.598 sl
[[(The average term :) [/F000 13.228]]] 62.362 668.976 232.441 692.598 sr
[[(53.00) [/F000 13.228]]] 232.441 668.976 331.654 692.598 sc
[[() [/F000 13.228]]] 331.654 668.976 459.213 692.598 sl
[[() [/F000 13.228]]] 459.213 668.976 563.15 692.598 sl
[] 0 setdash
0.567 setlinewidth
2 setlinecap
initclip [ -910.866 1637.48 2418.898 -1913.386] rectclip
newpath 34.016 668.976 moveto 34.016 692.598 lineto stroke
[] 0 setdash
2 setlinecap
newpath 563.15 668.976 moveto 563.15 692.598 lineto stroke
[] 0 setdash
2 setlinecap
newpath 34.016 692.598 moveto 563.15 692.598 lineto stroke
[] 0 setdash
2 setlinecap
newpath 34.016 668.976 moveto 563.15 668.976 lineto stroke
[/F001 13.228] sf
initclip [ 34.016 668.976 529.134 -33.071] rectclip
[[(Prepared by) [/F001 13.228]]] 34.016 635.906 130.394 659.528 sr
[[() [/F001 13.228]]] 133.228 635.906 243.78 659.528 sl
[[() [/F001 13.228]]] 246.614 635.906 560.315 659.528 sl
[] 0 setdash
0.567 setlinewidth
2 setlinecap
initclip [ -910.866 1613.858 2418.898 -1922.835] rectclip
newpath 133.228 635.906 moveto 246.614 635.906 lineto stroke
initclip [ 430.866 651.969 97.323 -16.063] rectclip
[[(14.01.2008  22:58) [/F001 13.228]]] 430.866 635.906 528.189 651.969 sl
showpage
%%Trailer
%%Pages: 1
%%EOF

Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5752
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Сообщение Alexander » 15.01.2008 00:20:29

Уууууууууууууууух...
Аватара пользователя
Alexander
энтузиаст
 
Сообщения: 698
Зарегистрирован: 18.12.2005 19:10:00
Откуда: оттуда

Сообщение Lisolog » 15.01.2008 20:19:52

alexs писал(а):также обрати внимание на функцию
Код: Выделить всё
function TPostScriptPrinterCanvas.MappedFontName: string;


Проверил:
шрифт в системе называется Times New Roman, также и указываетя в printer.font.name.
Кстати для русского чарсета (.font.charset) код 204?
Соответственно согласно этой функции всё нормально - должно использоваться и используется, т.к. по сравнению с дефолтовым шрифт визуально отличается и похож на Times, однакокраказябы остаются.
Lisolog
новенький
 
Сообщения: 39
Зарегистрирован: 13.12.2007 14:24:08
Откуда: Russia, SPb

Сообщение alexs » 15.01.2008 20:29:20

а в fontmap.gs как русский шрифт называется?
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Сообщение debi12345 » 15.01.2008 23:08:44

alexs писал(а):а в fontmap.gs как русский шрифт называется?

Ситуация такова :

1) "fontconfig" (Иксовый хэлпер ) вытаскивает из шрифта его имя, например "Times New Roman", вес = Bold и наклон = Italic. Копируя работу "fontconfig" ( уже для PS ), вес и наклон лучше определять не по названиям, а по числовым значениям (так поступает прилагаемый выше скрипт)

2) если Иксы настроены на FreeType, то шрифты из "1)" становятся доступны в Иксах, лучше всего передавать шрифты через сервер TrueType-шрифтов XFS-TT (детали описаны в туториале к MSEgui)

3) так как позиции и размеры текста в GUI-программах рассчитываются через метрики шрифтов, доступных в Иксах, то логично, что для соответствия "что вижу на экране" (Х-шрифты) и "на бумаге" (PS-шрифты) - что для каждого распечатываемого Х-шрифта должен быть один и только один PS-шрифт, и этот шрифт должен быть представлен одним и тем же файлом на диске.
Как достичь этой жесткой увязки ? Просто выработать однозначную систему переименования X-to-PS имен. Например, MSEgui-программы используют систему:

"name with spaces as read by FONTCONFIG[-Bold[Italic]]",

в "Fontmap.gs" имена с пробелами заключаются в круглые скобки, вроде "(Times New Roman-BoldItalic)", причем если скобки есть в "Fontmap.GS", они же должнs быть и в PS-задании на печать.

ЗЫ:

1) GhostScript ненадежно находит шрифты в каталогах, отличных от его родных (даже если ему прямо указать точный путь). Поэтому надежнее всего создать линки на новые шрифы в одном из его родных каталогов

2) "хитрости" вроде "чарсет 204" если и помогут, то только в вынь32 - потому что имеют смысл только для GDI-печати (средствами Вынь32, а не PS )

3) после того, как сумели сопоставить Х- и PS-имена шрифтов (забить правильные названия и алиасы "в Fontmap.gs"), чтобы печатать по русски в Линук-GUI, нужно убедиться, что файл используемого шрифта представляет собой одно из :

3.1) русский PS-шрифт (*.pfa/b -файл) из 256 символов в кодировке ( ограничение формата PF*-шрифтов ), используемой в Иксах ( например - koi8 )
( а как печатать из OpenOffice документ в кодировке вынь1251 ? - негибко, короче ), и обычно именно здесь возникает проблема "кракозябров" - потому что названия "(Times)", "/Times " и т.п. обычно приписаны к латинским шрифтам (с латинскими дополн. символами на месте русских букв ), а русские шрифты, если и прописываются, то с суффиксами вроде "/TimesCYR". Если в PS-задании на печать явно не указать PS-шрифт с русским суффиксом (или ссылка на латинский шрифт заменена ссылкой на русский, или латинский файл заменен русским), то будет выбран латинский - и будут кракозябры.
Короче, вариант "3.1)" считают крайне негибким и устаревшим, да вообще дискриминацией "не-латинцев" :)
Где взять русские шрифты в кодировке "koi8" ? Либо найти в инете, либо сгенерировать самим из TrueType-шрифтов - утиллитой "ttf2pt1" (входит в линукс-дистрибутивы )

3.2) TTF-шрифт, содержащий русские символы в том числе - с последующей генерацией ( внутри самого PS-задания на печать ) виртуальных 256-символьных шрифтов, каждый из которых отражает (через "encoding vector" ) некий класс символов (латинские, псевдографику, математические, русские, арабские, подгруппы китайских...),
при печати символа (0..255), принадлежащего одному их этих классов, просто выбирается (не автоматически, а при создании PS-задания печати!) соответсвующий виртуальный шрифт.

"Encoding vector" = карта соответствия "код символа (0..255) в виртуальном шрифте" к названию литеры согласно сиcтеме именования "Adobe" (русские символы, как правило - afiiXXXXX), эти имена видны в редакторах шрифтов типа FontForge.

От себя добавлю, что эта схема - прекрасно работает ( в генераторе отчетов MSEgui), и даже позволяет печатать вперемешку все эти классы символов ( лишь бы литеры были в TTF-шрифте ), таблицы и картинки (и серые, и в цвете).

Минус варианта "3.2)" - он легко реализуем, если ваша программа работает в юникоде (например - MSE*), в Лазарусе же это может потребовать несколько перекодировок (ANSI-2-OEM/X) с возможной потерей части символов (например - кодировка вынь1251 не имеет псевдографики, а koi8-кодировка не имеет символа "Евро" ).

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

Сообщение Lisolog » 16.01.2008 16:12:36

В Fontmap.GS всё есть и шрифты цепляются, скорее всего придется куда-то перекодить.
Показываю, что получается на выходе при следующем коде:
Код: Выделить всё
   printer.begindoc;
    printer.canvas.font.name:='sansertif';
  //  printer.canvas.Font.CharSet:=cleaner.font.charset;
    printer.canvas.Font.size:=12;
    printer.canvas.MoveTo(0,0);
    printer.canvas.LineTo(shir,0);
  // UTF-8
    printer.canvas.textout(0,2,'abcdefgh_абвгдежз_1234567890');
  // 1251
    printer.canvas.textout(0,15,'abcdefgh_AÃŅLJ_1234567890');
    printer.canvas.font.name:='times';
  // UTF-8
    printer.canvas.textout(0,50,'abcdefgh_абвгдежз_1234567890');
  // 1251
    printer.canvas.textout(0,65,'abcdefgh_AÃŅLJ_1234567890');
    printer.canvas.font.name:='courier';
   // UTF-8
    printer.canvas.textout(0,100,'abcdefgh_абвгдежз_1234567890');
  // 1251
    printer.canvas.textout(0,115,'abcdefgh_AÃŅLJ_1234567890');

Изображение
http://radionw.ru/temp/cod.jpg
Как видно, шрифты понимаются, Bold, Italic - тоже.
Системная - UTF-8
Понимаю, что гдето сопоставление не то.. куда дальше копнуть?
(заранее извиняюсь если очевидно туплю)
ЗЫж во всех строчках написано: abcdefgh_абвгдежз_1234567890
ЗЫ2ж к сожалению не копал в сторону MSE
Lisolog
новенький
 
Сообщения: 39
Зарегистрирован: 13.12.2007 14:24:08
Откуда: Russia, SPb

Сообщение debi12345 » 16.01.2008 16:52:37

Системная - UTF-8
===========
Напечатайте в PS-файл одну короткую русскую строчку и выложите здесь содержимое получившегося файла.
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5752
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Сообщение debi12345 » 16.01.2008 18:08:41

99% у вас фонт латинский. То есть в нем нет русских литер...
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5752
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Сообщение Lisolog » 16.01.2008 18:16:29

debi12345 писал(а):Системная - UTF-8
===========
Напечатайте в PS-файл одну короткую русскую строчку и выложите здесь содержимое получившегося файла.


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

Пред.След.

Вернуться в Lazarus

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

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

Рейтинг@Mail.ru
cron