C#直接打印PDF问题

风之瘦影 2019-04-20 06:25:08
最近这两天一直在研究直接打印PDF文件的问题。找到三种比较好的打印方式,可是各有各的问题。

方法一 : 使用PrintDocument类打印
优点 : 打印速度快
缺点 : 1. 需要安装 Adobe Reader
2. 不能手动选择打印机。即使设定了自己想要的打印机,也还是会使用默认打印机打印
3. 打印中,Adobe Reader会打开PDF文件,有时可以自动关闭,有时关闭不掉。
代码如下所示:
private static void printPDF2(string filePath)
{
PrintDocument pd = new PrintDocument();
Process p = new Process();
ProcessStartInfo startInfo = new ProcessStartInfo();

pd.PrinterSettings.PrinterName = "Send To OneNote 2016";

startInfo.CreateNoWindow = true;
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.UseShellExecute = true;
startInfo.FileName = filePath;
startInfo.Verb = "print";

String sysPrintName = pd.PrinterSettings.PrinterName;

String printName = "Send To OneNote 2016";
startInfo.Arguments = @"/p /h \" + filePath + "\"\"" + printName + "\"";

//startInfo.Arguments = @"/p /h \" + filePath + "\"\"" + pd.PrinterSettings.PrinterName + "\"";


p.StartInfo = startInfo;
p.Start();
p.WaitForExit();
}

方法二 : 使用AcroRd32.exe 打印
优点: 1. 打印速度快
2. 可以选择打印机
缺点 : 会自动使用Adobe Reader程序打开文件,然后自动关掉 偶尔也有关不掉的情况
代码如下所示:
private static void printPDF3(string filePath)
{
Process p = new Process();


string appPath = @"C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe";

ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = appPath;

String argument = "/h /t \"D:\\Projects\\11111.pdf\" \"Send To OneNote 2016\"";

startInfo.Arguments = argument;// "/h /t \"D:\\Projects\\11111.pdf\" \"Send To OneNote 2016\"";

startInfo.CreateNoWindow = true;
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.UseShellExecute = true;

p.StartInfo = startInfo;
p.Start();
p.WaitForExit();
}

方法三 :使用Spire.PDF for .NET打印
优点: 1. 打印时,完全静默打印,不会弹出Adobe Reader程序,并打开关闭PDF文件
2. 可以选择打印机
缺点 : 打印速度慢
代码在不在家里,因此就不上了。大致如下: (网上随便找的)

using Spire.Pdf;
PdfDocument doc = new PdfDocument();
doc.LoadFromFile(@"C:\xxx.pdf", FileFormat.PDF);
Console.WriteLine(doc.UsedFonts);
PrintDocument printDoc = doc.PrintDocument;
printDoc.PrintController = new StandardPrintController();
printDoc.Print();
doc.Close();
此种打印方式,感觉是将原本很小的PDF文档,重新生成后,再送入打印机,从打印机里的大小来看,比我原来的文件大了好几倍,30页的文件,花了40秒左右才送完,前两种方式,几乎只花了几秒。

请问各位大神,有没有比较好的方式解决以上问题呢,只解决其中一种,也是感激不尽。

谢谢。
...全文
2228 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
appo_li 2020-10-05
  • 打赏
  • 举报
回复
spire.pdf解决你所有问题
chengxun998 2020-09-30
  • 打赏
  • 举报
回复
本人己试过,C# 自带的可以打印,但是有弹出框;Spire.PDF的速度比较慢,双面打印很慢。 破解的目前只有4.8版本。 其它的还没有试过。
qq_36492588 2019-04-23
  • 打赏
  • 举报
回复
引用 2 楼 qq_36492588 的回复:
引用 4 楼 LangKe416 的回复:
引用 3 楼 qq_36492588 的回复:
最近发布的Spire.PDF有个比较新的5.4.1版本,在打印速度上做了提升和优化,你可以试下这个版本或及其以上版本
我只看到了5.1的版本的 请问这个版本的 如何下载呢 收费吗
你试下5.4.9版本的,这个是收费的,你可以发邮件问他们售后要一个临时授权证书,功能是完全没有限制的
https://www.e-iceblue.cn/Downloads/Spire-PDF-NET.html
m0_37608957 2019-04-23
  • 打赏
  • 举报
回复
aspose是收费的 不过能弄到授权码
qq_36492588 2019-04-23
  • 打赏
  • 举报
回复
引用 4 楼 LangKe416 的回复:
引用 3 楼 qq_36492588 的回复:
最近发布的Spire.PDF有个比较新的5.4.1版本,在打印速度上做了提升和优化,你可以试下这个版本或及其以上版本
我只看到了5.1的版本的 请问这个版本的 如何下载呢 收费吗
你试下5.4.9版本的,这个是收费的,你可以发邮件问他们售后要一个临时授权证书,功能是完全没有限制的
assky124 2019-04-23
  • 打赏
  • 举报
回复
Pdfium 了解下 其实福昕的最好,就是太贵了
秋的红果实 2019-04-23
  • 打赏
  • 举报
回复
公司用才需要买,小心产生纠纷
风之瘦影 2019-04-23
  • 打赏
  • 举报
回复
引用 8 楼 m0_37608957 的回复:
aspose是收费的 不过能弄到授权码
公司用的 最好免费 谢谢
风之瘦影 2019-04-23
  • 打赏
  • 举报
回复
引用 8 楼 m0_37608957 的回复:
aspose是收费的 不过能弄到授权码
公司用的 免费的比较好 不过还是谢谢
风之瘦影 2019-04-23
  • 打赏
  • 举报
回复
引用 6 楼 assky124 的回复:
Pdfium 了解下 其实福昕的最好,就是太贵了
嗯 好的 谢谢
anabiosispe 2019-04-23
  • 打赏
  • 举报
回复
网上搜mupdf这个,C#封装一下,自己对pdf文档进行单页渲染成图片,然后用Graphics绘制到打印机就行。
C#使用mupdf的方法,网上有朋友写的博客可以参考。
打印速度上的优化,你需要自己调整渲染pdf页面内容成图片时的dpi,适当调低点速度会快些。
优点:不需要在客户机上安装adobe reader。
Spire.PDF这个第三方组件,我记得是要收费的吧,是不是免费版会有相关限制,比如只能打印10页以内的内容?
qq_36492588 2019-04-22
  • 打赏
  • 举报
回复
最近发布的Spire.PDF有个比较新的5.4.1版本,在打印速度上做了提升和优化,你可以试下这个版本或及其以上版本
风之瘦影 2019-04-22
  • 打赏
  • 举报
回复
引用 3 楼 qq_36492588 的回复:
最近发布的Spire.PDF有个比较新的5.4.1版本,在打印速度上做了提升和优化,你可以试下这个版本或及其以上版本
我只看到了5.1的版本的 请问这个版本的 如何下载呢 收费吗
风之瘦影 2019-04-21
  • 打赏
  • 举报
回复
引用 1 楼 楚笑sama 的回复:
试试aspose.pdf 打印
谢谢 属于第三方控件吗
楚笑sama 2019-04-21
  • 打赏
  • 举报
回复
试试aspose.pdf 打印

110,570

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧