4

我需要将服务器端的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 应用程序对象中?

4

1 回答 1

1

MS 不支持在服务器方案(如 ASP.NET、Windows 服务等)中使用 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
  • 在目标网络打印机上实现 HotFolder
  • 将 PDF 复制到该 HotFolder 以进行打印

对于您的方案,这将是一个强大且受支持的选项...

于 2013-08-08T23:28:14.063 回答