window.print() 导出pdf的一些注意事项及总结

  • 一、默认打印背景
// css 打印设置
@media print {
  body {
    height: auto !important; // 打印必须设置成auto,否则只会打印第一页
    -webkit-print-color-adjust: exact; // 默认打印背景
    -moz-print-color-adjust: exact;
    -ms-print-color-adjust: exact;
  }
  @page {
    size: 1240px 1754px; // 纸张大小 a4比例
  }
}

通过css的样式设置,默认打印背景;如果涉及到分页的话body的高度要设置成auto,否则可能只会打印第一页。@page 可以任意设置纸张的大小;

  • 二、分页设置
    page-break-before: 指定元素之前加入分页符;page-break-after:指定元素之后加入分页符;可选参数如下:
    page-break-inside:用于设置是否在指定元素中插入分页符,参数如下:
// css 
.box {
  page-break-after: auto; // box 的后面自动分页
  page-break-inside: avoid; // box 里面禁止分页
}
  • 三、设置背景图
    时常需要一些logo之类的加在页头或者页脚,可以利用定位的方式去处理;
<!DOCTYPE html>
<head>
  <style>
    .body{
      height: auto !important; 
      -webkit-print-color-adjust: exact;
      -moz-print-color-adjust: exact;
      -ms-print-color-adjust: exact;
    }
    .background {
      position: fixed;
      left: 0;
      right: 0;
      top: 0;
      bottom: 0;
      z-index: -1;
      background-image: url('./img/print-bg.png');
      background-position: center center;
      background-repeat: no-repeat;
      display: none;
    }

    .content {
      padding: 600px 0;
      text-align: center;
      font-size: 50px;
      color: red;
    }

    @media print {
      .background {
        display: block;
      }
    }
  </style>
</head>

<body>
  <div class="background"></div>
  <div class="main">
    <div class="content">
      第1部分
    </div>
    <div class="content">
      第2部分
    </div>
    <div class="content">
      第3部分
    </div>
    <div class="content">
      第4部分
    </div>
  </div>
</body>

  • 关于表格打印的思路
    前几天的需求,我的做法是将数据分成每30条一页,每页单独渲染一个表;如果数据太大的话可能影响性能。
// jsx  react + antd
<div>
  { tableDatas.length > 0 && Array.from({length: Math.ceil(tableDatas.length / 30)}).map((item, index) => {
    return <div className='printContent'>
      <Table 
      dataSource={tableDatas.filter((i, eIndex) => eIndex >= index * 30 && eIndex < (index + 1) * 30)} 
      columns={[]}
      pagination={false}
    />
    </div> 
  })
  }
</div>
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 当我们要打印html转pdf文件时,样式会影响我们打印效果,所以我们要针对打印单独设置样式,以下是三种添加打印样式...
    一邑妈妈阅读 1,329评论 0 0
  • CSS print 样式 标签(空格分隔): CSS 显示器(screen)和打印机(printer)是两种差别很...
    lumicinta阅读 2,252评论 0 0
  • 前言 print作为浏览已经比较成熟的技术可以经常被用来打印页面的部分内容,我们可以在MDN上查看到相关的简单介绍...
    dingFY阅读 2,830评论 2 2
  • 简单介绍一下前端打印的做法和一些问题 一、简介 前端打印即浏览器打印,是通过浏览器的打印功能来实现打印效果的做法。...
    Johnson杰阅读 6,848评论 0 12
  • 例子:LODOP.PRINT_INIT("打印任务名");LODOP.SET_PRINT_COPIES(2);bd...
    追逐繁星的阿忠阅读 3,555评论 0 1

友情链接更多精彩内容