首先是使用下边代码,实现js局部打印功能。参数dom为需要打印的节点,为了保证页面功能的单一性,最好弹出一个新的预览页面完成打印功能。

function print(dom){
var body = document.body.innerHTML;//先获取当前页的html代码
document.body.innerHTML = document.querySelector(dom).innerHTML;//需要打印的页面
window.print();
document.body.innerHTML =body;//打印完成之后,还原界面}

实现了js的打印功能之后,就是对于打印部分进行css样式,在样式设置我踩了不少坑。下边假如是要打印的代码<div class="page">

<div class="page">
<p> 2.1 甲方出租给乙方的房屋位于 <span class="fb td">北京 北京市海淀区三义庙2号院</span> ,作为居住使用。</p>
<p>2.2 房屋现有装修、订制款全套家具、卫浴洁具、畅享宽带、其余配套点缀的装饰物均由乙方使用,详见合同附件《入住物品移交书》。</p>
<p>2.3《入住物品移交书》作为甲方按照本合同约定交付乙方使用和乙方在本合同租赁期满交还房屋时的验收依据之一。</p>
<h5 class="text-center">第三条 房屋租金与租赁期</h5>
<p>3.1 房屋租金为每月人民币 <span class="td">陆仟贰佰元整 (¥6200.00)。</span></p>
<p>3.2 租赁期自<span class="td">2017年12月29日</span>至<span class="td">2018年12月28日</span>止。</p>
<table class="part1">
<tr>
<td>1</td><td>2</td><td>3</td><td>4</td>
     </tr>
     <tr>
        <td>1</td><td>2</td><td>3</td><td>4</td>
     </tr>
  </table>
<div class="part2
">
      <div class="list left"> 租户签字:<div>日期:</div> </div> <div class="list left"> 运营专员签字:<div>日期:</div> </div> <div class="list left"> 店长审核:<div>日期:</div> </div> </div>    </div>

  

初始样式为

.page {
width:800px;
margin:0 auto;
}
.page .part1 {   
  width:100%;
}
.page .part2 td{
height:30px;
}

  

然后针对打印样式进行设置,这里要用到媒体查询,字体一般用pt单位,宽高和间距一般用物理单位cm或mm

@media print {
html,body {
//A4默认为210mm*287mm
width:210mm
height:297mm
}
.page{
font-size:10pt;
width:initial;
}
.page .part2 td{
height:1cm;
}
 @page {
      size:A5;
   margin:1cm;//设置打印出来的页面外边距
}
}

  

.page一定不要指定宽度,否则在某些浏览器或打印设置有放大时,会出现页面打印不全的问题,如下图。出现此问题原因可查看此篇博客

在现实情况下,某些关联性较强的一整块内容,如果不做特殊设置的话,打印出来可能被分割到下一页,而我们不希望这样子。那么可以通过设置该模块为不可分割,例如part2部分,如下设置

.part2 {
page-break-inside: avoid;//这样part2永远都会在同一页
}
.part1 tr {
page-break-inside: avoid;//这样设置能保证表格每一行不会被强行分割
}

如果我们想强制从某一部分另起一页,可以设置如下:

.part2 {
page-break-before: always;
}

基本上打印所需的特性就是这些了,over。

前端打印功能实现及css设置的更多相关文章

  1. 网站开发进阶(十二)JS实现打印功能(包括打印预览、打印设置等)

    JS实现打印功能(包括打印预览.打印设置等) 绪 最近在进行项目开发时,需要实现后台管理端打印功能,遂在网上一阵搜索,搜到了很多相关的文章.其中绝大部分文章都是使用的Lodop5.0(Web打印和套打 ...

  2. web的各种前端打印方法之CSS控制网页打印样式

    来源:http://www.jb51.net/web/70358.html CSS控制网页打印样式: 使用CSS控制打印样式,握刚刚使用时一塌糊涂,根本不知道CSS中的midia的作用是什么,问到别人 ...

  3. c#实现打印功能,可以设置纸张大小,字体和颜色等

    /// <summary> /// 打印的按钮 /// </summary> /// <param name="sender"></par ...

  4. css设置网页打印样式

    有三种方法 1. 为屏幕显示和打印分别准备一个css文件,如下所示:  用于屏幕显示的css: <link rel="stylesheet" href="css/n ...

  5. 转载自前端开发:CSS设置滚动条样式

    浏览器默认的滚动条样子太过屌丝了,得自己动手整整.记得IE浏览器有几个设置滚条的样式,不过比较鸡肋,只能设置颜色之类的,而且webkit下面也不支持.无意间看到网易邮箱的滚动条样子很好看,一开始以为是 ...

  6. react + antd 实现打印功能(踩了不少坑)

    最近在有网页打印需求,尝试了一下react的打印功能,遇到了不少的坑: 1.react本身有一些打印的组件,但都不好用,都是基于window.print(),但是window.print()如果直接打 ...

  7. 强大的打印功能jatoolsPrinter使用总结

    最近功能做项目,需要实现打印条码标签的功能,对于第一次接触打印机的小白来说简直是折磨死我拉,公司采购的打印机是斑马的GK888T,其实,如果单纯的想实现能打印出来标签的话,直接用window.prin ...

  8. [原创]Lodop打印, 以及Lodop引用css文件控制打印样式的问题.

    最近在做Lodop打印功能: 思路是:  用MasterPage搭个打印页面的框架, 然后在具体的页面中填入数据, 打印的样式由母版页和CSS来控制. 困扰了一天的问题是:  在打印的JS文件中, 引 ...

  9. 【经验之谈】前端面试知识点总结(CSS相关)——附答案

    目录 二.CSS部分 1.解释一下CSS的盒子模型? 2.请你说说CSS选择器的类型有哪些,并举几个例子说明其用法? 3.请你说说CSS有什么特殊性?(优先级.计算特殊值) 4.要动态改变层中内容可以 ...

随机推荐

  1. 【Spring Task】定时任务详解实例-@Scheduled

    Spring的任务调度,采用注解的形式 spring的配置文件如下,先扫描到任务的类,打开spirng任务的标签 <beans xmlns="http://www.springfram ...

  2. HDU1003:Max Sum(简单dp)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1003 题意一目了然就不说了,算法是从左往右扫,一个暂时保存结果的值,如果区间结果<0,那么就更改左右 ...

  3. MySQL整理(二)

    一.MySQL操作表的约束 MySQL提供了一系列机制来检查数据库表中的数据是否满足规定条件,以此来保证数据库表中数据的准确性和一致性,这种机制就是约束. (1)设置非空约束(NOT NULL),唯一 ...

  4. 更新表中数据可以使用join

    1.在修改数据库的时候,每写完一条SQL语句都要加上一个分号,这样每句之间是有依赖关系的,上面执行不成功不会执行下面的语句. 2.在更新数据库中数据时可以使用join. 例如: update res ...

  5. dubbo-admin 部署

    上一章主要是谈到zookeeper的安装和部署 因为zookeeper只是一个黑框,我们无法看到是否存在了什么提供者或消费者,这时就要借助Dubbo-Admin管理平台来实时的查看,也可以通过这个平台 ...

  6. ruby中的self

    self,自己,在ruby中表示当前对象或默认对象.程序执行的任一时刻,有且仅有一个self. 1.谁成为self,在什么位置成为self? 要知道哪个对象是self,就必须知道当前的上下文.上下文主 ...

  7. centos7下配置iptables实现外网访问内网服务器

    说明:Centos 7 默认的防火墙是 firewall,安装iptables之前需关闭Firewall 外网机器:外网ip:120.25.71.183内网ip:10.1.1.23 内网机器:内网ip ...

  8. [转]将oracle数据库的编码变成utf-8

    1.改客户端字符集:通过WINDOWS的运行菜单运行Regedit,修改注册表 Start -> Run -> Rededit <-| Under registry Editor - ...

  9. java之继承中的构造方法

    继承中的构造方法  1.子类的构造过程中必须调用其基类的构造方法. 2.子类可以在自己的构造方法中使用super(argument_list)调用基类的构造方法. 2.1.使用this(argumen ...

  10. Web安全学习笔记之Nmap命令参考指南

    最近研究Nmap,命令太多,详细还是需要参考官方文档(可选中文) 本文转载 在网络技术中,端口(Port)包括逻辑端口和物理端口两种类型.物理端口指的是物理存在的端口,如ADSL Modem.集线器. ...