vue2前端实现html导出pdf功能

news/2024/10/30 23:17:06/

1. 功能实现方案

1.html转换成canvas后生成图片导出pdf(本文选用)

  • html转canvas插件:html2canvas是一款将HTML代码转换成Canvas的插件;
  • canvas生成pdf:jsPDF是一个使用Javascript语言生成PDF的开源库

2.HTML代码转出pdf

wkhtmltopdf是一款将HTML代码转换成pdf的插件,表格场景使用居多

2.技术实现(基于html2canvas和jsPDF实现)

1.安装插件

npm install html2canvas
npm install jspdf

2.封装函数

这里函数参考了网上多种,最后自己选择了这种并发并修改了部分内容,实现可以传入两个参数来指定要导出为pdf的文件

src/utils/topdf.js

import html2Canvas from "html2canvas";
import JsPDF from "jspdf";export default {install(Vue, options) {console.log(options);// vue原型上挂载getPdf方法实现转换功能// 参数:(dom元素,导出文件的文件名)Vue.prototype.getPdf = function (dom, title) {html2Canvas(document.querySelector(dom), {allowTaint: true,}).then(function (canvas) {let contentWidth = canvas.width;let contentHeight = canvas.height;let pageHeight = (contentWidth / 592.28) * 841.89;let leftHeight = contentHeight;let position = 0;let imgWidth = 595.28;let imgHeight = (592.28 / contentWidth) * contentHeight;let pageData = canvas.toDataURL("image/jpeg", 1.0);let PDF = new JsPDF("", "pt", "a4");if (leftHeight < pageHeight) {PDF.addImage(pageData, "JPEG", 0, 0, imgWidth, imgHeight);} else {while (leftHeight > 0) {PDF.addImage(pageData, "JPEG", 0, position, imgWidth, imgHeight);leftHeight -= pageHeight;position -= 841.89;if (leftHeight > 0) {PDF.addPage();}}}PDF.save(title + ".pdf");});};},
};

3.全局注册

在main.js中导入并注册

//全局注册 打印pdf:
import htmlToPdf from "./utils/topdf";
Vue.use(htmlToPdf);

4.使用

解释:1.为需要打印的dom元素添加类名或者id名以方便获取dom

​ 2.给打印按钮添加点击事件

​ 2.1 点击事件触发全局挂载的getPdf方法

​ 2.2 参数为 (dom元素,导出pdf的文件名)

<button @click="getPdf('.pdf', 'file2')">导出pdf</button><div class="pdf"><p v-for="(item, index) in 50" :key="index">{{ item }}123123121322313212313132123</p></div>

5. 问题

会出现衔接问题

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hsxiY8Ie-1677647378317)(C:\Users\28132\AppData\Roaming\Typora\typora-user-images\1677646897722.png)]

防止截断可以参考这个博客https://www.cnblogs.com/jimyking/p/17101947.html

等有时间再自己总结


http://www.ppmy.cn/news/437103.html

相关文章

小米浏览器导出html,小米浏览器离线视频如何导出 小米浏览器离线视频导出教程...

小米浏览器是很多小伙伴在用的浏览器app&#xff0c;用户使用浏览器是可以下载网上的视频的&#xff0c;有小伙伴下载好了想要导出来&#xff0c;小米浏览器离线视频怎么导出&#xff0c;小编来为大家介绍。 小米浏览器离线视频怎么导出 在手机上下载安装两个软件&#xff0c;一…

webpack打包优化之减少代码体积(Tree shaking、babel)

一、Tree shaking (摇树优化) Webpack打包中的tree shaking指的是通过静态分析代码引用关系&#xff0c;在构建时仅打包项目中实际使用到的代码&#xff0c;从而将未使用过的代码排除在构建产物之外&#xff0c;减小项目体积。 在Tree shaking过程中&#xff0c;Webpack会自动…

美颜相机-

创建页面 窗体 按钮 字体 public void showUI(){JFrame jf new JFrame("图像处理");jf.setSize(1700,1200);jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);jf.setLayout(new FlowLayout());//创建按钮对象 |设置属性 文本 字体&#xff08;font&#xff09; 尺…

java实现美颜相机

看下实现效果 准备工作我们需要导入webcam包 ## 视频图像获取&#xff1a; http://webcam-capture.sarxos.pl/ ## 导包&#xff1a; - Eclipse : - * 项目: - 1: 右键项目名 Build Path - Config BuildPath - Lib - add Jars 选中 - IDEA : - 1:右键项目名 Module …

三.美颜相机开发

美颜相机开发 UI的使用&#xff1a; JFrame JButton Listener: 加入按钮实现点击什么滤镜特效就绘制什么滤镜&#xff01; 代码&#xff1a; 首先对UI进行编写 public class ImagePad {//使用字符串储存按钮名称String[] strs {"打开", "保存", &q…

flutter美颜相机插件

flutter美颜相机插件 beauty_cam&#xff08;github&#xff09; beauty_cam&#xff08;gitee&#xff09; beauty_cam&#xff08;pub.dev&#xff09; beauty_cam&#xff08;pub.flutter-io.cn&#xff09; flutter美颜相机 目前功能&#xff1a; 开关美颜拍照拍视频切…

JAVA PC端美颜相机

这是我在蓝杰做的第一个项目:PC端美颜相机。这个小程序的本质就是对一张图像做处理。存储在计算机的图像信息实际上是一个个像素点&#xff0c;不同的像素点有不同的rgb值&#xff0c;修改像素点的rgb值我们就可以将图像处理成我们想要的效果。 首先我们需要创建一个图形界面作…

美颜相机-磨皮实现

主要参考了《使用OPENCV简单实现具有肤质保留功能的磨皮增白算法》这篇文章&#xff0c;我使用了python实现&#xff0c;最主要的是直接按原文公式算的话&#xff0c;我这里一直有个问题就是原图中纯色的地方处理后会出现色彩斑点而且非常严重&#xff0c;不知道原作者是否有这…