我已经尝试解决这个问题将近 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 吗?
最好的问候, 最大
最佳答案
我能找到的最灵活、最简单和性能最好的方法是使用 GhostScript。它可以直接通过打印机名称打印到windows打印机。
"C:\Program Files\gs\gs9.07\bin\gswin64c.exe" -dPrinted -dBATCH -dNOPAUSE -sDEVICE=mswinpr2 -dNoCancel -sOutputFile="%printer%printer name" "pdfdocument.pdf"
添加这些开关以将文档缩小到 A4 页面。
-sPAPERSIZE=a4 -dPDFFitPage
关于c# - 如何使用 C# 打印 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11579624/