服务器直接打印excel文件功能

时间:2024-02-20 08:34:42

服务器直接打印excel文件功能

最近在做一个aspnet 调用服务器打印机直接打印excel功能。

 

实现方式是两种:

  1. 直接调用自己程序里的打印功能将excel 发送给打印机。

    通过调用cmd程序,cmd程序直接将文件发送给打印机

  2. 调用office com 组件excel将文件发送到打印机。

    通过调用cmd程序,cmd程序调用excel组件打印。

第一种方式遇到的问题:

  1. 打印机设置了自定义纸张,本地测试打印无误,服务器打印则出现纸张错位情况(本该打印在一张纸上,却分了两张纸打印,及自定义纸张没发挥作用。)经过分析是由于设置打印机自定义纸张的登录用户为administrator,实则打印的用户为NETWORK_SERVICE 及IIS 用户,

    无法用iis虚拟用户设置打印机纸张。

    解决方法:①将要调用的cmd 程序右键设置为 以管理员身份运行,如下图:

②将IIS上部署网站 应用程序池里面标识用户设置为administrator,如下图:

 

这样使得此网站已administrator的权限去调用,调用时任务管理器里面此进程w3wp.exe是以administrator运行的:

经过这两步设置,打印趋于正常。

但是多用户打印测试之后,还会有打印机纸张错位及程序挂死无反应情况。后改成多线程,将挂死进程杀掉重新打印也正常,但是不稳定,还是会出现打印错位情况。所以尝试第二种打印方式。

 

第二种方式遇到的问题:

  1. 本地调试打印没问题, 发布网站放到IIS 上之后,调用打印没法应。

    解决方法:根据第一种方式得到启示,应该也是IIS调用 office 组件权限问题。所以去google,

    查到了 http://www.cnblogs.com/zhongxinWang/p/3275154.html,根据里面的设置最后还是打印没反应,又去google查

    asp操作excel权限不足 的问题,查到很多关于这类的问题,内容大同小异:

http://www.cnblogs.com/hyqiang168/articles/989221.html:

 

解决方法:

DCOM组件服务中给MICROSOFT.EXCEL组件赋予ASP.NET的操作权限,具体步骤:

1)打开开始菜单的运行对话框,输入dcomcnfg命令,确定,这时会弹出组件服务窗口

2)展开计算机-〉我的电脑-DCOM配置,找到Microsoft Excel应用程序节点,单击右键-〉属性

3)点击"标识"标签,选择"交互式用户"

4)选中"安全"选项,在下面三个项目都选择"自定义",并单击编辑按钮

5)在启动权限对话框中点击添加按钮,添加相应的用户(注意:如果是WIN2000XP,则添加"ASPNET"用户,如果是WIN2003,则添加"NETWORK Service"用户),并赋予本地的所有权限 ,访问权限和配置权限和前面一样添加ASPNET用户。

PS:

64位系统:ctrl+R 运行 comexp.msc -32 

 32位系统: ctrl+R 运行 dcomcnfg.exe

 

经过比较,以上两个网址里面只有标识选项卡 设置不同。如下图:

最终改为交互式用户再进行打印,调用成功。

 

 

感想:首先遇到问题,要根据问题的现象,症状分析问题的根源,判断问题的方向很重要,只有对症下药才能解决问题。

一方面是技术,一方面是解决问题的思路能力。找到问题的根源,方向很重要。

自己遇到问题时,几乎都是本地调试打印没问题,发布到IIS上之后调用不成功,说明不是代码的原因,那就要比较本地和发布之后有什么不同了,很容易想到的是权限问题,本身NETWORK_SERVICE 用户权限

引用下面两句话:

Network Service账户只拥有本机部分权限,它能够以计算机的名义访问网络资源,还有认证用户有权限访问的资源。

在服务器上操作excel要调用com组件,因此对network service的授权需要配置excel应用程序com组件。

 

所以要解决的就是两个权限问题:

  1. 调用打印机自定义纸张的权限
  2. 操作excel 调用com组件问题

当然也是查了各位的博客,3Q So Much。

 

以下博客地址作引用参考:

http://www.cnblogs.com/zhongxinWang/p/3275154.html

http://www.cnblogs.com/hyqiang168/articles/989221.html

http://blog.csdn.net/happy_ddm/archive/2007/07/09/1683207.aspx

 

http://wenku.baidu.com/view/59db50808762caaedd33d45f.html

 

http://blog.csdn.net/yangtze_nancy/article/details/5933634

http://edu.cnzz.cn/201307/91403b90.shtml

 

 

 

遗留问题:

本地win7 打印没问题,但是放到server2008 上之后单线程打印没问题,多线程则出现调用exe成功,但是没打印。