2015-09-07 6 views
1

В моем файле postscript содержатся специальные символы для печати. Я пробовал кодирование шрифта Helvetica следующим образом. Но все-таки это не работает.Как кодировать шрифт для использования кодировки CP1252 (Windows-1252) в постскриптуме?

/WinEncoding 
[ 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /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 
    /.notdef 
    /.notdef 
    /.notdef 
    /quotesinglbase 
    /florin 
    /quotedblbase 
    /ellipsis 
    /dagger 
    /daggerdbl 
    /circumflex 
    /perthousand 
    /Scaron 
    /guilsinglleft 
    /OE 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /quoteleft 
    /quoteright 
    /quotedblleft 
    /quotedblright 
    /bullet 
    /endash 
    /emdash 
    /tilde 
    /trademark 
    /scaron 
    /guilsinglright 
    /oe 
    /dotlessi 
    /.notdef 
    /Ydieresis 
    /.notdef 
    /exclamdown 
    /cent 
    /sterling 
    /currency 
    /yen 
    /brokenbar 
    /section 
    /dieresis 
    /copyright 
    /ordfeminine 
    /guillemotleft 
    /logicalnot 
    /guilsinglright 
    /registered 
    /macron 
    /ring 
    /plusminus 
    /twosuperior 
    /threesuperior 
    /acute 
    /mu 
    /paragraph 
    /periodcentered 
    /cedilla 
    /onesuperior 
    /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 

% This procedure/function re encodes the copy of old font with win encoding 
% and saves it with a newname 
/reencodefont   % /NewName /OldName => <<fdict>> 
{ 
     findfont dup 
     length dict copy 

     %dup /CharStrings get /aacute known 
     %{ dup /Encoding WinEncoding put } if 
     dup /Encoding WinEncoding put 
     definefont 
} bind def 


% Re-Encode Fonts to use Win-Encoding: 

/Helvetica-Win /Helvetica reencodefont 
/Helvetica-Bold-Win /Helvetica-Bold reencodefont 


100 500 moveto 
(this Menӳ text) show 

Это не печатает aacute (0x92) характер и другое присутствует в кодировке CP1252. Моя цель - распечатать некоторые специальные символы в наборе окон. Кто-нибудь знает?

+0

0x92 не aacute в cp1252, то U + 2019, "Право одного кавычки". Не покрывается Postscript. –

ответ

2

Существуют значительные проблемы с программой PostScript выше.

Во-первых, нет оператора showpage, поэтому текст не нарисован.

Во-вторых там не используется оператор SetFont/selectfont, поэтому программа использует шрифт по умолчанию, если это должно произойти, чтобы быть Helvetica, то это не будет ясно, что это не ожидаемый шрифт .....

Процедура «reencodefont» оставляет копию словаря шрифтов для перекодированного шрифта в стеке операндов, что приводит к двум сиротским словарям в стеке в конце программы. Это не является незаконным, но его, безусловно, плохой практикой.

Массив кодировки называется WinEncoding, который выглядит как WinAnsiEncoding, это, насколько я могу судить, не имеет никакого отношения к кодовой странице 1252. Если мы посмотрим на массив WinEncoding, мы увидим, что/aacute находится в индексе 225 в массиве. Почему вы думаете, что это приведет к символьному коду 0x92 (decimal 146), создающему aacute?

В индексе 146 массива WinEncoding мы видим имя/quoteright, и это то, что я получаю, когда использую код символа 0x92. Обратите внимание, что использование символьного кода, особенно форма верхнего набора ASCII, как и в вашей строке, может привести к ошибкам, особенно при вставке на такой сайт, как Stack Overflow.

Вот исправленная версия вашей программы:

%! 
/WinEncoding 
[ 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /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 
    /.notdef 
    /.notdef 
    /.notdef 
    /quotesinglbase 
    /florin 
    /quotedblbase 
    /ellipsis 
    /dagger 
    /daggerdbl 
    /circumflex 
    /perthousand 
    /Scaron 
    /guilsinglleft 
    /OE 
    /.notdef 
    /.notdef 
    /.notdef 
    /.notdef 
    /quoteleft 
    /quoteright 
    /quotedblleft 
    /quotedblright 
    /bullet 
    /endash 
    /emdash 
    /tilde 
    /trademark 
    /scaron 
    /guilsinglright 
    /oe 
    /dotlessi 
    /.notdef 
    /Ydieresis 
    /.notdef 
    /exclamdown 
    /cent 
    /sterling 
    /currency 
    /yen 
    /brokenbar 
    /section 
    /dieresis 
    /copyright 
    /ordfeminine 
    /guillemotleft 
    /logicalnot 
    /guilsinglright 
    /registered 
    /macron 
    /ring 
    /plusminus 
    /twosuperior 
    /threesuperior 
    /acute 
    /mu 
    /paragraph 
    /periodcentered 
    /cedilla 
    /onesuperior 
    /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 

% This procedure/function re encodes the copy of old font with win encoding 
% and saves it with a newname 
/reencodefont   % /NewName /OldName => <<fdict>> 
{ 
     findfont dup 
     length dict copy 

     %dup /CharStrings get /aacute known 
     %{ dup /Encoding WinEncoding put } if 
     dup /Encoding WinEncoding put 
     definefont 
} bind def 


% Re-Encode Fonts to use Win-Encoding: 

/Helvetica-Win /Helvetica reencodefont 
30 scalefont setfont 

%/Helvetica-Bold-Win /Helvetica-Bold reencodefont 

100 500 moveto 
(this Men) show <E192> show (text) show 

showpage