我正在尝试理解我使用打印机以编程方式进行通信的选项,以便从应用程序软件中打印出来。换句话说,当用户告诉我的应用程序他们想要打印某些内容时会发生什么。我理解它在“旧时代”的运作方式,并试图了解更复杂的现代世界。
在过去,有两种主要类型的打印机:HP打印机,它们了解HPGL和Postscript打印机。因此,您可以使用这两种语言之一发送打印件,打印机会将您的代码转换为页面上的点。您还可以将位图嵌入为二进制数据。例如,在HPGL(或PCL)中,您可以给出一个基本上说“请打印此位图,这里是栅格数据”的命令,然后是一个巨大的二进制数据块。显然,如果你这样做,进入打印机的数据量会更多,并且可能会阻塞打印机。 Postscript具有相同的能力。如果您打印文本,您可以告诉打印机在字体TimesNewRoman(或其他)中打印文本“xyz”,打印机将为您计算所有点(这意味着打印机必须知道字体,或者您必须下载提前打印机的字体。)
现在,据我了解PDF格式,它类似于Postscript,但它不是像Postscript这样的语言,只能包含“对象”。因此,例如,在Postscript中,您可以制作一个循环并说“打印此圆圈50,000次”,移动其确切位置。在PDF中,我的理解是你不能这样做,你必须将每个圆圈指定为一个单独的“对象”。
那么,现代打印机如何工作?我还可以将HPGL / PCL发送到打印机吗?所有打印机现在都标准化了Postscript吗?如果是这样,这是否意味着我最好的选择是生成Postscript,然后将原始数据发送到打印机?如果我发送Postscript,我是否必须以某种方式告诉打印机它是Postscript?
在Windows中,我知道打印的“标准”方式,即查询设备功能和请求设备上下文,然后您可以使用该上下文的Windows调用绘制线条,形状和文本。然而,与Postscript(或HPGL / PCL)相比,这显然非常原始。有没有办法可以直接与打印机驱动程序通信,或告诉Windows:“这是我的Postscript代码,请将其传递给打印机进行打印”?
答案 0 :(得分:13)
'因此,例如,在Postscript中你可以制作一个循环并说“打印这个圆圈50,000次”,移动它的确切位置。在PDF格式中,我的理解是你不能这样做,你必须将每个圆圈指定为一个单独的“对象”。'
实际上,事实是你所描述的两个极端之间的中间地位。
这是真的:与PostScript不同,PDF不是一种编程语言(更不用说Turing-complete),而且你不能定义“循环”。
但是, 不 必须分别指定每个圆圈(或嵌入图像或其他图形对象)。您可以很好地定义如何绘制圆(或图像,或其他)一次,然后在页面的其他位置或PDF文档中重复使用该定义。这称为“引用对象”。当您重新使用对象时,您可以通过更改一些当前的“环境”定义(例如包含{{1的图形状态)来不同地设置其不同的属性(颜色,缩放,旋转) },当前转换矩阵)。
关于你的其他一些观点:
不,只有两种类型的打印机,HPGL和PostScript。
即使在过去,也有十几种不同的'打印机语言'。 PCL甚至比HPGL更受欢迎。不要忘记不同打印机语言的所有专有发明。曾经听说过 AFP ,高级功能打印?这种语言印刷 - 仍然打印! - 比PostScript更多的纸张。它不再是专有的,但它是由IBM发明的用于主机打印laaaarge可变数据的运行,主要用于计费目的......曾经听说过ESC / P? KPDL? XPS?
是的,您仍然可以将HPGL发送到打印机 - 但不是每台打印机。始终可以为至少一种您能够生成和发送的语言授权打印机。
是的,现在有些打印机型号可以直接使用PDF。但它们仍然不是主要类型。他们中的一些人“作弊”并且仍然将主要的内置解释器作为PostScript引擎:这些引用PDF并首先将其静默转换为PostScript。其他人可以处理PDF而不会回退到PostScript。
'在Windows中,我知道打印的“标准”方式,即查询设备功能并请求设备上下文,然后您可以在该上下文中使用Windows调用绘制线条,形状和文本。 / em>的
不要假设术语“设备上下文”确实意味着Windows直接与打印机硬件通信以查询功能并请求设备上下文。有时它会,有时不会。它总是依赖于一些称为“打印机驱动程序”的软件(它还控制打印数据的打印机语言应转换为)。打印机驱动程序可能能够查询设备并询问“您是否有双工器设备?您有装订设备吗?”然后生成所需的设备上下文本身为了这份工作。
只有一种非常现代的方法 IPP Everywhere ,由'Printer Working Group'开发,才能摆脱大部分内容旧的特定型号的打印机驱动程序必须这样做,并且在“无人驾驶”确定要传递给物理设备的确切打印数据之前,将开始主要依赖设备的直接询问。
但IPP Everywhere尚未广泛流行,既不是供应商,也不是管理员,也不是用户。但是,一旦PC被遗忘,95%的计算设备将成为超级移动设备......
答案 1 :(得分:0)
我认为pdf作为编译的postscript基本上是相同的东西,如果不是相同的东西只有一个被编译成二进制blob而另一个是ascii。
不是并非所有的打印机都会使用postscript,谢天谢地,当你可以免费在计算机上运行并使用更少的资源和更快的打印时,他们往往会收取额外费用。 (或在廉价的假脱机上)
PCL在非惠普打印机以及惠普上非常普遍。但没有普遍的答案。你仍然需要逐个打印机,看看哪个支持和/或购买了什么作为添加,然后从该列表中管理员启用了什么。当然,无论什么语言的版本都会说话。
这就是CUPS的全部意义所在。一种抽象和隐藏这些细节的方法。
答案 2 :(得分:-3)
在Windows环境中,常见格式为WMF。 Windows Meta文件。 WMF是矢量和位图的组合。
WMF格式由MS制作,用于Windows GDI恢复图像。 WMF文件包含重建图像所需的所有内容,因此可以将它们转换为任何其他图形格式。
打印机制造商通常会创建自己的打印机命令集。他们可能选择采用事实标准并与专利/版权所有者达成协议。
如果您制作Postscript打印机,您的潜水员会将WMF转换为Postscript。
Windows应用程序通过Windows GDI API创建元数据(WMF),由打印机制造商编写的Windows驱动程序将WMF转换为自己的打印机命令。
微软,一年前昨天(2014年5月15日),将WMF规范发布到公共领域:Windows Metafile Format PDF
当您拥有打印机正确解释的“Raw”(例如Postscript,HPGL)数据时,您必须绕过制造商驱动程序。
要绕过打印机的驱动程序,请使用Generic / Text Only驱动程序。
这消除了图片中的驱动程序,然后您可以发送“原始数据”。
然后,您必须发送驱动程序生成的所有代码,以使您的工作更轻松。
答案 3 :(得分:-3)
如果要完全自动化打印过程,请安装FolderMill(http://www.foldermill.com/)。该程序自动将打印文档转换为所需格式,选择免费打印机并生成打印作业。