首页 > 其他分享 >vue2之页面生成PDF导出并适应A4页面

vue2之页面生成PDF导出并适应A4页面

时间:2024-10-31 16:20:50浏览次数:1  
标签:canvas renderedHeight html2canvas let A4 vue2 pdf page 页面

一、技术

  vue2 、 elementUI 、 html2canvas  、 jsPDF

二、技术官网

  vue2:https://cn.vuejs.org/

  elementUi:https://element.eleme.cn/#/zh-CN

  html2canvas:https://html2canvas.hertzen.com/

  jsPDF:https://www.npmjs.com/package/jspdf

三、优缺点

  优点:只需要请求回来数据,前端自动可以生成PDF导出

  缺点:生成的 pdf 比较糊,而且表格在分页的时候容易分裂

四、实现思路

  ① 将 html 先转换成 canvas ,然后生成图片,最后再将图片转换成 pdf

  ② 需要先把页面适配一下 A4 纸张大小,不然下面切割的话会出问题

五、主要代码

import html2canvas from 'html2canvas'
import { jsPDF } from 'jspdf'

async handleUploadHTMLPDF() {
  try {
        // 获取dom元素
        const dom: any = document.querySelector('#id名称')
        if (dom) {
            html2canvas(dom).then(async canvas => {
                // A4纸,纵向
                let pdf = new jsPDF('p', 'mm', 'a4') 
                let ctx: any = canvas.getContext('2d')
                let a4w = 190
                 // A4大小,210mm x 297mm,四边各保留10mm的边距,显示区域190x277
                let a4h = 277
                // 按A4显示比例换算一页图像的像素高度
                let imgHeight = Math.floor((a4h * canvas.width) / a4w) 
                let renderedHeight = 0
                while (renderedHeight < canvas.height) {
                    let page: any = 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
                    )
                    // 添加图像到页面,保留10mm边距
                    pdf.addImage(
                        page.toDataURL('image/jpeg', 1.0),
                        'JPEG',
                        10,
                        10,
                        a4w,
                        Math.min(a4h, (a4w * page.height) / page.width)
                    ) 

                    renderedHeight += imgHeight
                    if (renderedHeight < canvas.height) {
                         // 如果后面还有内容,添加一个空页
                        pdf.addPage()
                    }
                    // delete page;
                }
                // 保存文件
                pdf.save('文档名称.pdf')
            })
        }
    } catch (err) {
        console.log(err)
    }
}

  注:该文档为个人理解所写,有误可建议修改

标签:canvas,renderedHeight,html2canvas,let,A4,vue2,pdf,page,页面
From: https://www.cnblogs.com/persistIn/p/18518171

相关文章

  • uniapp - 详细实现移动端公众号 H5 网页授权登录流程及示例代码,申请测试公众号全流程
    前言Vue版本,请访问这篇文章。在uni-appH5网站平台开发中,详解微信公众号网页接入微信授权登录示例代码,附带申请测试公众号全流程及配置教程,提供前端h5页面公众号网页实现授权登陆并获取用户昵称头像数据的示例源码,用自己项目跑出来的本地局域网IP段就可以拉起公众......
  • webMagic静态页面的爬取
     一:javamaven依赖:<dependency><groupId>us.codecraft</groupId><artifactId>webmagic-core</artifactId><version>0.7.4</version></dependency><dependency><groupId>us.codecraft</grou......
  • WebMagic动态页面爬取
    动态页面爬虫前的准备:https://www.cnblogs.com/maohuidong/p/18517953一:javamaven添加依赖:<dependency><groupId>us.codecraft</groupId><artifactId>webmagic-core</artifactId><version>0.7.4</version></dependency>&......
  • 界面控件Kendo UI for Angular 2024 Q3亮点 - 全新的页面模板
    随着最新的2024Q3版本,Progress使用户能够使用现成的页面模板和构建块更快地构建令人惊叹的应用程序,使您的Telerik和KendoUI开发体验更好。Telerik和KendoUI 2024Q3版本将焦点放在新推出的页面模板和构建块上,每个页面模板和构建块都预先配置了TelerikUIforBlazor、KendoU......
  • edge浏览器如何打开不安全页面的禁止权限?
    第一步解决edge浏览器中站点不安全问题的方法1、首先,我们点击打开edge浏览器,然后将我们的浏览器右上角的【…】图标点击打开。2、这时,我们在打开的窗口中,将【设置】选项进行点击一下。3、随后进入到设置页面中,我们将左侧的【cookie和网站权限】选项进行左键点击一下。4、这......
  • 『玩转Streamlit』--页面布局
    一个优秀的数据应用不仅仅是功能的强大,更在于其用户体验的打造。而良好的页面布局,作为用户体验的重要组成部分,不仅能够提升信息的可读性,还能引导用户高效地完成操作。反之,混乱的布局会让人感到困惑和挫败,甚至导致用户放弃使用应用。在Streamlit中,Sidebar(侧边栏)、Columns(列布局)......
  • 访问网站404页面时出现301报错
    主机上设置了404错误页面,但在访问网页时,却出现了301报错。这是因为主机域名开启了强制HTTPS加密访问功能,导致服务器在处理HTTP请求时,先返回301状态码并自动跳转到HTTPS请求,然后再去请求404错误页面资源,从而导致301报错。可能原因强制HTTPS加密访问功能:当您对网站服务器发出一个......
  • html网页制作在线电影网页设计-html电影资讯博客网站模板(5个页面)
    html网页制作在线电影网页设计-html电影资讯博客网站模板(5个页面)一款黑色响应式的电影新闻资讯(首页/电影/明星/热点/新闻)等页面,电影热点资讯,电影博客类型网页模板html,html网站期末作品~电影资讯博客网站模板(HTML+CSS+JavaScript)涵盖个人、电影、美食、动漫、公司、......
  • 第七章利用CSS和多媒体美化页面
    通过对网页中元素、布局和色彩的合理设计,可以使网页达到较好的视觉效果。网页中常用超链接、列表和表格等网页元素,所以,对这些元素进行美化,可以大大提高网站的质量。尤其是多媒体元素的加入,使网页更加丰富多彩。7.1CSS链接的美化在前面的章节中,已经学习了超链接的简单知识......
  • ios input 键盘收起页面底部有间隙没有自动还原
    1.ios  input键盘收起页面底部有间隙没有自动还原解决办法:最外层元素增加fixed布局即可2.ios input输入页面会放大,收起时页面不自动还原解决办法input字体设置最小为16px即可3.网页标签切换获取切换状态document.addEventListener("visibilitychange",visibleChange......