后记以将字体上传到打印机

时间:2018-11-26 19:54:40

标签: postscript printers

我需要安装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 MB。)

1 个答案:

答案 0 :(得分:1)

如果手动方式正在使用Windows打印驱动程序,则它们必须通过PostScript(或者,可能是PCL,但这不太可能)来完成。问题是没有永久性下载字体的真正标准。

您也没有提供所涉及打印机的详细信息。除非打印机具有某种非易失性存储,否则您将无法永久安装字体,一旦断电,字体将丢失,需要再次下载。

除非您在每个作业上都需要使用字体,否则将其安装在打印机上还是很浪费的(再次,除非它具有非易失性存储),因为它将永久使用40 MB的内存。这样可以减少40 MB的内存供其他打印作业使用,这可能会导致打印时间变慢和/或由于内存不足而导致打印失败。

要将字体安装到VM中直到下一个电源周期关闭,您需要退出作业服务器循环,这意味着您需要知道作业服务器密码。通常为0。

然后您执行serverdict begin 0 exitserver或(更好)true 0 startjob,然后定义字体。这将一直持续到下一个电源周期。

更需要下载到磁盘。为了将字体下载到磁盘,通常需要打开磁盘上的文件并将文件写入特定位置,通常为%disk0%/ fonts。当然,由于您的字体太大,很可能根本不是字体,而是CIDFont,这不是一回事。在这种情况下,通常将文件写入%disk0%/ CIDFonts。

您最好的解决方法是(可能)按照Windows的步骤操作,并准确找出发送到打印机的内容(如果需要,可以将文件后台处理到磁盘)。然后,您可以复制它。如果可以使文件假脱机正常工作,则可以捕获结果,然后将其传送到Linux,然后将该文件发送到打印机。假设您的打印机没有足够大的非易失性存储空间来容纳字体,则可以保留文件并将其重新启动后发送给打印机。

安排PostScript生成应用程序不嵌入字体可能更具挑战性。除非您对PostScript的制作有很好的控制,否则大多数应用程序都将在标准基本13面或136种字体之外嵌入任何内容,因为很难询问打印机以了解安装了什么字体。

[编辑]

我仍然建议您尝试捕获问题中引用的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,这是常规字体类型。具有TrueType轮廓的CIDFonts是2型CIDFonts。

顺便说一句,您是否考虑过向打印机制造商的支持部门寻求帮助?他们完全有可能采用自动化的方法来完成整个过程。

您还应该意识到,直接将内容写入打印机的硬盘可能会损坏您的打印机,并且您的制造商可能会认为这样做会导致保修失效。