码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 使用jspdf插件将网页中的内容导出为高保真的pdf文件


    文章目录

    • 使用jspdf插件将网页中的内容导出为高保真的pdf文件
      • 1. 将网页中的内容导出为pdf文件的四种方式比较
      • 2. 第一种方式:html2canvas + jspdf 导出网页内容
        • 2.1 网页内容拼接失真导出pdf
          • 2.1.1 安装和引入 html2canvas 和 jspdf
          • 2.1.2 JsPDF 参数说明
          • 2.1.3 html2canvs 参数说明
          • 2.1.4 导出PDF逻辑编写
          • 2.1.5 分页处理
        • 2.2 网页内容保真导出pdf
          • 2.2.1 安装和引入 html2canvas 和 jspdf
          • 2.2.2 JsPDF 参数说明
          • 2.2.3 导出PDF逻辑编写
          • 2.2.4 中文乱码问题解决方案
      • 3. 第四种方式:浏览器自带pdf打印功能导出网页内容

    使用jspdf插件将网页中的内容导出为高保真的pdf文件

    1. 将网页中的内容导出为pdf文件的四种方式比较

    在这里插入图片描述
    第二种 iText 和 第三种 wkhtmltopdf 需要后端java和服务端处理,这里就不说。

    2. 第一种方式:html2canvas + jspdf 导出网页内容

    第一种方式中还可以分为两种方式:

    • 一种是通过 html2canvas 先将 html 内容转化成 canvas 画布,然后再将画布转成 jpeg 图片,最后,再将所有的jpeg图片拼接起来通过 jspdf 保存为pdf文件并下载下来。
    • 另一种是 通过 jspdf.html() 方法把需要导出为pdf的内容的dom元素保存并下载下来。

    2.1 网页内容拼接失真导出pdf

    这种方式有几种缺陷:

    • 图片会被压缩或放大,导致图片上的内容会失真出现模糊的现象。
    • 将要导出的HTML内容必须要在浏览器中显示,不可设置display: none; visiable: hidden;等样式,否则导出的PDF为白板。
    • 如果需要导出自定义的样式,则需要复制一份HTML并修改自定义的样式,然后新窗口打开,然后调用导出PDF的方法,导出PDF,这里会涉及一个加载渲染问题,必须要等HTML加载和渲染完成后才可导出PDF,否则导出的PDF是不完整。
    2.1.1 安装和引入 html2canvas 和 jspdf
    # 安装
    $ npm install html2canvas jspdf
    
    • 1
    • 2

    第一种引入方式

    import {
        jsPDF as JsPDF } from 'jspdf'
    import html2Canvas from 'html2canvas'
    
    • 1
    • 2
    • 3

    第二种引入方式

    <script src="https://unpkg.com/jspdf@latest/dist/jspdf.umd.min.js">script>
    <script src="http://html2canvas.hertzen.com/dist/html2canvas.min.js">script>
    
    • 1
    • 2
    2.1.2 JsPDF 参数说明

    JsPDF 一共有4个可选参数

    const doc = new JsPDF('p', 'px', 'a4')
    
    • 1
    • arugments[0]: 表示pdf的打印方向,默认是p,纵向
    • arguments[1]: 表示pdf的单位,默认是mm,毫米;可选值有pt, mm, cm, in, px, pc, em, ex。
    • arguments[2]: 表示打印版式,默认'a4',可选值有a0~a10,b0~b10,c0~c10,dl,letter,government-letter,legal,junior-legal,ledger,tabloid,credit-card。
    • arguments[4]: 表示是否只在PDF中输入字体,默认 false。

    doc.save('xxx.pdf') 参数说明

    doc.save(filename, flag) 方法一共有两个参数。

    • arguments[0]: PDF文件输入的名称。
    • arguments[1]: 是否返回 promise 对象,默认 false。
    2.1.3 html2canvs 参数说明

    html2canvas(options) 一共有20个参数属性。

    • allowTaint: 是否允许跨原点图像污染画布,默认 false。
    • backgroundColor: 画布背景色, 值为 null 时为透明色,默认 #ffffff。
    • canvas: 用作绘图基础的现有画布元素,默认 null。
    • foreignObjectRendering: 如果浏览器支持,是否使用ForeignObject渲染,默认 false。
    • imageTimeout: 加载映像的超时(毫秒)默认 15000。设置为0以禁用超时。
    • ignoreElements: 回调函数,用于从渲染中移除匹配元素,默认 (element) => false。
    • logging:
  • 相关阅读:
    SSM客户管理系统CRM开发mysql数据库web结构java编程计算机网页源码eclipse项目
    以下关于服务器控件的叙述中正确的是
    SpringCache使用
    百战RHCE(第四十七战:运维工程师必会技-Ansible学习2-Ansible安装配置练习环境)
    学生HTML个人网页作业作品 简单的IT技术个人简历模板html下载 简单个人网页设计作业 静态HTML个人博客主页
    Android设计模式--Builder建造者模式
    【成像光敏描记图提取和处理】成像-光电容积描记-提取-脉搏率-估计(Matlab代码实现)
    25K测试老鸟6年经验的面试心得,四种公司、四种问题…
    Jmeter(七) - 从入门到精通 - 建立数据库测试计划实战<MySQL数据库>(详解教程)
    计算机毕业设计(附源码)python智慧后勤app
  • 原文地址:https://blog.csdn.net/Li_dengke/article/details/126414190
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号