The Goal
我工作的公司目前使用黑箱运输系统。每天早上,我们的货运经理都会为他的司机打印出船票。使用c#,我想保存打印为PDF格式的每张票的副本。保存为PDF的操作应该在后台完成。
注: PDF副本将在硬拷贝之外生成,但是,我希望在打印硬拷贝时生成PDF副本(或者直接在我可以使用保存的打印作业之后)。
最终结果:经理打印一份硬拷贝,PDF被保存到存档文件夹,而不需要与经理进行任何交互。
What I've try
我已经指示打印机打印后"保留打印的文件"。这将在print spool文件夹中留下一个.shd和一个.spl文件。我已经尝试过PrintDocument
类,但是我找不到使用已完成的打印作业指示作业重新打印(到PDF驱动程序)的方法。
我想要完成的是可能的吗?
进一步澄清:
如果不清楚,我不希望管理器将文档第二次打印到PDF打印驱动程序。平均而言,他每天早上必须打印60张票,才能让司机出门。我不想把这个数字增加到120并且强迫他输入文件名。
此外,"黑匣子"运输系统包括运行我们制造工厂其他部分的其他模块-更改软件不是选项。
我建议您使用现有的解决方案来解决此类问题:使用可以安装虚拟打印机的软件,在您需要的打印机上打印文档。PrintDistributor就是这样一款软件。我没有使用这个软件的任何经验,但是名为"虚拟打印机"的屏幕截图看起来很有希望:第二台打印机名为"打印并保存"。
还有其他类似的软件,请看这里
根据您不想强迫他输入文件名的目标,您应该这样做:
使用提供自动文件命名的PDF Printer软件,如:
PDF的桌子
可爱PDF
告诉经理用PDF打印机打印票。
然后,编写一个c#或vb.net应用程序。使用FileSystemWatcher来检测是否在pdf目录中创建了新文件。当创建一个新的PDF文件时,打印它。
这里有一些教程,解释了如何用c#打印PDF文件:
用c#打印现有的PDF(或其他文件)
用c#打印PDF文档
捕捉发送给打印机的东西是非常棘手的。
一个更简单的方法是使用一个软件来设置一个"pdf打印机",比如:http://www.bullzip.com/products/pdf/info.php
将其配置为输出到特定目录,然后编写一个windows服务来监视该目录,并自动将PDF文件发送到物理打印机并将文件归档到网络文件夹。
[并从他的电脑上删除打印机驱动程序,这样他就不能绕过你的新系统]
发出两个打印命令…一个给纸质打印机,一个给PDF打印机。