无人值守在网络打印机上打印文档

时间:2011-11-07 18:24:24

标签: php network-printers

我们正在尝试将主文档(在自动邮件发送后)以自动方式发送到我们的网络打印机之一,该网络打印机同时具有网络名称和内部IP。

但这是非常棘手的部分。当我们从工作站打印文档时,我们会通过“部门管理”对话框提示输入文档所用的项目代码,然后打印,这样财务部门就可以完成所有花哨的会计和计费工作。 / p>

那么,我们如何以编程方式将的作业会计参数发送到网络打印机?

我不确定在进行打印作业时会计数据是多么常见,因为这是我见过的第一份工作。

以下是重要的细节:

  • PHP 5(首选)
  • Windows Server(2003,我相信)
  • Kyocera KM-4050打印机(带静态IP)
  • 使用C ++和Visual Basic的一些经验

我们已经做了一些研究,但没有找到太多可行的解决方案,经过一番讨论,我们并不完全确定从哪里开始。不幸的是,似乎没有任何我们可以插入的API。

-----解决方案-----

我的团队决定实现代码,该代码将调用可执行文件将每个文档转换为PCL,然后采用生成的PCL并在其前面添加

@PJL SET KJOBMANAGERCODE="[project code here]"

然后我们将生成的文件写入打印机假脱机,打印机将处理它并开始每个作业。

谢谢大家的帮助。每个答案都激发了我们实施计划的某些部分。

4 个答案:

答案 0 :(得分:1)

我要做的是:

  • 创建一个C ++ / VB脚本,这样做会很辛苦(抱歉没有我的帮助)
    • 让它查看作业目录/接受CLI参数
  • 使服务器PHP将文件保存到某个目录以及一些信息
    • 说保存一个1.txt(数字是你的内部计数器,需要是唯一的,每个新的必须大于之前的那个)文件到/ path / infos里面有这样的东西:1 c:\ temp \ filetoprint.docx
  • VB脚本将查看该目录并读取第一个文件(编号最小的文件)
    • 并查看它是用于部门管理ID = 1
    • 要打印的文件位于c:\ temp \ filetoprint.docx
    • 并打印它:)
    • 删除文件(!important)

现在一切都取决于你的VB / C ++编程技巧:) BTW:另一种选择是将文件保存到目录,而不是使用exec()和CLI参数来实现VBScript / C ++。但是基于文件的解决方案更加强大,因为它是一种自然的队列,并且它还能抵抗打印程序的失败 - 只有在完成后才能删除作业。如果打印作业失败,它将在下次尝试。类比文件可以使用数据库完成,但我不确定从VB / C ++连接到DB是多么容易,所以文件系统是最好的后备;)

PHP部分只有一个脚本链接,可以将JA ID和文件名保存到/ path / infos /

中的文件

这是一种解决方案,但我不认为在纯PHP(使用PHP扩展)中这样做是值得的。

答案 1 :(得分:1)

'部门管理'只是重新命名用户名/密码提示的驱动程序。

如果您提到了用于托管PHP的操作系统以及用户体验这些提示的位置,那将会很有帮助 - 但我认为您使用MSWindows时非常明显。

简短回答是您需要绕过对话框 - 当前内置于打印机驱动程序中的对话框。可以配置打印机驱动程序,也可以使用其他打印子系统,例如Cups

答案 2 :(得分:1)

如果您希望它使用PHP,则传递PJL参数(会计所需)并不容易实现(当然是AFAIK)。但您可以使用套接字连接传递您喜欢的任何参数,以及要打印的相关文档。例如:

> @PJL INFO ID
@PJL INFO ID
"LASERJET 4000"
> @PJL INFO STATUS
@PJL INFO STATUS
CODE=10001
DISPLAY="Ready"
ONLINE=TRUE
> @PJL INFO PAGECOUNT
@PJL INFO PAGECOUNT
536225
> @PJL INFO MEMORY
@PJL INFO MEMORY
TOTAL=2526160
LARGEST=1204208

上面的例子来自IronGeek Blog,他有一篇关于编码自己的连接来控制网络打印机的有趣的介绍性文章。但是,我首先会在打印机上嗅探计算机和网络打印机之间的流量,以便更好地了解所涉及的确切命令 - 这应该可以通过PHP上的套接字连接轻松实现协议。

答案 3 :(得分:1)

我的团队决定实现代码,该代码将调用可执行文件将每个文档转换为PCL,然后采用生成的PCL并在其前面添加

@PJL SET KJOBMANAGERCODE =" [此处的项目代码]"

然后我们将生成的文件写入打印机假脱机,打印机将处理它并开始每个作业。

谢谢大家的帮助。每个答案都激发了我们实施计划的某些部分。