4

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

但这是真正棘手的部分。当我们从我们的工作站打印文档时,我们确实会收到“作业会计”对话框的提示,以在打印之前输入该文档所针对的项目代码,这样财务部门就可以完成所有花哨的会计和计费工作。

那么,我们如何以编程方式将文档(docx)与作业统计参数一起发送到网络打印机?

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

以下是重要的细节:

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

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

- - - 解决方案 - - -

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

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

然后我们将生成的文件写入打印机假脱机,打印机将在其中处理它并启动每个作业。

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

4

4 回答 4

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 博客,该博客有一篇有趣的介绍性文章,介绍了如何编写您自己的连接以控制网络打印机。但是,我将首先在打印作业上嗅探您的计算机和网络打印机之间发送的流量,以更好地了解所涉及的确切命令 - 这应该使该协议可以通过 PHP 上的套接字连接轻松实现。

于 2011-11-18T09:29:04.440 回答
1

“作业记帐”只是将用户名/密码提示重新命名的驱动程序。

如果您提到您使用什么操作系统来托管 PHP 以及您的用户在哪里体验这些提示,那将会很有帮助 - 但我认为您在两者上都使用 MSWindows 是相当明显的。

简短的回答是您需要绕过对话框-(当前)内置在您的打印机驱动程序中)。可以配置打印机驱动程序,或者您可以使用替代打印子系统,例如Cups

于 2011-11-17T13:14:06.760 回答
1

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

@PJL SET KJOBMANAGERCODE="[这里的项目代码]"

然后我们将生成的文件写入打印机假脱机,打印机将在其中处理它并启动每个作业。

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

于 2011-11-19T06:06:18.840 回答
1

我会做的是:

  • 创建一个 C++/VB 脚本,可以完成艰苦的工作(对不起,我没有帮助)
    • 使其查看作业目录/接受 CLI 参数
  • 使服务器 PHP 将文件连同一些信息一起保存到某个目录中
    • 说保存一个 1.txt (数字是你的内部计数器,需要是唯一的,每个新的都必须大于以前的)文件到 /path/infos 里面有这样的东西:1 c:\temp\filetoprint.docx
  • VB 脚本将查看该目录并读取第一个文件(编号最小的文件)
    • 并看到它用于 Job Accounting ID = 1
    • 要打印的文件位于 c:\temp\filetoprint.docx
    • 并打印出来:)
    • 删除文件(!重要)

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

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

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

于 2011-11-12T21:05:21.500 回答