我已经被要求内部Web应用程序透明地将文档发送到打印机.想法是用户可以选择最近的打印机,并且Web应用程序将其打印作业发送到他们选择的打印机.
我们要推出的第一台打印机是Canons,所以我的问题是:我如何发送文件打印网络到特定的佳能?Cannon的类型问题是iR5570,将要说的文件主要是Word和PDF
我目前正在通过可怕的,IE浏览器唯一的佳能开发者网站工作,但我有点希望有人可以指出我正确的方向或指向我在第三方组装:)
该问题的关键词是"网络应用程序".
在仅使用HTML + Javascript over HTTP的普通Web应用程序中,您不能直接将文档发送到打印机.这就是Web浏览器存在的原因之一,如果没有这种功能,每个人的打印机都会收集与公共传真机相同的垃圾.
所以你需要一些解决方法.一种选择是建立一个常见的插件,如flash,silverlight,java applet,甚至像greasemonkey.另一种是自定义插件,如托管的winforms控件或自定义浏览器扩展.
您非常幸运,因为您看起来已完全控制(或了解)部署环境,并且此环境非常均匀.这意味着您还有其他人已经开始探索的其他选项.如果您可以将环境中的所有打印机安装到Web服务器,那么使用内置的.Net打印机类(在System.Drawing.Printing
命名空间中)列出这些打印机相当容易,或者向用户显示它们以便他们可以选择或保留某种IP到打印机映射表,然后从您的Web应用程序直接打印到该打印机.请注意,此方案可能要求您的应用程序以比其他方式更高的信任级别运行.
现在,实际打印PDF和Word文档.对于acrobat,请检查以下链接:
http://support.adobe.com/devsup/devsup.nsf/docs/52080.htm(Wayback machine)
请注意,它有点过时,但我相信这个概念仍然有效.你必须尝试一些以确保它按预期工作.
对于Word,我通常不喜欢Web应用程序中的Office互操作/自动化.但在这种情况下,您不会编辑任何文档:只需加载足够长的时间即可打印.而你依赖于另一种稀缺资源(打印机)这一事实应该使其不会超出你的网络服务器应对的范围.因此,您可能会遇到一个罕见的情况,即Web项目中的Office自动化是有意义的.
如今许多打印机和多功能设备都支持直接打印PDF,这可以解决您的一个问题.只需将PDF发送到打印机即可.实际上,有些人甚至支持发送URL,然后打印机将获取文档并打印出来.Lexmark肯定会这样做,我认为其他一些供应商也会这样做.这仍然意味着你必须处理Word文档.Word 2007支持PDF(使用Microsoft安装的加载项),并且我以编程方式使用此函数,并在C#中取得了巨大成功.
这是代码:
Microsoft.Office.Interop.Word.ApplicationClass msWord = new Microsoft.Office.Interop.Word.ApplicationClass(); object paramUnknown = Type.Missing; object missing = Type.Missing; object paramSaveChangesNo = Microsoft.Office.Interop.Word.WdSaveOptions.wdDoNotSaveChanges; //object paramFonts = Microsoft.Office.Interop.Word.wde object paramFormatPDF = Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatPDF; object paramTrue = true; object paramReadOnly = true; object sourceDoc = @"c:\input.doc" object target = @"c:\output.pdf"; msWord.Visible = false; //open .doc msWord.Documents.Open(ref sourceDoc, ref paramUnknown, ref paramReadOnly, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown); //so it won't show on the taskbar msWord.Application.Visible = false; msWord.WindowState = Microsoft.Office.Interop.Word.WdWindowState.wdWindowStateMinimize; //save .doc to new target name and format msWord.ActiveDocument.SaveAs(ref targetDoc, ref paramFormatPDF, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramTrue, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown); msWord.ActiveDocument.Close(ref missing, ref missing, ref missing); msWord.Quit(ref paramSaveChangesNo, ref paramUnknown, ref paramUnknown);
最后,如果您的设备不支持PDF打印,那么您可以使用Ghostscript或其他工具将您的PDF转换为PS甚至PCL.不是最大的,因为这意味着运行一些非托管代码或最坏的情况,炮轰并执行GS命令行,也就是说,我们目前在我们的一个Web应用程序中执行此操作并且运行良好.顺便说一句,我们不是为了打印而是为了加入一些PDF文件,但最终它的工作原理是相同的.