Постскриптум для загрузки шрифта на принтер - PullRequest
0 голосов
/ 26 ноября 2018

Мне нужно установить шрифт Postscript типа 42 (https://www.adobe.com/content/dam/acom/en/devnet/font/pdfs/5012.Type42_Spec.pdf) на некоторые принтеры Postscript (HP и Lexmark). Описаны ручные способы сделать это с помощью драйверов принтера для Windows, однако я делаю этов Linux и предпочел бы сделать это, отправив принтеру кусок Postscript (вместе со шрифтом). Может кто-нибудь предложить какой-нибудь Postscript сделать шрифт резидентным в принтере (я не хочу отправлять шрифт на принтер для каждогоработа ~ 40 МБ.)

1 Ответ

0 голосов
/ 27 ноября 2018

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

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

Если вы неМне нужен шрифт для каждого отдельного задания, его несколько расточительно устанавливать на принтере (опять же, если у него нет энергонезависимой памяти), потому что он будет использовать эти 40 МБ памяти постоянно.Это на 40 МБ меньше памяти для использования другими заданиями печати, что может привести к снижению времени печати и / или сбоям печати из-за недостатка памяти.

Чтобы установить шрифт в виртуальной машине до следующего цикла питания, необходимо выйти изЦикл сервера заданий, что означает, что вам нужно знать пароль сервера заданий.Обычно это 0.

Затем вы выполняете serverdict begin 0 exitserver или (лучше) true 0 startjob и затем определяете шрифт.Это будет продолжаться до следующего цикла питания.

Загрузка на диск более сложна.Чтобы загрузить шрифт на диск, вы обычно открываете файл на диске и записываете его в определенное место, часто% disk0% / fonts.Конечно, так как ваш шрифт очень большой, вполне возможно, что это вовсе не шрифт, а CIDFont, что не одно и то же.В этом случае вы обычно пишете файл в% disk0% / CIDFonts.

Лучше всего решить эту проблему (вероятно), следуя инструкциям для Windows, и выяснить, что именно отправляется на принтер (еслинеобходимо, намотав файл на диск).Вы можете скопировать это.Если вы можете заставить буферизацию файла работать, вы можете захватить результат, перенести его в Linux и просто отправить этот файл на принтер.Предполагая, что в ваших принтерах нет энергонезависимого хранилища, достаточно большого для хранения шрифта, вы можете сохранить файл и отправить его на принтер при перезагрузке.

Возможно, более сложной задачей является организация приложения, создающего PostScript, не 'вставлять шрифт.Если вы не обладаете хорошим контролем над созданием PostScript, большинство приложений будет встраивать что-либо за пределы стандартных базовых 13 граней или 136 шрифтов, потому что сложно опрашивать принтеры, чтобы выяснить, какие шрифты установлены.

[edit]

Я бы по-прежнему предлагал вам попытаться перехватить все, что написано драйверами Windows, на которые вы ссылались в этом вопросе.Расположение шрифтов на принтере PostScript не гарантировано, и я сильно подозреваю, что это будет отличаться от системы к системе.

Первое, что нужно сделать, это, вероятно, выяснить, какова дисковая схема принтеров,для этого вам понадобится программа PostScript, например:

%!
0 0 moveto
/Helvetica findfont 12 scalefont setfont

(/*)
{
  show
  currentpoint exch pop dup 780 gt {
    showpage
    0 0 moveto
  }{
    15 add 0 exch moveto
  }ifelse
}
256 string filenameforall

Внимание!Эта программа может потенциально выдавать много страниц вывода.

Оттуда вам нужно искать что-то вроде 'CIDFont', очень часто сохраняемое как что-то вроде '/ Resource / CIDFont'но может быть любое количество уровней каталогов вниз.

Затем вы можете открыть файл в этом каталоге, записать содержимое шрифта в этот файл и закрыть его, а затем перезапустить принтер.

Так что вам нужно будет сделать что-то вроде:

%!
/Dest (/Resource/CIDFont/MyFontname) (w) file def
/DataString 1024 string def

loop
{
  currentfile DataString readstring exch
  Dest DataString writestring
  not {
    Dest closefile
    exit
  } if
}

....
....
font goes in here
....
....

Вы, конечно, захотите проверить, доступен ли CIDFont впоследствии, так что:

%!
0 0 moveto
/Helvetica findfont 12 scalefont setfont

(/*)
{
  show
  currentpoint exch pop dup 780 gt {
    showpage
    0 0 moveto
  }{
    15 add 0 exch moveto
  }ifelse
}
256 string /CIDFont resourceforall

напечатаетвсе доступные CIDFonts.

Обратите внимание, что если ваш шрифт является CIDFont, то его тип не 42, это обычный тип Font.CIDFonts с контурами TrueType относятся к типу CIDFonts типа 2.

Кстати, вы не обращались за помощью в службу поддержки производителей принтеров?Вполне возможно, что у них есть автоматизированные средства для выполнения всей этой процедуры.

Вам также следует помнить, что запись материалов непосредственно на жесткий диск принтера может нанести вред вашему принтеру, и ваш производитель вполне может счесть это аннулированием гарантии.

...