html2canvas+jsPDF实现前端导出pdf
html2canvas+jsPDF实现前端导出pdf
- 安装插件包
npm install jspdf
npm install html2canvas
- 引入插件
import html2canvas from 'html2canvas';
import jsPDF from 'jspdf';
- 生成pdf
const perCanvas = document.createElement('canvas');perCanvas.style.backgroundColor = '#fff'const context = perCanvas.getContext('2d');html2canvas(this.$refs.pdfContent, {scale: 4, //放大防止模糊dpi: 300 // 处理模糊问题}).then((canvas) => {const canvasData = canvas.toDataURL('image/jpeg', 1.0);// pdf的尺寸const pdfWidth = canvas.width;const pdfHeight = pdfWidth * 1.414;//切割后的canvas图片的宽高,就等于每页pdf的宽高perCanvas.width = canvas.width;perCanvas.height = pdfHeight;// 每张图片的高度:适当减少100,上下各留50页边距const perHeight = pdfHeight - 100;// 计算切割次数let splitCount = Math.ceil(canvas.height / perHeight);if (splitCount * perHeight < canvas.height) splitCount++;//创建img对象,加载完整的canvas图片const img = new Image();img.src = canvasData;//创建pdf对象//待图片加载完成setTimeout(() => {let pdf = new jsPDF('p', 'pt', [pdfWidth, pdfHeight]);//切割canvas图片,贴到每一页pdf中for (let i = 0; i < splitCount; i++) {const startY = i * perHeight; // 起始y坐标// 清空画布context.clearRect(0, 0, perCanvas.width, pdfHeight);context.fillStyle = '#fff';context.fillRect(0, 0, perCanvas.width, pdfHeight);// 绘制当前切割区域的图片context.drawImage(img, 0, startY, perCanvas.width, perHeight, 0, 0, perCanvas.width, perHeight);const perCanvasData = perCanvas.toDataURL('image/jpeg', 1.0);pdf.addImage(perCanvasData, 'JPEG', 0, 50, perCanvas.width, perCanvas.height, '', 0);if (i < splitCount - 1) pdf.addPage();};let pdfBlob = pdf.output('blob');// pdf.save("content.pdf"); 执行此api会直接下载this.showpdf = falselet signBlob = new FormData() //把文件上传到后台signBlob.append('file', pdfBlob, ".pdf")//此处将signBlob上传即可}, 0)
相关文章:
html2canvas+jsPDF实现前端导出pdf
html2canvasjsPDF实现前端导出pdf 安装插件包 npm install jspdf npm install html2canvas引入插件 import html2canvas from html2canvas; import jsPDF from jspdf;生成pdf const perCanvas document.createElement(canvas);perCanvas.style.backgroundColor #fffconst …...
Paimon新版本核心特性和生产实践解读
最近Apche Paimon发布了最新版本0.7.0,在这个版本中,Paimon对一些新特性进行了增强。 Paimon在数据湖领域发展迅速,未来会在整个数据开发领域占有很重要的地位,今天我们来盘点一下当前能力的特点以及在生产环境中的使用情况。 Loo…...
Java设计模式-策略模式
策略模式1 概述2 结构3 案例实现4 优缺点5 使用场景6 JDK源码解析 策略模式 1 概述 先看下面的图片,我们去旅游选择出行模式有很多种,可以骑自行车、可以坐汽车、可以坐火车、可以坐飞机。 作为一个程序猿,开发需要选择一款开发工具&#x…...
vxe-table配合Export2Excel导出object类型数据{type,count}。表格数据呈现是利用插槽,导出只要count该怎么做
先贴一张数据来: 一、然后是vxe-grid的columns配置: 然后就正常用封装好的Export2Excel就行。 碰到一次在控制台报错: 没复现出来,大概就说是count咋样咋样。 以后碰到的话再说,各位要用的话也注意看看 二、或者 用js…...
Java面试题(主要分清区别!!!)
RequestBody和ResponseBody的区别? RequestBody:接收json或xml数据 ResponseBody的:返回json或xml数据 RestController和Controller的区别? Controller:默认返回的是jsp页面 RestController:返回的是一个js…...
OD_2024_C卷_200分_2、石头剪刀布【JAVA】【逻辑分析】
题目描述 石头剪刀布游戏有 3 种出拳形状:石头、剪刀、布。分别用字母A、B、C表示。 游戏规则: 出拳形状之间的胜负规则如下: A > B; B > C; C > A; “>” 左边一个字母,表示相对…...
矩阵求导笔记
文章目录 1. ML中为什么需要矩阵求导2. 向量函数与矩阵求导初印象3. YX 拉伸术3.1 f(x)为标量,X为列向量3.2 f(x)为列向量,X 为标量3.3 f(x)为列向量,X 为列向量 4. 常见矩阵求导公式4.1 Y A T X YA^TX YATX4.2 Y X T A X YX^TAX YXTAX 1…...
全量知识系统问题及SmartChat给出的答复 之19 关于演示模板
Q.60 可参考的演示模版 (word-def occupiedinterest 5type EBsubclass SEBtemplate (script $Demonstrateactor nilobject nildemands nilmethod (scene $Occupyactor nillocation nil))fill (((actor) (top-of *actor-stack*))((method actor) (t…...
Linux学习——线程的控制
目录 编辑 一,线程的创建 二,线程的退出 1,在子线程内return 2,使用pthread_exit(void*) 三,线程等待 四,线程获取自己的id值 五,线程取消 六,线程分离 一,线程的创建 在对…...
Rust常用特型之Drop特型
Rust常用特型之Drop特型.md在Rust标准库中,存在很多常用的工具类特型,它们能帮助我们写出更具有Rust风格的代码。 今天,我们主要学习Drop特型。 (注:本文更多的是对《Programing Rust 2nd Edition》的自己翻译和理解&…...
嵌入式 Linux 学习
在学习嵌入式 Linux 之前,我们先来了解一下嵌入式 Linux 有哪些东西。 1. 嵌入式 Linux 的组成 嵌入式 Linux 系统,就相当于一套完整的 PC 软件系统。 无论你是 Linux 电脑还是 windows 电脑,它们在软件方面的组成都是类似的。 我们一开电…...
Makedown语法
这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…...
SQLite语句
1.重写SQLiteOpenHelper // 例. public class MySQLiteOpenHelper extends SQLiteOpenHelper {public MySQLiteOpenHelper(Nullable Context context, Nullable String name, Nullable SQLiteDatabase.CursorFactory factory, int version) {super(context, name, factory, ve…...
Spring揭秘:Aware接口应用场景及实现原理!
内容概要 Aware接口赋予了Bean更多自感知的能力,通过实现不同的Aware接口,Bean可以轻松地获取到Spring容器中的其他资源引用,像ApplicationContext、BeanFactory等。 这样不仅增强了Bean的功能,还提高了代码的可维护性和扩展性&…...
校园小情书微信小程序,社区小程序前后端开源,校园表白墙交友小程序
功能 表白墙卖舍友步数旅行步数排行榜情侣脸漫画脸个人主页私信站内消息今日话题评论点赞收藏 效果图...
从Pandas到Polars :数据的ETL和查询
对于我们日常的数据清理、预处理和分析方面的大多数任务,Pandas已经绰绰有余。但是当数据量变得非常大时,它的性能开始下降。 本文将介绍如何将日常的数据ETL和查询过滤的Pandas转换成polars。 图片 Polars的优势 Polars是一个用于Rust和Python的Data…...
Node.Js编码注意事项
Node.js 中不能使用 BOM 和 DOM 的 API,可以使用 console 和定时器 APINode.js 中的顶级对象为 global,也可以用 globalThis 访问顶级对象 浏览器端js的组成 Node.js中的JavaScript组成 相比较之下发现只有console与定时器是两个API所共有的ÿ…...
floodfill算法题目
前言 大家好,我是jiantaoyab,在下面的题目中慢慢体会floodFill算法,虽然是新的算法,但是用的思想和前面的文章几乎一样,代码格式也几乎一样,但不要去背代码 图像渲染 https://leetcode.cn/problems/flood…...
AI相关的实用工具分享
AI实用工具大赏:赋能科研与生活,探索AI的无限可能 前言 在数字化浪潮汹涌而至的今天,人工智能(AI)已经渗透到我们生活的方方面面,无论是工作还是生活,都在悄然发生改变。AI的崛起不仅为我们带…...
K8s — PVC|PV Terminating State
在本文中,我们将讨论PV和PVC一直Terminating的状态。 何时会Terminting? 在以下情况下,资源将处于Terminating状态。 在删除Bounded 状态的PVC之前,删除了对应的PV,PV在删除后是Terminting状态。删除PVC时,仍有引用…...
Pixel Dream Workshop部署指南:多用户共享服务器下的资源隔离与并发优化
Pixel Dream Workshop部署指南:多用户共享服务器下的资源隔离与并发优化 1. 项目概述 像素幻梦 (Pixel Dream Workshop) 是一款基于 FLUX.1-dev 扩散模型构建的下一代像素艺术生成工具。它采用独特的16-bit像素工坊视觉设计,为创作者提供沉浸式的AI绘图…...
TCP/IP协议详解:高性能服务器开发的底层基石恫
1. 核心概念 在 Antigravity 中,技能系统分为两层: Skills (全局库):实际的代码、脚本和指南,存储在系统级目录(如 ~/.gemini/antigravity/skills)。它们是“能力”的本体。 Workflows (项目级)…...
掌握类人记忆,解锁AI大模型潜力:小白也能轻松收藏学习!
AI智能体(Agent)的热度不减,然而许多Agent系统都有一个共同的痛点就是“健忘症”,尤其是上下文过长时,更为明显。这种缺乏长期、连贯记忆的能力,极大地限制了AI智能体的潜力和用户体验。它们很难真正理解用…...
2026年04月11日最热门的开源项目(Github)
根据提供的榜单,这里是对各个项目的分析和趋势观察: 1. 热门语言分析 Python 是榜单中最常用的编程语言(例如:NousResearch/hermes-agent, microsoft/markitdown, OpenBMB/VoxCPM等),显示出Python在开发代…...
毛概核心考点速记:50道高频选择题精析
1. 高频选择题命题规律解析 选择题作为毛概考试的主要题型,其命题往往遵循特定规律。从近5年真题统计来看,高频考点集中在"马克思主义中国化进程"、"社会主义本质理论"、"初级阶段基本路线"三大板块,占比超过6…...
如何完整备份QQ空间历史说说:GetQzonehistory的终极解决方案
如何完整备份QQ空间历史说说:GetQzonehistory的终极解决方案 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾担心那些记录青春点滴的QQ空间说说会随着时间流逝而消失…...
AI时代年轻人还需要考公务员吗?这个答案值得所有求职者看看
稳定真的比梦想更重要吗?一、开篇亮观点:AI时代,考公务员依然是普通人最好的选择之一最近几年,考公的热度越来越高,哪怕AI发展得再快,也没拦住每年几百万年轻人挤这座独木桥。网上有一种声音喊得很大&#…...
从一个地狱笑话看大模型的推理机制撕
. GIF文件结构 相比于 WAV 文件的简单粗暴,GIF 的结构要精密得多,因为它天生是为了网络传输而设计的(包含了压缩机制)。 当我们用二进制视角观察 GIF 时,它是由一个个 数据块(Block) 组成的&…...
STM32裸机4-bit驱动HD44780字符LCD库
1. 项目概述CharLcd4bit是一款专为 STM32F103RB 微控制器(如 NUCLEO-F103RB 开发板)设计的轻量级字符型液晶显示驱动库,面向标准 HD44780 兼容的 162 字符 LCD 模块(典型型号:JHD162A、LM016L、PC1602 等)&…...
RegisterWriter:ROHM传感器寄存器操作的C++类型安全封装库
1. RegisterWriter 库概述RegisterWriter 是 ROHM 半导体为加速其传感器驱动开发而设计的一套轻量级 C 硬件抽象层(HAL)辅助库,核心定位并非替代标准 MCU HAL(如 STM32 HAL 或 Nordic nRF SDK),而是作为寄存…...
