打印到网络(共享)打印机-Word Interop

本文关键字:打印机 -Word Interop 共享 网络 打印 | 更新日期: 2023-09-27 18:26:58

我需要在服务器端将word文档打印到网络打印机。我的网页将文档和文件位置发送到服务器,以打开和替换邮件合并项目,然后将文档打印到首选(非默认)网络打印机。当网页上选择的文档更改时,首选打印机名称更改

我在windows服务器2008 R2上使用Word 14.0对象库、Asp.Net MVC 4.0、.Net Framework 4.0、IIS 7。在IIS上,我创建了一个在特定帐户Identity上运行的应用程序池(accountName@DomainName)。加载用户配置文件设置为true可将网络打印机连接加载到注册表中。我允许该帐户具有运行单词COM互操作服务的权限。我成功地打开了文档,替换了邮件合并字段,并将其保存为pdf,将文件作为附件发送到电子邮件中。

word应用程序的ActivePrinter属性中有默认打印机,因此我也可以打印到默认打印机。但我的最终目标是在关闭单词应用程序和活动文档之前,将单词打印到首选的网络打印机。

如果我尝试更改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应用程序对象中?

打印到网络(共享)打印机-Word Interop

MS不支持在服务器场景(如ASP.NET、Windows Service等)中使用Office互操作-请参阅http://support.microsoft.com/default.aspx?scid=kb;EN-US;q257757#kb2

此外,自Windows Vista以来,还发生了一些与安全相关的更改,这基本上使得在Windows服务中很难做任何"类似桌面"的事情(在这方面,IIS/ASP.NET只是Windows服务的一个特例)。

另一点是,从服务器"打印"可能会导致问题,因为IIS是一种(特殊的)Windows服务。。。Windows服务通常没有"完整/真实"的桌面,而这反过来又是稳健打印所必需的。。。

我不认为有一个简单的解决方案来解决你的情况。。。

我会将其分解为不同的组件:

  • Word文档处理(例如使用Aspose.Words)
  • 从生成的Word文件创建PDF(例如使用Aspose.Words)
  • 在目标网络打印机上实现热文件夹
  • 将PDF复制到该HotFolder进行打印

对于您的场景来说,这将是一个强大且受支持的选项。。。