C# 打印Word文档的两种方式
方式一:使用Microsoft.Office.Interop.Word
C#可利用Microsoft.Office.Interop.Word进行Word文档的静默打印,封装为如下代码:
private static void Print(string fileName) { try { var word = new Microsoft.Office.Interop.Word.Application { Visible = false }; // 启动Word进程 var doc = word.Documents.Open(fileName, ReadOnly: true, Visible: System.Reflection.Missing.Value); // 打开待打印的文档 doc.PrintOut(); // 打印 doc.Close(SaveChanges: false); // 关闭文档 word.Quit(SaveChanges: false); // 退出Word进程 } catch (Exception ex) { Console.Error.WriteLine(ex.Message); } }
使用需注意如下几个问题:
- Microsoft.Office.Interop.Word目前只能在.net framework4.5框架下使用,.net core和.net 5/6目前还无法使用,比较坑
- 如果要打印多个文档,可以只创建一个Microsoft.Office.Interop.Word进程,待文档都打印完后,再调用word.Quit()退出进程
- 打印完后一定要调用word.Quit()退出进程,否则任务管理器中会驻留Word进程
- 对Microsoft.Office.Interop.Word 的引用,直接右击引用—>添加引用—>在COM页面的下拉框中,找到(OFFICE2003)Microsoft Word 11.0 Object Library /(OFFICE2007)Microsoft Word 12.0 Object Library,按“确定”即可。(如果找不到安装office后再试)
方式二:使用命令行ProcessStartInfo
在有的电脑上因为Word的组件问题,使用Microsoft.Office.Interop.Word会出现报错而无法正常打印,
这时可以考虑使用windows命令进行打印,封装代码如下:
private static void Print(string fileName) { try { var info = new ProcessStartInfo(fileName) { CreateNoWindow = true, Verb = "Print", WindowStyle = ProcessWindowStyle.Hidden }; Process.Start(info); } catch (Exception ex) { Console.Error.WriteLine(ex.Message); } }
感谢:
https://zhuanlan.zhihu.com/p/497701524