博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jQuery打印Html页面自动分页
阅读量:6897 次
发布时间:2019-06-27

本文共 1693 字,大约阅读时间需要 5 分钟。

  最近项目中需要用到打印HTML页面,需要指定区域打印,使用jquery.PrintArea.js 插件

用法:

Javascript代码  
  1. $("div#printmain").printArea();  

但还是会打印DIV后面的内容,这里可以使用CSS控制打印分页

Css代码  
  1. <div style="page-break-after: always;"></div>  

有时用CSS控制分页了但还是会连续打印页面,这里就可以用上PrintArea 插件中的属性参数。
PrintArea部分源码:

Javascript代码  
  1. var modes = { iframe : "iframe", popup : "popup" };  
  2. var defaults = { mode     : modes.iframe,  
  3.                     popHt    : 800,  
  4.                     popWd    : 800,  
  5.                     popX     : 200,  
  6.                     popY     : 200,  
  7.                     popTitle : '',  
  8.                     popClose : false ,  
  9.                     twoDiv   : '', //自已扩展的属性,为满足变态需求  
  10.                     pageTitle: ''};//自已扩展的属性,为满足变态需求  

可以看出插件中定义的属性格式为JSON,下面介绍部分属性
modes定义了两个属性,指定popup时会打开新窗口,可以视为打印预览页面,默认为iframe。
@popClose | [boolean] | (false),true  打印完成后是否开闭预览页面,默认为false(不关闭)。

Javascript代码  
  1. $("div#printmain").printArea({mode:"popup",popClose:true});  

这样就可以指定DIV打印了。
下面说一下我新增两个属性的用途
twoDiv:
        需要打印的第二个DIV ,当然会是第二页,这个页面比较长,需要自动分页,并且表格中每行都不一样,有些行跨了多行,这里打印出来,一行可能会打印在两张纸上。
pageTitle:
        第二个DIV分成多页里,每一页的表头都需要一样,这个参数就是公用表头。
这两个参数都对应着页面中的DIV,如:

Html代码  
  1. <div id="pageTitle" style="display: none;">  

页面定义好后,我们看看插件中是如何处理我们的页面的。

Javascript代码  
  1. writeDoc.open();  
  2. writeDoc.write(html); //打找一个窗口关写窗口中的HTML代码   
  3. writeDoc.close();  
  4.   
  5. printWindow.focus();  
  6. printWindow.print();  

下面是生成html的代码

Javascript代码  
  1. html+=docType() + "<html>" + getHead() + getBody(thisPage) + "</html>";  

插件中都定义了相义的方法,我没有做任何修改,这里我就不粘贴了。
下面是我的思路:
       需在将一个DIV中的内容分成多页,且一行不跨多页,我们就得在生成html 代码上下功夫了。
       首先找出DIV中的所有行,当公共表头加上这些行后高度达到一页,就需要分页了,这里就有可以一页中最后一行刚好跨了多页,将这一行保存下来,放到下一页。
       每一页生成完成后都需要在HTML标签后面加上CSS分页标记,这样就打印机就会乖乖的分页。
     
       说明一下,生成的预览页面一页就是一个HTML页面,它有对应的表头与DTD信息。
       有人可能明明预览只有4页,而打印出来总会多一页,这时你需要检验一下你生成的页面中分页标记是不是在HTML标签之前。
       分面标记一定要在HTML标签之后,这样可解决打印多打一页问题。
PS:  
       下面我会传上我修改过后的JS插件,由于我项目周期的原因,代码中很多部分都是写死了,只是为了解决本次打印的问题。所在代码中写得很乱,希望大家将究着看
      
       同事也希望哪位能够再优化一下,使之通用。

转载于:https://www.cnblogs.com/mizzle/p/3889512.html

你可能感兴趣的文章
串行(Sequential)、并发(Concurrent)、并行(parallel)与分布式
查看>>
JAVA NIO学习笔记之Channel(基础篇)
查看>>
Xcode升级到6.4之后插件无法使用,重新安装最新也无法使用的解决办法
查看>>
秒懂科技新概念
查看>>
eclipse启动tomcat无法访问
查看>>
Notepad++ 书签
查看>>
TiDB 集群测试
查看>>
十天学会php之第五天
查看>>
Java基础10
查看>>
jquery基础学习二
查看>>
为什么说写“安装指南”类博客的程序员是懒惰的
查看>>
Android模拟器——Genymotion(很快)
查看>>
学习规划
查看>>
SpringMVC项目使用Thymeleaf模板引擎
查看>>
定义和使用SQL变量
查看>>
12.21 php-fpm的pool12.22 php-fpm慢执行日志12.23 open_basedir12.24 php-fpm进程管理
查看>>
Supervisor进程管理软件的安装与配置
查看>>
细谈 vue - transition 篇
查看>>
Ubuntn中获取仓库中的工具源码与构建
查看>>
Html Dom getElementsByClassName
查看>>