我试图解决这个问题将近 2 天。网上有很多或多或少的好解决方案,但没有一个完全适合我的任务。
任务:
- 以编程方式打印 PDF
- 用固定打印机做
- 不要让用户做多个 Button_Click
- 默默地做——越多越好
- 做客户端
第一个解决方案:
使用 Forms.WebBrowser 进行操作
如果我们安装了 Adobe Reader,有一个插件可以在网络浏览器中显示 PDF。使用这个解决方案,我们有一个很好的预览,并且使用 webbrowserControlName.Print() 我们可以触发控件来打印它的内容。
问题 - 我们还有一个 PrintDialog。
使用启动参数启动 AcroRd32.exe
下面的 CMD 命令让我们使用 Adobe Reader 来打印我们的 PDF。
InsertPathTo..\AcroRd32.exe /t "C:\sample.pdf" "\printerNetwork\printerName"
问题 - 我们需要 AcroRd32.exe 的绝对路径 | 有一个 Adobe Reader 窗口打开,必须打开它,直到打印任务准备好。
使用 Windows 预设
Process process = new Process();
process.StartInfo.FileName = pathToPdf;
process.StartInfo.Verb = "printto";
process.StartInfo.Arguments = "\"" + printerName + "\"";
process.Start();
process.WaitForInputIdle();
process.Kill();
问题 - 仍然会弹出一个 Adobe Reader 窗口,但打印完成后它通常会自行关闭。
解决方案 - 说服客户使用 Foxit Reader(不要使用最后两行代码)。
将 PDF 页面转换为 Drawing.Image
我不知道如何用代码来做,但是当我让它工作时,剩下的只是小菜一碟。Printing.PrintDocument 可以满足所有需求。
任何人都想从这些 PDF 中获得一些 Drawing.Image 或其他方法如何做到这一点?
最好的问候, 马克斯