netsuite凭证批量打印中涉及的html分页打印问题,页面的部分打印-CarlZeng
zeng.cz在打印HTML页面时控制分页,可以使用层来动态控制。 具体的方法是,在需要分页的地方动态添加如下代码: 这是一个经典应用,如果netsuite中涉及的批量凭证打印 需要用这个来控制每张凭证的页面的。很重要,因为html打印是无法像pdf那样的位置决定性。如果一个页面中的表格被分摊到不同的页面来打印了:无标题文档每页都有的表头表格内容表格内容表格内容表格内容表格内容表格内容表格内容…
zeng.cz
在打印HTML页面时控制分页,可以使用层来动态控制。
具体的方法是,在需要分页的地方动态添加如下代码:
这是一个经典应用,如果netsuite中涉及的批量凭证打印 需要用这个来控制每张凭证的页面的。很重要,因为html打印是无法像pdf那样的位置决定性。
如果一个页面中的表格被分摊到不同的页面来打印了:
每页都有的表头 | |
表格内容 | 表格内容 |
表格内容 | 表格内容 |
表格内容 | 表格内容 |
表格内容 | 表格内容 |
表格内容 | 表格内容 |
表格内容 | 表格内容 |
表格内容 | 表格内容 |
表格内容 | 表格内容 |
表格内容 | 表格内容 |
表格内容 | 表格内容 |
表格内容 | 表格内容 |
表格内容 | 表格内容 |
表格内容 | 表格内容 |
表格内容 | 表格内容 |
表格内容 | 表格内容 |
表格内容 | 表格内容 |
表格内容 | 表格内容 |
表格内容 | 表格内容 |
表格内容 | 表格内容 |
表格内容 | 表格内容 |
表格内容 | 表格内容 |
每页都有的表尾 |
总体方案的确认:
一、浏览器的打印功能菜单
这种方案的优势是不需要对浏览器作任何扩充,是最简单的办法,但问题也最多,如:
1. 不能精确分页。
浏览器一般是根据用户设置的页面大小,web页面的内容多少,来自行决定分页位置,程序员很难控制。会有页脚页眉干扰。
2. 不能准确对齐边边距及打印文字。
3. 不能解决连续打印。
比如,不是仅打印一张票据,而是连续一次打印若干个票据。
二、使用webbrowser****控件+ javascript
这实际上,是浏览器打印功能菜单的一种程序调用,与打印功能菜单没什么两样。分页的问题仍然存在,只不过,可以让用户不用去点菜单,直接在网页中的一个按钮,或一个链接里面调用罢了。
三、使用print css
这是一种最理想的实现web套打的方法。这种方法通过在html文档中,嵌入打印相关的css样式,来实现对html文档输出打印的控制,比如设置纸张大小,纸张纵横方向,打印边距,分页等。显而易见,这种方式成本小,不需要下载任何插件,而且跨平台性非常好。print css推出已经有些时日,但遗憾的是,至今
没有一个厂商的浏览器很好地实现了这些标准,这使得程序员目前还不能利用print css进行实际的开发。关于打印css,参见http://css-discuss.incutio.com/?page=PrintStylesheets
四、使用pdf文件
用这种方式,就是从服务器端下载一个pdf文件流,在IE中用adobe插件打开,然后用adobe的打印菜单进行打印,虽然这种方案,也能实现精确套打,但需要下载adobe插件。这是国外报表工具经常推荐的一种打印方法,但在pdf不那么普及的中国,这种方案不是最好选择。
七、轻量级的ActiveX****打印方式
这是本公司应客户要求,最新推出的一种最具创意的web套打解决方案。
杰表作为一款纯java的报表工具,以前的提供的web套打方案也是基于Applet的,Applet也做到了尽可能的小(只有24kb),但用户还是抱怨,因为jre太大,安装需要耐心。另外,用Applet方式,很难实现客户端的批量打印功能。
我们采用轻量级的ActiveX打印方案,很好地解决了客户的问题。以下是一个典型的该种方案的示例。
轻量级的ActiveX打印方案的优点是:
1.效率高。可以直接打印指定的html文档,不必向后台再次提起请求。
2.能做到精确打印,分页;
3.功能丰富。可以利用该控件,实现对当前票据文档的打印,预览,及多个html文档的连续打印。
4.成本低廉,ActiveX只有20kb。、
http://www.jatools.com/print/ 这是一个收费的东西,可以找找那些绿色版的,
==================netsuite凭证批量打印中涉及的html分页打印问题,页面的部分打印
window.print() 实际上,是浏览器打印功能菜单的一种程序调用。与点击打印功能菜单一样,不能精确分页,不能设置纸型,套打的问题更加无从谈起,只不过,可以让用户不用去点菜单,直接点击网页中的一个按钮,或一个链接里面调用罢了。事实上,很多用户都是采用这种方式打印,但是这种方式最致命的缺点是不能设置打印参数,比如纸型,页边距,选择打印机等等。
需要指出的是这种方法提供一个打印前和打印后的事件onbeforeprint、onafterprint。可以在打印前的时候重新编辑一些格式,专门送去打印,打印后又处理回来。
function window.onbeforeprint()
{
//将一些不需要打印的隐藏
}
function window.onafterprint()
{
//放开隐藏的元素
}
通过这两个方法,就可以实现页面的部分打印