我在我们正在处理的相当庞大的网站上遇到很多打印问题。在不同的浏览器上打印页面
问题是FF,IE等问题只在打印时出现。
工作流程如下:我点击页面上的打印按钮,弹出打开不同的模板和样式,并触发window.print命令。
MY可能的解决方案:
当弹出打开,我会呈现一个canvas元素整个DOM,然后将它放回页为PNG文件,然后触发打印动作。
这是一个可行的解决方案吗?
我在我们正在处理的相当庞大的网站上遇到很多打印问题。在不同的浏览器上打印页面
问题是FF,IE等问题只在打印时出现。
工作流程如下:我点击页面上的打印按钮,弹出打开不同的模板和样式,并触发window.print命令。
MY可能的解决方案:
当弹出打开,我会呈现一个canvas元素整个DOM,然后将它放回页为PNG文件,然后触发打印动作。
这是一个可行的解决方案吗?
您可以通过两种方式接近这一点:
写一个扩展的浏览器(S)(至少Chrome和Firefox)将让您抓住当前内容作为位图你可以使用画布。
这可能是最快的选择,因为屏幕快照是在内部创建的。虽然,我不确定浏览器快照客户端窗口或完整文档是否需要确定。
有库,如html2canvas和canvas2image模拟DOM树,并试图显示网页的近似表示。
有几件事情,以本通知:
当你有一个快照时,其他的事情应该是直截了当的。请记住,用户具有不同的打印机,驱动程序和分辨率,您可能无法产生相同的交叉结果,因为您也依赖于浏览器自己的打印实施。
提供打印预览特殊的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/ - 仅打印画布。
这种方法对我来说并不可行,在时间方面,那里有很多内容类型,并且为它们中的每一个做重构印刷风格都需要很长时间。打印工作表已经完成,但FF在浮动和相对位置方面存在一些问题,并在每个文档的开头创建一个新的空白页。加上其他问题在IE的 –
对我来说是最快的方式。无论如何,你可以尝试隐藏所有div,表,td,p,然后取消隐藏内容块。 “有很多内容” - 我认为你误解了它,首先你隐藏主页,如页眉,页脚,广告,侧边栏,这些将隐藏很多元素,除非html格式不对。 – ViliusL
HTML格式不正确,我们正在为一个巨大的项目开发一个Drupal 6代码库,即使我隐藏了外部元素,需要打印的结构也非常复杂,并且有很多内容类型会需要那种治疗。我会在下周尝试html2canvas,如果一切都失败了,那么现有的打印样式表就会大量重构。 –
可能不可行。你可以尝试类似html2canvas库,但一个大而复杂的网站可能不会完全转换:http://html2canvas.hertzen.com/ – markE