首页 > 其他分享 >react-html2canvas-jspdf 自动分页导出pdf

react-html2canvas-jspdf 自动分页导出pdf

时间:2023-05-11 09:23:22浏览次数:40  
标签:jspdf react canvas renderedHeight height html2canvas width pdf page

// 新建exportPDF.js文件
import html2canvas from 'html2canvas'; import jsPDF from 'jspdf';
function generatePDF(id, title) {   //下载pdf方法   let demo = document.getElementById(id);   demo.style.overflow = 'visible';   html2canvas(demo, {     allowTaint: true, //允许跨域     height: document.getElementById(id).scrollHeight, //     width: document.getElementById(id).scrollWidth, //为了使横向滚动条的内容全部展示,这里必须指定     background: "#FFFFFF", //如果指定的div没有设置背景色会默认成黑色     // dpi: 300,     scale: 1.5,     useCORS: true, //允许canvas画布内 可以跨域请求外部链接图片, 允许跨域请求。   }).then((canvas) => {     console.log(canvas, 'canvas')     let pdf = new jsPDF('p', 'mm', 'a4'); //A4纸,纵向     let ctx = canvas.getContext('2d'),       a4w = 190,       a4h = 277, //A4大小,210mm x 297mm,四边各保留10mm的边距,显示区域190x277       imgHeight = Math.floor(a4h * canvas.width / a4w), //按A4显示比例换算一页图像的像素高度       renderedHeight = 0;
    while (renderedHeight < canvas.height) {       let page = document.createElement("canvas");       page.width = canvas.width;       page.height = Math.min(imgHeight, canvas.height - renderedHeight); //可能内容不足一页       //用getImageData剪裁指定区域,并画到前面创建的canvas对象中       page.getContext('2d').putImageData(ctx.getImageData(0, renderedHeight, canvas.width, Math.min(         imgHeight, canvas.height - renderedHeight)), 0, 0);       pdf.addImage(page.toDataURL('image/jpeg', 1.0), 'JPEG', 10, 10, a4w, Math.min(a4h, a4w * page.height /         page.width)); //添加图像到页面,保留10mm边距       renderedHeight += imgHeight;       if (renderedHeight < canvas.height) pdf.addPage(); //如果后面还有内容,添加一个空页     }     pdf.save(title + '.pdf');   })   demo.style.overflow = 'auto'; }
export { generatePDF };
// 新建index.jsx文件,引用generatePDF
import { generatePDF } from "@/utils/exportPDF";   return (   <div>     <Button       onClick={() => {         generatePDF("contentPage", "导出pdf文件的名字");       }}     >导出PDF</Button>     <div style={{ height: '100vh' }} id="contentPage">       // 页面内容     </div>   </div> )

 

标签:jspdf,react,canvas,renderedHeight,height,html2canvas,width,pdf,page
From: https://www.cnblogs.com/lou-0820/p/17390001.html

相关文章

  • ReactRedux工具包reduxjs/toolkit的使用
    首先可以先看一下Redux如何工作store负责存储数据,相当于仓库,action负责dispatch派发数据,reducer负责接收处理数据然后交给store(个人理解可能有些偏差欢迎交流斧正)传统redux写法(旧)//reducerconstcounterReducer=(state={counter:0},action)=>{if(action.type......
  • React
    ReactReactsetState异步同步在setTimeout、Promise等原生事件API调用中setState和useState是同步执行的,立即执行renderClassComponent能获取到最新值=>this.state=> 引用类型FunctionComponent不能获取到最新值=>只能得到之前的值=> 闭包多次执......
  • React笔记-组件(一)
    React学习笔记-组件(一未完成)特点声明式组件化跨平台React脚手架a.全局安装react脚手架create-react-appnpminstallcreate-react-app-g&npxcreate-react-appmy-appb.使用create-react-app创建react应用,如果直接使用npx则无需执行这一步,直接执行第3步c......
  • React笔记-事件(三)
    React学习笔记-事件(三)定义事件React元素的事件处理和DOM元素的很相似但是有一点语法上的不同React事件的命名采用小驼峰式(camelCase)而不是纯小写如点击事件onClickimportReactfrom'react'exportdefaultclasslearnEventextendsReact.Component{///......
  • React笔记-样式(二)
    React学习笔记-样式(二)内联样式importReactfrom"react";exportdefaultclassLearnStyleextendsReact.Component{render(){return(<div>{/*以下两种方法都可以一种不用引号将css以小驼峰方式写另一种加上引号写......
  • React笔记-渲染列表Key(五)
    React学习笔记-渲染列表Key(五)渲染列表需要添加key属性importReactfrom"react"exportdefaultclassLearnKeyextendsReact.Component{state={infos:[{name:'Bob',age:18},{name:'kitty',age:20},{name:......
  • React笔记-state(四)
    React学习笔记-state(四)概念state的主要作用是用于组件保存控制以及修改自己的状态它算是组件的私有属性不可通过外部访问和修改只能通过组件内部的this.setState来修改修改state属性会导致组件的重新渲染注意:如果直接通过this.state.xxx的方式修改,组件不会重新渲染,但......
  • ReactHub:我用 ChatGPT 搞了一个 React 的资源导航网站,谁有我用心啊!
    大家好,我是DOM哥。图谱年年有,今年我来盘!之前已经盘完了Vue的技术图谱,今天来盘React的。我用ChatGPT开发了一个React的资源导航网站。不管你是资深React用户,还是刚入门想学习React的小白,这个网站都能帮助到你。网站地址:https://dombro.site/react#/react项目托管......
  • react 杂记2
    大括号-JavaScript的“新世界”{变量}  {方法(param)}  {逻辑}   {逻辑+html}  {}里面还是可以应用变量 再用{}获取即可 函数(onClick),变量(movieName),插槽(children),都是作为props传递给子组件的 添加事件注意:传递的是一个函数 自定义事件: 以o......
  • React Native之React基础
    ReactNative的基础是React,是在web端非常流行的开源UI框架。要想掌握ReactNative,先了解React框架还是很有帮助的。主要理解三个概念:组件、状态和JSX。使用组件的方式描述UI 使用组件的方式描述UI在React中,所有的UI都是通过组件去描述和组织的。可以认为,Reac......