尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
前端html2canvas结合print-js打印页面,并解决多余空白页问题
一、功能前端html2canvas打印 HTML页面局部打印二、代码结合print-js打印页面importhtml2canvasfromhtml2canvas;importprintJSfromprint-js;/** 打印*/consthandleDownloadasync(){console.log(inputRef.current.scrollWidth,inputRef.current.scrollWidth,inputRef.current.scrollHeight);constcanvasawaithtml2canvas(inputRef.current,{scrollX:0,// 水平滚动位置scrollY:0,// 垂直滚动位置width:inputRef.current.scrollWidth,// 截取的宽度height:inputRef.current.scrollHeight,// 截取的高度useCORS:true,// 启用跨域资源支持allowTaint:true,// 允许污染图像如果需要scale:1,// 缩放比例logging:true,// 开启日志输出以帮助调试backgroundColor: #fff,// 背景颜色如果需要透明背景});constdataURLcanvas.toDataURL(image/png);// 使用 printJS 打印图片printJS({printable:dataURL,type:image,scanStyles:false,base64:true,//方法1style:body{margin:0},//方法2需要调整,按需求修改body{margin:10px}边距style:media print { page {size: auto; margin: 0; } body{margin:10px},targetStyles:[*],});setAssignPersonType(false);};三、容易出现的问题场景打印指定页面元素html2canvas先转成图片再打印发现两页以上就会多出一页空白页边距的原因解决打印图片的时候设置下style属性设置body{margin:0}}或body{margin:10px},按照需求修改margin//方法1style:body{margin:0},//方法2需要调整style:media print { page {size: auto; margin: 0; } body{margin:10px; padding: 0;}},constelementinputRef.current;if(!element){message.error(打印元素不存在);return;}// 获取指定DOM元素的尺寸和位置信息,返回一个DOMRect对象constrectelement.getBoundingClientRect();constoriginalOverflowelement.style.overflow;constoriginalPositionelement.style.position;html2canvaswidth:element.scrollWidth,// 截取的宽度或用rectheight:element.scrollHeight,// 截取的高度或用rect// 确保所有内容都被渲染onclone:(clonedDoc){// 在克隆文档中设置样式以确保完整显示clonedDoc.documentElement.style.overflowvisible;clonedDoc.body.style.overflowvisible;},编译后// 恢复原始样式element.style.overfloworiginalOverflow;element.style.positionoriginalPosition;完整importhtml2canvasfromhtml2canvas;importprintJSfromprint-js;consthandleDownloadasync(){constelementinputRef.current;if(!element){message.error(打印元素不存在);return;}try{// 获取指定DOM元素的尺寸和位置信息,返回一个DOMRect对象constrectelement.getBoundingClientRect();constoriginalOverflowelement.style.overflow;constoriginalPositionelement.style.position;// 临时设置样式以确保完整渲染element.style.overflowvisible;element.style.positionrelative;constcanvasawaithtml2canvas(element,{width:element.scrollWidth,// 截取的宽度或用rectheight:element.scrollHeight,// 截取的高度或用rectscroll:true,// 捕获滚动区域scale:1,// 提高分辨率logging:true,// 开启日志useCORS:true,// 允许跨域图片allowTaint:true,// 允许污染画布backgroundColor:#ffffff,// 背景色// 确保所有内容都被渲染onclone:(clonedDoc){// 在克隆文档中设置样式以确保完整显示clonedDoc.documentElement.style.overflowvisible;clonedDoc.body.style.overflowvisible;},});// 恢复原始样式element.style.overfloworiginalOverflow;element.style.positionoriginalPosition;constdataURLcanvas.toDataURL(image/png);// 使用 printJS 打印图片printJS({printable:dataURL,type:image,scanStyles:false,base64:true,style:media print { page {size: auto; margin: 0; } body{margin:0px; padding: 0;}},targetStyles:[*],});setAssignPersonType(false);}catch(error){console.error(打印失败:,error);message.error(打印失败请重试);setAssignPersonType(false);}};2、handleDownloadasync(){constelementthis.sheetRef.current;if(!element)return;constoriginalOverflowelement.style.overflow;constoriginalPositionelement.style.position;// 临时展开元素使 html2canvas 能捕获全部内容element.style.overflowvisible;element.style.positionrelative;try{constcanvasawaithtml2canvas(element,{width:element.scrollWidth,height:element.scrollHeight,// scroll: true,useCORS:true,allowTaint:true,scale:1,logging:true,backgroundColor:#fff,onclone:(clonedDoc){clonedDoc.documentElement.style.overflowvisible;clonedDoc.body.style.overflowvisible;},});constdataURLcanvas.toDataURL(image/png);printJS({printable:dataURL,type:image,scanStyles:false,base64:true,style:media print { page {size: auto; margin: 0; } body{margin:0px}},targetStyles:[*],});}catch(error){console.error(打印失败:,error);message.error(打印失败请重试);}finally{// 恢复原始样式element.style.overfloworiginalOverflow;element.style.positionoriginalPosition;this.setState({handleDownloadType:false,});}};四、解决打印不全问题使用 scroll: false 避免滚动区域导致的截取问题正确计算元素尺寸优先使用 scrollWidth/scrollHeight通过 onclone 回调确保克隆文档中的元素完整显示
RELATED

相关推荐

基于Django的StockMing股票预测系统:从ORM建模到ECharts可视化全解析

基于Django的StockMing股票预测系统:从ORM建模到ECharts可视化全解析

简介:StockMing股票预测系统是基于Django框架的完整设计源码,面向Python Web开发者、金融数据分析人员以及机器学习实践者,解决从股票数据获取、预处理到价格预测、可视化展示的一站式落地问题。资源共计646个文件,包含334个JavaS…

📅 2026/9/8 19:33:27
Puppeteer 请求拦截完全指南:从基础拦截到 Cooperative Intercept Mode 协作式拦截

Puppeteer 请求拦截完全指南:从基础拦截到 Cooperative Intercept Mode 协作式拦截

Puppeteer 请求拦截完全指南&#xff1a;从基础拦截到 Cooperative Intercept Mode 协作式拦截 【免费下载链接】puppeteer JavaScript API for Chrome and Firefox 项目地址: https://gitcode.com/GitHub_Trending/puppeteer1/puppeteer </&#xff5c;&#xff5c;…

📅 2026/9/8 19:33:27
从JSON数据清洗到数据库导入:背单词词库建设的实战记录

从JSON数据清洗到数据库导入:背单词词库建设的实战记录

我原本以为&#xff0c;把几千个单词塞进数据库&#xff0c;最折磨人的环节是写 INSERT 语句&#xff0c;直到 danci 3 这个项目做到一半&#xff0c;我才发现自己幼稚得可爱。danci 是一个背单词工具&#xff0c;第三版的目标很简单&#xff1a;把散落在多个 JSON 文件里的几千…

📅 2026/9/8 19:33:27
MORE NEWS

更多资讯

📰

2026年Claude Code插件实战:9款提升效率的必备插件

Claude Code 的插件生态&#xff0c;2026 年已经彻底爆发了。我 2025 年初刚接触这个命令行工具的时候&#xff0c;市面上能叫出名字的插件两只手数得过来&#xff0c;基本都在折腾怎么让 AI 帮你写 commit message。现在你再搜 Claude Code 插件&#xff0c;几百个起跳&#x…

📰

tiny11builder:让 Windows 11 安装镜像瘦掉近一半的 PowerShell 脚本

tiny11builder&#xff1a;让 Windows 11 安装镜像瘦掉近一半的 PowerShell 脚本 【免费下载链接】tiny11builder Scripts to build a trimmed-down Windows 11 image. 项目地址: https://gitcode.com/GitHub_Trending/ti/tiny11builder tiny11builder 是一套用 PowerSh…

📰

GitHub Trending周报:AI编程工具与架构可核验实战

这周GitHub Trending&#xff08;2026年W35周&#xff09;刷下来&#xff0c;说几点跟以往不太一样的感受&#xff1a;上榜的不再是清一色的“AI绘画小玩具”&#xff0c;而是出现了几个明显冲着“解决真实工程问题”去的项目。 awesome-gpt-image-2 直接登顶资源榜&#xff…

📰

Switch 升到 19.0.1 后 Atmosphere 报 Package1 错误?跟着修好 Fusee 启动

Switch 升到 19.0.1 后 Atmosphere 报 Package1 错误&#xff1f;跟着修好 Fusee 启动 【免费下载链接】Atmosphere Atmosphre is a work-in-progress customized firmware for the Nintendo Switch. 项目地址: https://gitcode.com/GitHub_Trending/at/Atmosphere 一句…

📰

opencode实战指南:终端AI编码Agent安装、配置与高阶玩法

如果你最近和我一样&#xff0c;被 Claude Code 和 Codex CLI 这类终端 AI 编码 Agent 搅得心痒痒&#xff0c;那你大概率也刷到了 opencode 这个名字。它不是哪家大厂出的&#xff0c;而是开源基础设施团队 SST 发起的一个项目&#xff0c;主打开箱即用、多模型通吃。我把它…

📰

DB-GPT 智能数据分析助手:从一句提问到图表报告一步到位(新手指南)

DB-GPT 智能数据分析助手&#xff1a;从一句提问到图表报告一步到位&#xff08;新手指南&#xff09; 【免费下载链接】DB-GPT open-source agentic AI data assistant for the next generation of AI Data products. 项目地址: https://gitcode.com/GitHub_Trending/db/DB…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬