一尘不染

如何将文件文档发送到打印机并进行打印?

c#

这是基本前提:

我的用户单击一些小控件,然后将一个PDF文件吐出到他的桌面。我可以通过某种方式将此文件发送到打印机队列,并打印到本地连接的打印机吗?

string filePath = "filepathisalreadysethere";
SendToPrinter(filePath); //Something like this?

他将多次执行此过程。对于教室中的每个学生,他必须打印一张小报告卡。因此,我为每个学生生成一个PDF,并且我想使打印过程自动化,而不是让用户生成pdf,打印,生成pdf,打印,生成pdf,打印。

关于如何处理此问题的任何建议?我在运行Windows Forms .NET 4的Windows XP上运行。

我发现了这个StackOverflow问题,其中可接受的答案表明:

创建文件后,可以通过命令行打印它们(可以使用在System.Diagnostics命名空间中找到的Command类)。

我将如何完成?


阅读 3997

收藏
2020-05-19

共1个答案

一尘不染

您可以告诉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/)。但是,示例代码仍应正常工作。

2020-05-19