gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 12:46:58 27 4
gpt4 key购买 nike

我需要在服务器端将 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 以将文件作为电子邮件附件发送。

单词应用程序在其 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 应用程序对象中?

最佳答案

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 进行打印

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

关于c# - 打印到网络(共享)打印机 - Word Interop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18130997/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com