Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Printing 使用gsprint使用PJL命令打印PostScript文件时出现问题_Printing_Ghostscript_Pjl - Fatal编程技术网

Printing 使用gsprint使用PJL命令打印PostScript文件时出现问题

Printing 使用gsprint使用PJL命令打印PostScript文件时出现问题,printing,ghostscript,pjl,Printing,Ghostscript,Pjl,我们开发了一个内部打印解决方案,允许用户管理其打印(审核/合并/审阅/发送到多个打印机)等。。。但我们在过程的最后阶段——最终的印刷品上遇到了问题 目前,我们的解决方案将文档(原始文档和合并后文档)存储在PDF中。我们需要能够将这些文档发送到特定的打印机,并在某些情况下(当用户选择该选项时)将第1页打印到纸盘8,将其余的打印到纸盘1。我们不能拆分PDF并单独打印,因为它们还必须作为单个作业由打印机装订 我们的想法是使用ghostscript将PDF文件转换为PostScript文件,然后将PJL

我们开发了一个内部打印解决方案,允许用户管理其打印(审核/合并/审阅/发送到多个打印机)等。。。但我们在过程的最后阶段——最终的印刷品上遇到了问题

目前,我们的解决方案将文档(原始文档和合并后文档)存储在PDF中。我们需要能够将这些文档发送到特定的打印机,并在某些情况下(当用户选择该选项时)将第1页打印到纸盘8,将其余的打印到纸盘1。我们不能拆分PDF并单独打印,因为它们还必须作为单个作业由打印机装订

我们的想法是使用ghostscript将PDF文件转换为PostScript文件,然后将PJL命令插入PostScript,然后使用gsprint打印修改后的PostScript文件

不幸的是,ghostscript、postscript、PJL和gsprint的组合似乎不起作用。我们尝试的PJL命令可以在通过windows copy命令发送到打印机的文本文件中使用,但在放入PostScript文件并使用gsprint打印时,似乎没有相同的效果

有谁能发现我们对PostScript所做的工作中存在任何可怕的缺陷,或者知道为什么PostScript->PJL amends->gsprint工作流可能无法工作

很难在网上找到示例,因此很可能PJL命令的位置不正确

(//注释不在最终文件中)

这一切都打印到默认纸盘且未打印,即所有这些都无法按预期工作

我希望我们正在努力实现的目标是明确的。任何帮助都将不胜感激

提前谢谢

PS:我们所有的打印机都是佳能打印机

编辑:

在KenS回答下面的问题后,逻辑工作流似乎应该改为PDF->PCL->add PJL->send to printer with“copy”

不幸的是,我们仍然有这个问题,某些PJL命令似乎被我们的打印机忽略了(打印机肯定是PCL打印机)

如果我们使用Microsoft Word生成的2页PDF,请使用ghostscript将其转换为PCL,然后使用记事本+编辑该PCL文件添加以下内容:

<ESC>%-12345X@PJL JOB NAME = "My Print Job Name"<CR><LF>
@PJL SET DUPLEX = ON
@PJL SET OUTBIN = LOWER
@PJL ENTER LANGUAGE = PCL
...original PCL data...
<ESC>%-12345X@PJL EOJ<CR><LF>
<ESC>%-12345X
%-12345X@PJL作业名称=“我的打印作业名称”
@PJL设置双工=打开
@PJL放线箱=较低
@PJL输入语言=PCL
…原始PCL数据。。。
%-12345X@PJLEOJ
%-12345X
文档从较低的输出托盘中取出,但未进行双面打印。但更奇怪的是,当DUPLEX=ON时,打印机似乎比DUPLEX=OFF时的打印时间要长得多,而且听起来它在内部做了一些不同的事情


有什么想法吗?

我想你误解了gsprint的运作方式。它获取输入文件,将其渲染为位图,在适当的画布上绘制该位图,然后使用Windows打印系统在打印机上打印该画布。它根本不控制打印机,因此嵌入任何预期控制打印机的内容(与渲染相反)都不会产生任何效果

此外,PJL与HP PCL打印机相关,而与PostScript打印机无关。Whil;e您的PJL可能在PCL打印机上工作,因为它将每个页面视为一个单独的作业,因此它在PostScript打印机上根本不工作,并且很可能导致它给您一个错误,这取决于解释器是否忽略PJL命令

为了控制打印机,您需要确定打印机支持哪种类型的输入(PostScript或PCL),然后需要将PDF转换为该格式,然后插入适当的控制序列。对于PCL打印机,您可以合理地使用PJL,对于PostScript打印机,您应该使用setpagdevice操作符来控制它。假设您的打印机有一个Windows.WPD或.PPD文件,可以在那里找到相关的控制序列,或者通过打印一些测试文件并检查它们的内容

顺便;您可以说,将文本文件发送到打印机时,正在使用的命令起作用。这意味着打印机至少了解PJL,几乎可以肯定是PCL打印机。无法将文本发送到PostScript打印机,它将生成错误,因为PostScript是一种编程语言,任何随机文本都会出现语法错误。但是,您可以将文本发送到PCL打印机,该打印机假定任何不以0x1B(转义)开头的内容都只是要打印的文本


因此,使用Ghostscript生成PCL输出,按照上面的方法插入PJL,然后将结果直接发送到打印机可能会起作用。当然,在PCL文件中识别每个页面的结尾可能更困难。

我们有类似的问题,这就是我们如何使用ghost脚本和PJL


此外,bfo.com还有一些商业jar,它们不用ghost脚本,以纯java的方式做同样的事情。但是你得付钱:)

啊,对了,那是有道理的。所以我认为gsprint已经过时了。我将用更多的想法更新我的问题。谢谢。实际上有很多不同的PostScript RIP接受PJL,它并不完全限于PCL打印机。事实上,PPD标准特别允许PostScript作业以任何JCL开头,包括PJL(请参见
JCLStart
JCLEnd
jcltopInterpreter
关键字)。PJL通常用作MFD的JCL(至少是那些没有专有PDL的)。我正在开发的MFD接受PJL封装的PostScript、PDF、PCL和TIFF。多语言设备将接受PJL是完全正确的,主要是因为它们接受PCL。然而,PJL不是PostScript规范的一部分。在我的回答中,我确实涵盖了我感觉到的各种可能性。双工可能是非标准的(通常是)。由于您使用的是Windows,您是否可以尝试将双面打印作业(如两张空白页)打印到打印机上,然后查看它们是否作为一张纸打印出来?如果
gsprint -noquery -ghostscript gswin32c -printer "printer" "C:\postscriptfile.ps"
<ESC>%-12345X@PJL JOB NAME = "My Print Job Name"<CR><LF>
@PJL SET DUPLEX = ON
@PJL SET OUTBIN = LOWER
@PJL ENTER LANGUAGE = PCL
...original PCL data...
<ESC>%-12345X@PJL EOJ<CR><LF>
<ESC>%-12345X