我正在开发内部Google Chrome扩展程序,需要一种方法来启动将当前页面打印到打印机。我不希望出现默认的“打印”对话框(因此,javascript:window.print()是不可能的)。
据我所知,这不可能只使用JS + HTML插件,所以我也开放使用NPAPI插件(使用虚拟mime类型)。我只关心Windows平台。
如果可能的话,我也会接受各种黑客/解决方法,虽然标准解决方案会很好。
如果您认为这是不可能的,请告诉我您是否知道为其记录的任何功能请求?
欢迎任何建议/澄清。
答案 0 :(得分:17)
在chrome(v18 +)中,我们有--kiosk --kiosk-printing
个开关。可以自动打印到默认打印机而无需打印确认。
答案 1 :(得分:1)
由于NPAPI允许您创建可以通过对象标记(可以从扩展中使用)进行交互的本机C ++插件,这可能就是这样做的方式。
棘手的一点是,我不知道有一个很好的方法来获取打印页面的位。我认识的唯一一个做过类似事情的人实际上得到了浏览器的窗口句柄(可通过NPAPI获得)并从中删除它以打印出来,但这不会考虑打印样式表或任何东西。您也可以尝试使用自动化事件来尝试控制打印对话框,但我不知道这是否有用。
根据设计,浏览器尽量不让你做这样的事情,因为它可能会打开一些严重的漏洞,如果任何网站只是在没有确认的情况下开始向你的打印机打印东西......
无论如何,如果您找到使用C ++的方法,可以使用FireBreath来简化NPAPI插件的创建。
答案 2 :(得分:0)
有各种扩展可以拍摄当前网页的快照(例如,this one);您可以通过NPAPI插件调整一个将图像发送到打印机。
答案 3 :(得分:0)
我最近一直在寻找类似的能力,看起来很有可能使用Chrome的新本机消息api。
https://developer.chrome.com/extensions/nativeMessaging
C#中有很多这样的示例,但这里有一个使用基本C#应用程序对Chrome本机消息进行故障排除的快速示例
Native messaging from chrome extension to native host written in C#
我意识到这可能是一天晚了,一美元短,但如果有其他人遇到这个问题,这是对我有用的解决方案。从C#应用程序内部,您可以使用PrintDocument
类直接打印到已安装的打印机。如果你找到了获取页面图像的方法,这将比使用firebreath或NPAPI容易得多。