2013-09-05 31 views
0

我在我们正在处理的相当庞大的网站上遇到很多打印问题。在不同的浏览器上打印页面

问题是FF,IE等问题只在打印时出现。

工作流程如下:我点击页面上的打印按钮,弹出打开不同的模板和样式,并触发window.print命令。

MY可能的解决方案:

当弹出打开,我会呈现一个canvas元素整个DOM,然后将它放回页为PNG文件,然后触发打印动作。

这是一个可行的解决方案吗?

+0

可能不可行。你可以尝试类似html2canvas库,但一个大而复杂的网站可能不会完全转换:http://html2canvas.hertzen.com/ – markE

回答

1

您可以通过两种方式接近这一点:

浏览器扩展

写一个扩展的浏览器(S)(至少Chrome和Firefox)将让您抓住当前内容作为位图你可以使用画布。

这可能是最快的选择,因为屏幕快照是在内部创建的。虽然,我不确定浏览器快照客户端窗口或完整文档是否需要确定。

模拟DOM树

有库,如html2canvascanvas2image模拟DOM树,并试图显示网页的近似表示。

有几件事情,以本通知:

  • 这是比较慢的
  • 您可能会遇到有关图像跨域限制(解决办法是使用图像代理)
  • 你不能得到“外物”的内容(闪光,爪哇等)
  • 这是不是100%准确的(如果这事项)

当你有一个快照时,其他的事情应该是直截了当的。请记住,用户具有不同的打印机,驱动程序和分辨率,您可能无法产生相同的交叉结果,因为您也依赖于浏览器自己的打印实施。

+0

关于您提到的Chrome浏览器扩展选项:是否使用的是captureVisibleTab方法chrome.tabs API或者您是否在Chrome中发现了一个不同的钩子来生成页面图像?如果你发现了另一个API钩子,你会分享......谢谢! :) – markE

+0

嗨@mar​​kE,不,我正在考虑'captureVisibleTab'。 :-) – K3N

+0

我需要的是适用于所有浏览器的解决方案。但这是互动的。我知道canvas2image和html2canvas。我会尝试使用它。谢谢! –

0

提供打印预览特殊的CSS:

<link rel="stylesheet" type="text/css" media="print" href="print.css" /> 

中的一切你不想打印使用类似:

#qqq, .#aaa, #header, ...., ...., .banner{ 
    display: none; 
    height: 0; 
    width: 0; 
} 

,所以你只留下内容,您希望看到打印出来。在这种情况下,访问者或者你不需要使用特殊的打印弹出版本。只需点击打印。

示例:http://viliusle.github.io/miniPaint/ - 仅打印画布。

+0

这种方法对我来说并不可行,在时间方面,那里有很多内容类型,并且为它们中的每一个做重构印刷风格都需要很长时间。打印工作表已经完成,但FF在浮动和相对位置方面存在一些问题,并在每个文档的开头创建一个新的空白页。加上其他问题在IE的 –

+0

对我来说是最快的方式。无论如何,你可以尝试隐藏所有div,表,td,p,然后取消隐藏内容块。 “有很多内容” - 我认为你误解了它,首先你隐藏主页,如页眉,页脚,广告,侧边栏,这些将隐藏很多元素,除非html格式不对。 – ViliusL

+0

HTML格式不正确,我们正在为一个巨大的项目开发一个Drupal 6代码库,即使我隐藏了外部元素,需要打印的结构也非常复杂,并且有很多内容类型会需要那种治疗。我会在下周尝试html2canvas,如果一切都失败了,那么现有的打印样式表就会大量重构。 –

相关问题