加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 21:54:36 所属栏目:百科 来源:网络整理
导读:我需要在服务器端将word文档打印到网络打印机.我的网页将文档和文件位置发送到服务器以打开和替换邮件合并项,然后将文档打印到首选(非默认)网络打印机.在网页上选择文档更改时,首选打印机名称会更改 我在Windows Server 2008 R2上使用Word 14.0对象库,Asp.Ne
我需要在服务器端将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进行打印

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读