2011-01-31 267 views
17

我正在开发一个内部谷歌浏览器扩展程序,它需要一种方法来启动将当前页面打印到打印机。我不想让默认的打印对话框出现(所以,javascript:window.print()是没有问题的)。谷歌浏览器扩展程序:无声打印页面

据我所知,这是不可能的只是与JS + HTML插件,所以我也打开使用NPAPI插件(与虚拟MIME类型)。我只关心Windows平台。

如果可能的话,我也开放各种黑客/解决方法,虽然标准的解决方案会很好。

如果您认为这不可能,请告诉我您是否知道记录的任何功能请求?

任何建议/澄清欢迎..

+1

你有没有完成扩展?这正是我正在寻找的... – 2014-05-09 14:26:02

+0

不,我无法进行无声打印。 ( – 2014-05-12 10:40:20

回答

0

有迹象表明,采取当前网页的快照各种扩展(例如,this one);您可以通过NPAPI插件将图像发送到打印机。

+0

)有没有其他的方式,你知道/想到没有使用屏幕截图?此外,你可以请我提供信息/链接如何在Windows上“发送图像到打印机”? – 2011-01-31 15:44:34

+0

我没有说任何关于屏幕截图;查看我链接的插件,它实际上将页面(包括滚动显示的部分)渲染到图像上,但不会截图 – smorgan 2011-02-01 15:11:42

1

由于NPAPI允许您创建本地C++插件,您可以通过对象标签(您可以从扩展中使用该对象标签)进行交互,这可能是实现它的方法。

棘手的是我不知道获取打印页面位的好方法。我所知道的唯一一个做过类似这个事情的人实际上得到了浏览器的窗口句柄(可通过NPAPI获得),并从中删除了这些字符以便打印,但这不会考虑打印样式表或任何东西。您也可以尝试使用自动化事件来尝试控制打印对话框,但我不知道这是否会起作用。

在设计上,浏览器尽量不要让你做这样的事情,因为它可以打开一些严重的漏洞,如果任何网站都可以直接开始打印的东西到您的打印机没有确认...

无论如何,如果你找到一种方法可以用C++来实现,你可以使用FireBreath来简化NPAPI插件的创建。

0

我最近一直在寻找类似的能力,看到它,它似乎将使用Chrome的新的本地消息API是完全可能的。

https://developer.chrome.com/extensions/nativeMessaging

有很多用C#这样的例子,但这里是一个基本的C#应用​​程序

Native messaging from chrome extension to native host written in C#

我意识到这可能是一个故障排除Chrome原始消息的一个简单的例子一天晚,一美元一短,但如果有其他人遇到这个问题,这是为我工作的解决方案。从C#应用程序中,您可以使用PrintDocument类直接打印到安装的打印机。如果你想出了一种获取页面图像的方法,这比使用firebreath或NPAPI要容易得多。