【发布时间】:2012-07-19 17:54:50
【问题描述】:
我试图解决这个问题将近 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 或其他方法吗?
最好的问候, 最大
【问题讨论】:
-
要获取 Drawing.Image,您可以查看此示例:ghostscriptnet.codeplex.com/SourceControl/…
-
这是几年后的事了……你能弄清楚
Drawing.Image路线吗? -
@B.K.可悲的是没有 - 但今天可能有更好的方法
-
@Max 我已经找了好几个月了,但我还没有找到一个不涉及在客户端机器上安装东西的解决方案......在我的情况下这不是一个选项.