微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

应用程序一词在其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,argNames);

我发现Word应用程序对象没有加载安装到用户帐户的所有打印机.它只加载认打印机.我假设当上述两种方法试图更改或添加首选打印机到应用程序对象时,这是异常的原因,因为我试图设置的打印机从未在活动打印机列表中找到.

如何在Word应用程序对象中加载用户配置文件下的所有已安装的共享打印机?

解决方法

MS不支持在服务器方案中使用Office互操作(如ASP.NET,Windows服务等) – 请参阅 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进行打印

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐