纯前端 -- html转pdf插件总结

news2025/2/10 22:19:51

一、html2canvas+jsPDF(文字会被截断):

将HTML元素呈现给添加到PDF中的画布对象,不能仅使用jsPDF,需要html2canvas或rasterizeHTML

html2canvas+jsPDF的具体使用链接

二、html2pdf(内容显示不全+文字会被截断):

下载或者安装html2pdf:官网

1、将文档放在本地,用原生js进行引用和使用。

① 新建一个名为 html2pdf.js 的文件,并且将线上的内容进行复制。
② 引入 js 文件:

// js直接引入 -- 未尝试
<script type="text/javascript" src="https://cdn.bootcdn.net/ajax/libs/html2pdf.js/0.10.1/html2pdf.bundle.js"></script>


// layui使用
// 首先在html2pdf.js文件中添加exports
layui.define([],function(exports){
    // 复制的内容...
    exports('html2pdf',html2pdf);
})
// 其次进行自定义插件的引入
layui.define(['appsmenu'],function (exports) {
	exports("conf", {
	    // 第三方扩展
		extend: {
			// 引入html2pdf
			html2pdf: "lay/extends/html2pdf",
		}
	}
})

2、使用 npm 进行安装使用:

npm install --save html2pdf.js

3、在原生js中使用:

// 点击下载按钮
document.getElementById("btn").onclick=function(){
  let opt = {
      margin: 1,  // pdf外边距
      filename:  'pdf生成'+'.pdf', // 导出的pdf名称
      image: { // 图片的类型和质量,详情: https://github.com/eKoopmans/html2pdf.js#image-type-and-quality
        type: 'jpeg',
        quality: 0.98  // 取0-1,默认0.95,仅适用  jpeg/webp
      },
      html2canvas: {
        scale: 1,
        dpi: 92,
      },
      jsPDF: { // 详情:http://www.rotisedapsales.com/snr/cloud2/website/jsPDF-master/docs/jsPDF.html
        unit: 'pt', // pt、mm、cm、in
        format: 'a4', 
        orientation: 'portrait' // 纵向p,横向l
      }
    };
  html2pdf().set(opt).from(document.getElementById('box')).save();
}

4、效果:

在这里插入图片描述

三、print.js(内容截断:包括不限于图表截断、动态表格行截断):

下载或者安装PrintJs:官网

1、将文档放在本地,用原生js进行引用和使用。

① 新建一个名为 print.js 的文件,并且将线上的内容进行复制。
② 引入 js 文件:

// js直接引入 -- 未尝试
<script type="text/javascript" src="https://cdn.bootcdn.net/ajax/libs/print-js/1.6.0/print.js"></script>


// layui使用
// 首先在print.js文件中添加exports
layui.define([],function(exports){
    // 复制的内容...
    exports('print',print);
})
// 其次进行自定义插件的引入
layui.define(['appsmenu'],function (exports) {
	exports("conf", {
	    // 第三方扩展
		extend: {
			// 引入print-js
			print: "lay/extends/print",
		}
	}
})

2、使用 npm 进行安装使用:

npm install print-js --save

3、原生js使用:

// 点击下载按钮
document.getElementById("btn").onclick=function(){
  printJS({
    printable: 'box', // 数据源:pdf or image的url,html类型则填打印区域元素id,json类型则是数据object。
    type: 'html', // 默认pdf,可选类型:pdf, html, image, json
    // header: '暂时不要标题', // 应用于页面顶部标题文本。
    targetStyles: ['*'],
    scanStyles: false, 	//此属性默认为true,printJs会自动扫描当前html结构所用的样式表
    style: stringCssFunc(), // 打印的内容是没有css样式的,此处需要string类型的css样式
})
}

var stringCssFunc = function() {
	return `
		@page {margin:0 10mm};
		body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,input,button,textarea,p,blockquote,th,td,form,pre{margin: 0; padding: 0; -webkit-tap-highlight-color:rgba(0,0,0,0);}
		a:active,a:hover{outline:0}
		img{display: inline-block; border: none; vertical-align: middle;}
		li{list-style:none;}
		table{border-collapse: collapse; border-spacing: 0;}
		h1,h2,h3{font-weight: 400;}
		h4, h5, h6{font-size: 100%; font-weight: 400;}
		button,input,select,textarea{font-size: 100%; }
		input,button,textarea,select,optgroup,option{font-family: inherit; font-size: inherit; font-style: inherit; font-weight: inherit; outline: 0;}
		pre{white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;}
		
		body{line-height: 24px; font: 14px Helvetica Neue,Helvetica,PingFang SC,Tahoma,Arial,sans-serif;}
		hr{height: 1px; margin: 10px 0; border: 0; clear: both;}
		a{color: #333; text-decoration:none; }
		a:hover{color: #777;}
		a cite{font-style: normal; *cursor:pointer;}
	`
}

四、jsPDF-Autotable(只对表格起作用):

下载或者安装jsPDF-Autotable:这个应该是官网,找不到别的了

1、将文档放在本地,用原生js进行引用和使用。

① 新建一个名为 autotable.js 的文件,并且将线上的内容进行复制。
② 引入 js 文件:

// js直接引入 -- 未尝试
<script type="text/javascript" src="https://cdn.staticfile.org/jspdf-autotable/3.5.31/jspdf.plugin.autotable.js"></script>


// layui使用
// 首先在autotable.js文件中添加exports
layui.define([],function(exports){
    // 复制的内容...
    // 将复制的内容引出的default改为autotable,可以看下面的图片1
    exports('autotable',autotable);
})
// 其次进行自定义插件的引入
layui.define(['appsmenu'],function (exports) {
	exports("conf", {
	    // 第三方扩展
		extend: {
			// 引入jsPDF-Autotable
			autotable: "lay/extends/autotable",
		}
	}
})

图片1:
在这里插入图片描述

2、使用 npm 进行安装使用:

npm install jspdf -S

npm install jspdf-autotable -S

3、原生js使用:

// 点击下载按钮
document.getElementById("btn").onclick=function(){
  const doc = new jsPDF()
  // 当前的dom元素,应该是table元素上面的类名,table里面包含th、tr、td等
  // 如果使用除了table、th、tr、td之外的元素,那么将会报错,或者打印的是空白
  autoTable(doc, { html: '#box' })
  doc.save('下载的文件.pdf')
}

四、pdfmake(只适用很简单的页面结构,没有什么样式,尝试失败):

pdfmake默认不支持中文,所以需要安装字体文件

下载或者安装pdfmake及字体js:官网

1、将文档放在本地,用原生js进行引用和使用。

① 新建一个名为 pdfmake.min.js 的文件,并且将线上的内容进行复制。
② 新建一个名为 vsfFonts.js的文件,并且将线上的内容进行复制。
③ 引入 js 文件:

// js直接引入 -- 未尝试
<script type="text/javascript" src="https://cdn.bootcdn.net/ajax/libs/pdfmake/0.2.7/pdfmake.min.js"></script>
<script type="text/javascript" src="https://cdn.bootcdn.net/ajax/libs/pdfmake/0.2.7/vfs_fonts.js"></script>

2、使用 npm 进行安装使用:

npm install pdfmake

3、原生js使用:

// 点击下载按钮
document.getElementById("btn").onclick=function(){
  var docDefinition = { // 描述的对象 -- 内容的结构数组、样式文件的引入都在这里写,感觉不适合复杂的页面结构
      content: "这里可以使用字符串,也可以使用数组",
      defaultStyle: {
          // 设置定义好的字体为默认字体
          font: "字体名",
      },
  };

  pdfMake.createPdf(docDefinition).download("下载的文件名", () => {
      console.log("下载完成的回调");
  })
}

五、pdf-lib(没看懂)

下载或者安装pdf-lib:官网

六、PDFKit、Puppeteer、wkhtmltopdf、PhantomJS都是在服务器端调用的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/864511.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【立创EDA】【1】原理图绘制常用操作

总线使用 作用&#xff1a;总线可以方便多个元件的连接总线必须配合总线分支使用原理图上的总线只是视觉上的效果&#xff0c;欲使网络完整&#xff0c;还需添加网络标签&#xff08;如下图&#xff0c;未添加网络标签时&#xff0c;即使总线连接完成&#xff0c;网络依旧不完…

【踩坑日记】【FreeRTOS】KEIL5 仿真调试时卡在 HardFault_Handler() 或者 UsageFault_Handler() 异常中断中

问题描述 使用 KEIL5 进行软件仿真调试时&#xff0c;进不去 main() 函数&#xff0c;按下 STOP 后再按下 RUN&#xff0c;发现有时候卡在 HardFault_Handler()&#xff0c;有时候却又卡在 UsageFault_Handler()。 解决历程 一般来说&#xff0c;如果程序真的有问题&#x…

08-2_Qt 5.9 C++开发指南_坐标系统和坐标变换

文章目录 1. 坐标变换函数2. 视口和窗口 1. 坐标变换函数 QPainter 在窗口上绘图的默认坐标系统如下图所示&#xff0c;这是绘图设备的物理坐标。 为了绘图的方便&#xff0c;QPainter 提供了一些坐标变换的功能&#xff0c;通过平移、旋转等坐标变换&#xff0c;得到一个逻辑…

Django框架-使用celery(一):django使用celery的通用配置,不受版本影响

目录 一、依赖包情况 二、项目目录结构 2.1、怎么将django的应用创建到apps包 三、celery的配置 2.1、celery_task/celery.py 2.2、celery_task/async_task.py 2.3、celery_task/scheduler_task.py 2.4、utils/check_task.py 四、apps/user中配置相关处理视图 4.1、基本…

Transformer(一)简述(注意力机制,NLP,CV通用模型)

目录 1.Encoder 1.1简单理解Attention 1.2.什么是self-attention 1.3.怎么计算self-attention 1.4.multi-headed 1.5.位置信息表达 2.decorder&#xff08;待补充&#xff09; 参考文献 1.Encoder 1.1简单理解Attention 比方说&#xff0c;下图中的热度图中我们希望专注于…

【Windows API】获取卷标、卷名

1、卷->卷标 使用FindFirstVolume()和FindNextVolume()函数体系&#xff0c;枚举系统所有卷&#xff08;Volume&#xff09;的例子&#xff0c;然后获取卷标、卷类型。这个方式可以枚举出没有驱动器号&#xff08;卷标&#xff09;的卷。 int TestMode1() {HANDLE hVolume…

DAY19

题目一 空间尝试模型 一个样本做行一个样本做列 范围尝试模型 以....做分隔 dp[i][j] 为以i为左界限 以j为右界限 求这个范围内的计算值(不对 是方法数) 这& | ^ 都是双目运算符 观察一下规律 整体字符数量一定为奇数(包括运算符和数字) 对应到数组中 数组的位一定是偶数…

CosmosAI欧盟数字超算新时代战略合作签约仪式在伦敦举行

据英国权威媒体获悉&#xff0c;由分布式超算网络服务商CosmosAI主办的欧盟数字超算新时代战略合作签约仪式将于8月14日英国伦敦历史悠久的莱福士OWO酒店隆重举办&#xff0c;该酒店曾作为爱德华七世国王加冕仪式以及丘吉尔二战办公室享誉盛名。 本次活动CosmosAI基金会联合创…

海思ss928部署手写数字识别模型

大致流程--------------------------------------------------------------------------------------------------------------------- 模型转换---------------------------------------------------------------------------------------------------- 1&#xff1a;准备MNI…

QPainter - 八卦时钟

QPainter - 八卦时钟 上一篇我们在画时钟的时候&#xff0c;已经把基本的钟表指针和刻度都绘制过了 想要完成八卦时钟&#xff0c;就要绘制这个里面的八卦了。 先上个图&#xff1a; 有人和我说八卦不能转 再来一张图&#xff1a; 背景的绘制 我们需要删除之前所绘制的白色…

攻防世界-web-getit

1. 题目描述 菜鸡发现这个程序偷偷摸摸在自己的机器上搞事情&#xff0c;它决定一探究竟。 获取到文件后&#xff0c;先查看文件信息 说明是一个可执行程序&#xff0c;没啥思路&#xff0c;先逆向 2. 思路分析 逆向后&#xff0c;找到main函数&#xff0c;查看逻辑 通过逆…

智安网络|网络安全:危机下的创新与合作

随着信息技术的迅猛发展和互联网的普及&#xff0c;我们进入了一个高度网络化的社会。网络在提供便利和连接的同时&#xff0c;也带来了许多安全隐患和挑战。 一、网络安全的危险 **1.数据泄露和隐私侵犯&#xff1a;**网络上的个人和机构数据存在遭受泄露和盗取的风险&#…

C#,入门教程(42)——各种括号“()[]{}<>“的用法总结

&#xff08;成对的&#xff09;括号是各种编程语言的核心要素。很多年前就想着写这样一篇专门关于各种括号的技术文章。一直未动笔&#xff0c;因为总想着偷懒&#xff0c;但凡有一个人写了&#xff0c;就无需我动手了。可惜的是&#xff0c;等了十多年&#xff0c;也没有出现…

集成接近和环境光传感器市场调查报告

集成接近和环境光传感器在单个传感器中集成接近和环境光感应功能。该传感器广泛应用于物联网 (IoT) 设备、消费电子产品和可穿戴设备&#xff0c;集成接近和环境光传感器可以自动调整屏幕亮度并根据接近情况打开/关闭屏幕&#xff0c;以降低设备功耗。集成接近和环境光传感器广…

【嵌入式学习笔记】嵌入式入门4——独立看门狗IWDG

1.IWDG简介 IWDG的全称&#xff1a;Independent watchdog&#xff0c;即独立看门狗&#xff0c;IWDG的本能&#xff1a;产生系统复位信号的计数器IWDG的特性&#xff1a;递减的计数器&#xff0c;时钟由独立的RC振荡器提供&#xff08;可在待机和停止模式下运行&#xff09; 看…

16bit、8 通道、500kSPS、 SAR 型 ADC——MS5188N

MS5188N 是 8 通道、 16bit 、电荷再分配逐次逼近型模数 转换器&#xff0c;采用单电源供电。 MS5188N 拥有多通道、低功耗数据采集系统所需的所有 组成部分&#xff0c;包括&#xff1a;无失码的真 16 位 SAR ADC &#xff1b;用于将输入配 置为单端输入&#xff0…

水力发电厂测量装置配置选型及厂用电管理系统

NB/T 10861-2021《水力发电厂测量装置配置设计规范》对水电厂的测量装置配置做了详细要求和指导。测量装置是水力发电厂运行监测的重要环节&#xff0c;水电厂的测量主要分为电气量测量和非电量测量。电气测量指使用电的方式对电气实时参数进行测量&#xff0c;包括电流、电压、…

linux下实现生产者和消费者 pv操作

线程同步与线程安全 生产者和消费者特点图示理解编程实现测试结果 生产者和消费者 特点 1.解耦:因为多了一个缓冲区&#xff0c;所以生产者和消费者并不直接相互调用&#xff0c;这样生产者和消费者的代码发生变化&#xff0c;都不会对对方产生影响。这样其实就是把生产者和消…

使用 Gradio 构建生成式 AI 应用程序(一): 图片内容读取app

今天我们来学习DeepLearning.AI的在线课程&#xff1a;Building Generative AI Applications with Gradio&#xff0c;该课程主要讲述利用gradio来部署机器学习算法应用程序, 今天我们来学习第一课&#xff1a;Image captioning app&#xff0c;该课程主要讲述如何从图片中读取…

优秀项目团队最突出的5项重要特征

一个优秀的开发团队&#xff0c;对于软件项目而言&#xff0c;其重要性不言而喻。否则项目团队一盘散沙&#xff0c;直接影响项目准时保质保量地交付。一般从大家的认可度来说&#xff0c;优秀团队最突出的特征&#xff0c;主要集中在以下几个方面&#xff1a; 1、目标明确 优秀…