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);
    }
}

使用需注意如下几个问题:

  1. Microsoft.Office.Interop.Word目前只能在.net framework4.5框架下使用,.net core和.net 5/6目前还无法使用,比较坑
  2. 如果要打印多个文档,可以只创建一个Microsoft.Office.Interop.Word进程,待文档都打印完后,再调用word.Quit()退出进程
  3. 打印完后一定要调用word.Quit()退出进程,否则任务管理器中会驻留Word进程
  4. 对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

posted @ 2022-12-01 08:58  海乐学习  阅读(1310)  评论(0编辑  收藏  举报