当前位置: 首页 > news >正文

网页变成PDF下载到本地

开发过程中如何让整个网页 或者 网页中某一部分支持下载成pdf格式文件

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

以vue 为例 html2canvas

1.安装好 html2canvas 和 jspdf
2.页面引入

<template><div class="contract-form">xxxxxxxxxxxxxxxxx<button @click="downloadAsPDF" class="download-button">下载为PDF</button></div></template>  import html2canvas from 'html2canvas';
import jsPDF from 'jspdf';<script>downloadAsPDF() {const element = document.querySelector('.contract-form');const button = document.querySelector('.download-button');// 临时隐藏下载按钮button.style.display = 'none';// 临时缩小内容样式const originalStyles = {fontSize: element.style.fontSize,padding: element.style.padding,maxWidth: element.style.maxWidth};element.style.fontSize = '1px';element.style.padding = '30px';element.style.maxWidth = '1000px';const options = {scale: 2, // 保持高清晰度useCORS: true,allowTaint: true,logging: true,scrollX: 0,scrollY: 0,windowWidth: element.scrollWidth,windowHeight: element.scrollHeight,ignoreElements: (el) => {return false;},onclone: (clonedDoc) => {// 确保所有内容在渲染时可见clonedDoc.querySelector('.contract-form').style.overflow = 'visible';}};// 临时调整页面布局以确保所有内容可见const originalOverflow = element.style.overflow;element.style.overflow = 'visible';html2canvas(element, options).then(canvas => {const imgData = canvas.toDataURL('image/png');const pdf = new jsPDF('p', 'mm', 'a4');const imgProps = pdf.getImageProperties(imgData);const pdfWidth = pdf.internal.pageSize.getWidth();const pdfHeight = (imgProps.height * pdfWidth) / imgProps.width;// 单页导出pdf.addImage(imgData, 'PNG', 0, 0, pdfWidth, pdfHeight);pdf.save('委托检验合同书.pdf');// 恢复原始布局element.style.overflow = originalOverflow;button.style.display = 'block';});}

根据自己的需求 把对应的DOM 和值设置好直接可以生成pdf

功能 - 了解 html2canvas 支持的不同功能

以下是所有支持的 CSS 属性和值的列表。

background
background-clip (不支持 text)
background-color
background-image
url()
linear-gradient()
radial-gradient()
background-origin
background-position
background-size
border
border-color
border-radius
border-style (只支持 solid)
border-width
bottom
box-sizing
content
color
display
flex
float
font
font-family
font-size
font-style
font-variant
font-weight
height
left
letter-spacing
line-break
list-style
list-style-image
list-style-position
list-style-type
margin
max-height
max-width
min-height
min-width
opacity
overflow
overflow-wrap
padding
position
right
text-align
text-decoration
text-decoration-color
text-decoration-line
text-decoration-style (只支持 solid)
text-shadow
text-transform
top
transform (Limited support)
visibility
white-space
width
word-break
word-spacing
word-wrap
z-index

不支持的 CSS 属性 这些 CSS 属性当前版本还不支持


background-blend-mode
border-image
box-decoration-break
box-shadow
filter
font-variant-ligatures
mix-blend-mode
object-fit
repeating-linear-gradient()
writing-mode
zoom
http://www.dtcms.com/a/577017.html

相关文章:

  • Spring Boot 3 + Flyway 全流程教程
  • 【洛谷】枚举专题-二进制枚举 从子集到矩阵问题,经典应用与实现
  • 网站信息可以wordpress可视化编辑器插件
  • 机器学习训练过程中回调函数常用的一些属性
  • [iOS] GCD - 线程与队列
  • DHTMLX Gantt v9.1 正式发布:聚焦易用性与灵活性,打造更高效的项目管理体验
  • 团队介绍网站模板网站开发学什么语言
  • [AI 应用平台] Dify 在金融、教育、医疗行业的典型应用场景
  • Kiro 安全最佳实践:守护代理式 IDE 的 “防火墙”
  • 【Go】--文件和目录的操作
  • Go 语言变量作用域
  • 23、【Ubuntu】【远程开发】内网穿透:SSH 反向隧道
  • 【Linux】不允许你还不会实现shell的部分功能
  • Jmeter+ant+Jenkins 接口自动化框架-利用ant工具批量跑指定目录下的Jmeter 脚本
  • 网站建设制作 企业站开发哪家好兰州又发现一例
  • LeetCode 刷题【146. LRU 缓存】
  • 网站建设 招标公告c2c的代表性的电商平台
  • RedisCluster客户端路由智能缓存
  • K8s从Docker到Containerd的迁移全流程实践
  • Rust语言高级技巧 - RefCell 是另外一个提供了内部可变性的类型,Cell 类型没办法制造出直接指向内部数据的指针,为什么RefCell可以呢?
  • 【Python后端API开发对比】FastAPI、主流框架Flask、Django REST Framework(DRF)及高性能框架Tornado
  • 计算机外设与CPU通信
  • 玩转Rust高级应用 如何编译器对于省略掉的生命周期,不使用“自动推理”策略呢?
  • Python全栈项目:基于Django的电子商务平台开发
  • 网站建设怎么开票网站设计网页设计公司
  • Python实现GPT自动问答与保存
  • 深度强化学习,用神经网络代替 Q-table
  • seo网站建设技巧电线电缆技术支持中山网站建设
  • supabase外键查询语句
  • 【linux端cursor CLI常用命令】