首先是使用下边代码,实现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. 如何查看windows某个目录下所有文件/文件夹的大小?

    如何查看windows某个目录下所有文件/文件夹的大小? TreeSize Free绿色汉化版是一款硬盘空间管理工具,用树形描述出来,能够显示文件大小和实际占用空间数及浪费的空间等信息,让你做出相应的 ...

  2. VS安装程序制作之MSI/EXE

    MSI文件是Windows Installer的数据包,它实际上是一个数据库,包含安装一种产品所需要的信息和在很多安装情形下安装(和卸载)程序所需的指令和数据.MSI文件将程序的组成文件与功能关联起来 ...

  3. linux环境下的python安装过程

    一.下载python源码包 打开ubuntu下的shell终端,通过wget命令下载python源码包,如下图所示: wget https://www.python.org/ftp/python/3. ...

  4. redis_cluster部署过程

    Redis集群1.多个redis节点网络互联,数据共享2.所有的节点都是一主一从(可以是多个从),其中从不提供服务3.不支持同时处理多个键(如mset/mget),因为redis需要把键均匀分布在各个 ...

  5. UVA+POJ中大数实现的题目,持续更新(JAVA实现)

    UVA10494:If We Were a Child Again 大数除法加取余 import java.util.Arrays; import java.util.Scanner; import ...

  6. C++学习笔记-隐式成员函数

    通过一个例子来复习C++操作符重载及隐式成员函数.MyString类模仿标准string类,简单的实现了构造一个字符串.字符串比较.取单个字符等功能.如下: #ifndef MYSTRING_H_ # ...

  7. SCADA必备函数 实际测试。

    一:GetTickCount() 综述: 这是一个Window的平台的API函数, 所以啊 在 MFC中 他的前面有两个冒号,像个和尚一样. 所以它不会受限于类,可以在MFC中任意位置使用. 这个函数 ...

  8. 函数对象[条款18]---《C++必知必会》

    有时需要一些行为类似于函数指针的东西,但函数指针显得笨拙.危险而且过时(让我们承认这一点).通常最佳方式是使用函数对象(function object)取代函数指针. 与智能指针一样,函数对象也是一个 ...

  9. 给idea配置默认的java jdk

    1. 2. 3.选择安装的jdk的路径. 4.

  10. Bridge Serial-Ports over network

    https://stackoverflow.com/questions/29207980/bridge-serial-ports-over-network For an application, wh ...