2011-11-07 210 views
4

我们想拥有的主控文档(自动化邮件合并后)发送,以自动方式,以同时具有网络名称和内部IP分配我们的网络打印机的一个。无人值守打印网络打印机上打印文档

但这里的真正棘手的部分。当我们从工作站打印文档我们得到提示了“部门管理”对话框中输入项目代码,该文件是它会在打印前,所以财务部门可以做所有他们看中会计和计费的东西。

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

我不知道数据如何核算常见的是做打印作业时,因为这是我见过它的第一份工作。

这里是重要的细节:

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

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

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

我的团队已经决定执行代码,将调用一个可执行文件到每个文档转换为PCL,然后把生成的PCL和预置它与

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

然后,我们将采取生成的文件,并将其写入到打印机的后台打印,使打印机将处理它,并开始每个作业。

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

+0

我们是否应假定工作会计功能是由打印机驱动程序提供的,并且没有公共API可用? –

+0

是的,这个提示是由驱动程序直接强制执行的,但我想通信规范可能会通过这些信息可能是企业打印机的标准。虽然不确定,但提示本身直接来自驱动程序。 – WhiskeyTangoFoxtrot

+0

请添加一些截图以显示标准打印过程。 – hakre

回答

1

我的团队已经决定执行代码,将调用一个可执行文件到每个文档转换为PCL,然后把生成的PCL,并在前面加上其与

@PJL SET KJOBMANAGERCODE =“[项目代码在这里] “

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

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

1

我会做的是:

  • 创建一个C++/VB脚本,会做的辛勤工作(对不起没有从我的帮助)
    • 使它看起来成工作目录/接受CLI PARAMS
  • 使服务器PHP文件保存到某个目录中的一些信息
    • 说节省的1.txt沿(数量为你的内部COUN ter,并且必须是唯一的,并且每个新的必须比前一个更大)归档到/ path/infos中,具有类似这样的内容:1 c:\ temp \ filetoprint。DOCX
  • VB脚本将寻找到该目录,并阅读的第一个文件(一个最小号)
    • ,并认为它是部门管理ID = 1
    • 打印是在文件C:\ TEMP \ filetoprint.docx
    • 并打印出来:)
    • 删除文件(S)
(重要!)

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

PHP部分只有一个指向脚本的链接将JA ID和文件名保存到/ path/infos中的文件这是一种解决方法,但我认为在纯PHP中使用PHP扩展并不值得。

+0

我打算与我的团队对此进行审查,以确定其可行性。 – WhiskeyTangoFoxtrot

1

'工作会计'只是驱动器重新命名用户名/密码提示。

如果您提到了您用于托管PHP的操作系统以及您的用户在哪里遇到这些提示,这很有帮助 - 但我认为您很明显正在使用MSWindows。

简而言之,您需要绕过对话框 - 当前内置于您的打印机驱动程序中)。可以配置打印机驱动程序,也可以使用替代打印子系统,如Cups

+1

在做了更多的研究之后(例如,在一个测试文件中“打印到文件”),事实证明会计参数在PJL中是这样传递的: ** @PJL SET KJOBMANAGERCODE =“10017”** 其中10017是项目我选择的项目代码。 – WhiskeyTangoFoxtrot

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,谁拥有编码自己的连接来控制网络打印机的一个有趣的introductionary文章。但是,我会先从打印机上的计算机和网络打印机之间嗅探发送的流量开始,以便详细了解所涉及的确切命令 - 这应该可以通过基于PHP的套接字轻松实现协议。

+0

我可能不能使用基于CLI的EXE(通过php中的exec()调用)来生成带有PCL(PRN底部的二进制散列,在PJL参数下面)的.PRN文件,然后使用PHP在文件顶部写入PJL参数。然后将该PRN文件写入打印机队列? – WhiskeyTangoFoxtrot

+0

是的,这可能是可能的。你可以例如根据你的流量嗅探书写一个标题模板,并用真实的变量替换常见变量。这使得它比实现一个完整的PJL-API更容易,这对于你的问题来说会是一个矫枉过正的问题。不幸的是,我没有合适的打印机设置,因此我无法再帮助您。 – Lars