我需要将服务器端的word文档打印到网络打印机。我的网页将文档和文件位置发送到服务器以打开和替换邮件合并项目,然后将文档打印到首选(非默认)网络打印机。当网页上选择的文档更改时首选打印机名称更改
我在 windows server 2008 R2 上使用 Word 14.0 对象库、Asp.Net MVC 4.0、.Net Framework 4.0、IIS 7。在 IIS 上,我创建了一个在特定帐户身份 (accountName@DomainName) 上运行的应用程序池。加载用户配置文件设置为 true 以将网络打印机连接加载到注册表中。我允许该帐户有权运行 COM 互操作服务一词。我成功打开文档并替换邮件合并字段并将其保存为 pdf 以将文件作为附件发送到电子邮件。
word 应用程序在其ActivePrinter
属性中具有默认打印机,因此我也可以打印到默认打印机。但我的最终目标是在关闭 word 应用程序和活动文档之前将 word 打印到首选的网络打印机。
如果我尝试更改ActivePrinter
属性,以下两种方法会导致异常。
Word.Application wordApp = new Word.Application();
第一种方法:
wordApp.ActivePrinter = "preferredPrinterName";
第二种方法;
object[] oWordDialogParams = { "\\<serverName>\<PrinterName>", true };
string[] argNames = { "Printer", "DoNotSetAsSysDefault" };
object wordBasic = wordApp.WordBasic;
wordBasic.GetType().InvokeMember("FilePrintSetup"
, System.Reflection.BindingFlags.InvokeMethod
, null
, wordBasic
, oWordDialogParams
, null
, null
, argNames);
我发现 Word 应用程序对象没有将安装的所有打印机加载到用户帐户。它只加载默认打印机。我假设这是当上述两种方法尝试更改或添加首选打印机到应用程序对象时出现异常的原因,因为我尝试设置的打印机从未在活动打印机列表中找到。
如何将用户配置文件下的所有已安装共享打印机加载到 Word 应用程序对象中?