使用PHP代码将PJL命令添加到PDF文件中

6
如何在不将PDF转换为PostScript的情况下插入PJL命令到PDF中?
*STARTPJL
@PJL SET STAPLE=LEFTTOP
*ENDPJL

我使用Zend_Pdf创建PDF文档,并通过FTP或LPR将其发送到打印机。

我曾尝试以下代码,但未成功

$a .= "<ESC>%-12345X@PJL<CR><LF>";
$a .= "@PJL SET OUTBIN=OUTBIN101<CR><LF>";
$a .= "@PJL SET STAPLE=LEFTTOP<CR><LF>";
$a .= "@PJL ENTER LANGUAGE = PDF<CR><LF>";
$a .= file_get_contents("/www/zendsvr/htdocs/GDA/public/pdf/test.pdf");
$a .= "<ESC>%-12345X";

$myfile = fopen("/www/zendsvr/htdocs/GDA/public/pdf/t.pdf", "w");
fwrite($myfile, $a);
fclose($myfile);

文档已正确打印,但未更改抽屉并且未夹紧,有什么建议吗?
1个回答

10

我不会解释如何使用PHP实现以下步骤。这些步骤仅解释了在处理基于PDF的打印作业时需要熟悉的最重要的基础知识。您必须自己将此通用信息“翻译”为PHP...


您不能将PJL命令插入到PDF中。但是,您可以在PDF打印作业之前预置PJL命令。

此外,如果您通过FTP或LPR将文件发送到打印机后再进行这些操作,则没有意义。只有在发送文件之前进行操作才有意义。

接下来,您的示例PJL代码对大多数目的无效。将PJL行添加到PDF打印作业文件的标准方法如下:

<ESC>%-12345X@PJL<CR><LF>
@PJL SET STAPLE=LEFTTOP<CR><LF>
@PJL    [... more PJL commands if required ...]
@PJL ENTER LANGUAGE = PDF<CR><LF>
[... all bytes of the PDF file, starting with '%PDF-1.' ...]
[... all bytes of the PDF file ............................]
[... all bytes of the PDF file ............................]
[... all bytes of the PDF file, ending with '%%EOF' .......]
<ESC>%-12345X

解释:

  • 这里的<ESC>表示转义字符(十进制为27,十六进制为1B)。
  • <CR>表示回车符(十进制为13,十六进制为0D),在PJL中是可选的。
  • <LF>表示换行符(十进制为10,十六进制为0A),在PJL中是必需的。
  • <ESC>%-12345X表示“通用退出语言”命令(UEL)。在PJL中是必需的,它定义了基于PJL的任何数据流的开头和结尾。

最后,请注意:

  1. 并非所有打印机和不是所有的LPR打印服务都能处理基于PDF格式的打印作业。

  2. 此外,并非所有打印机和所有的LPR打印服务都能识别预置于打印作业文件之前的PJL命令。


谢谢你的回答,当你说“prepend”时,你是指我可以将它放在一个文件中发送到打印机,还是可以将命令作为指令发送到协议? - jack.cap.rooney
如果打印机支持的话,应该将其放在一个文件中! - Kurt Pfeifle
1
@jack.cap.rooney:我的答案是正确的(几乎完整)。它仍然应该教会你一些东西。因为你在问题中使用的示例代码是错误的。此外,你的打印机可能不支持 PJL,也可能不支持 DirectPDF 打印。 - Kurt Pfeifle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接