这是基本前提:
我的用户单击一些小控件,然后将一个PDF文件吐出到他的桌面。我可以通过某种方式将此文件发送到打印机队列,并打印到本地连接的打印机吗?
string filePath = "filepathisalreadysethere"; SendToPrinter(filePath); //Something like this?
他将多次执行此过程。对于教室中的每个学生,他必须打印一张小报告卡。因此,我为每个学生生成一个PDF,并且我想使打印过程自动化,而不是让用户生成pdf,打印,生成pdf,打印,生成pdf,打印。
关于如何处理此问题的任何建议?我在运行Windows Forms .NET 4的Windows XP上运行。
我发现了这个StackOverflow问题,其中可接受的答案表明:
创建文件后,可以通过命令行打印它们(可以使用在System.Diagnostics命名空间中找到的Command类)。
我将如何完成?
您可以告诉Acrobat Reader使用“打印”动词来打印文件(正如此处已经提到的那样)。之后,您还需要以编程方式关闭Acrobat Reader:
private void SendToPrinter() { ProcessStartInfo info = new ProcessStartInfo(); info.Verb = "print"; info.FileName = @"c:\output.pdf"; info.CreateNoWindow = true; info.WindowStyle = ProcessWindowStyle.Hidden; Process p = new Process(); p.StartInfo = info; p.Start(); p.WaitForInputIdle(); System.Threading.Thread.Sleep(3000); if (false == p.CloseMainWindow()) p.Kill(); }
这将打开Acrobat Reader,并告诉它将PDF发送到默认打印机,然后在三秒钟后关闭Acrobat。
如果您愿意随应用程序一起提供其他产品,则可以使用GhostScript(免费)或命令行PDF打印机,例如http://www.commandlinepdf.com/(商业)。
注意: 该示例代码在 当前注册的可打印PDF的应用程序中 打开 PDF ,这是大多数人机器上的Adobe Acrobat Reader。但是,他们可能使用其他PDF查看器,例如Foxit(http://www.foxitsoftware.com/pdf/reader/)。但是,示例代码仍应正常工作。