c# - 如何使用 C# 打印 PDF

标签 c# winforms pdf printing

我已经尝试解决这个问题将近 2 天了。网上有很多或多或少的好解决方案,但没有一个完全适合我的任务。

任务:

  • 以编程方式打印 PDF
  • 用固定打印机做
  • 不要让用户执行多个 Button_Click
  • 保持安静——越多越好
  • 做客户端

第一个解决方案:

使用 Forms.WebBrowser 实现

如果我们安装了 Adob​​e Reader,则有一个插件可以在网络浏览器中显示 PDF。通过这个解决方案,我们有一个很好的预览,并且通过 webbrowserControlName.Print() 我们可以触发控件打印它的内容。

问题 - 我们仍然有一个 PrintDialog。


使用启动参数启动 AcroRd32.exe

以下 CMD 命令让我们使用 Adob​​e Reader 打印我们的 PDF。

InsertPathTo..\AcroRd32.exe/t "C:\sample.pdf""\printerNetwork\printerName"

问题 - 我们需要 AcroRd32.exe 的绝对路径 |有一个 Adob​​e Reader 窗口打开,必须打开它,直到打印任务准备就绪。


使用 windows 预设

Process process = new Process();

process.StartInfo.FileName = pathToPdf; 
process.StartInfo.Verb = "printto";
process.StartInfo.Arguments = "\"" + printerName + "\""; 
process.Start();

process.WaitForInputIdle();
process.Kill();

问题 - 仍然弹出 Adob​​e 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/

相关文章:

c# - 宕机后如何发现redis up

c# - 一个按钮执行两个命令

c# - 禁用组框时如何更改组框中的字体颜色

c# - 滚动问题

c++ - 编码器的 PDF 规范 : Adobe or ISO?

ios - ASIHTTPRequest 在委托(delegate)设置时不保存 pdf 文件

c# - WCF 终结点 : Message. WriteMessage 更改 XML 消息内的结束标记

c# - 如何让windows窗体只在主屏幕上打开

java - 如何在特定行数之后打破表格 xsl-fo 1.0?

c# - WCF 错误 : (415) content type 'application/x-www-form-urlencoded' was not the expected type 'application/soap+xml; charset=utf-8'