LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

【JavaScript 】纯JS实现html生成导出保存为PDF文件

admin
2023年5月15日 19:8 本文热度 681

 相信各位前端工程狮们在一些报表项目,管理系统项目中都会遇到在这样的需求:申请报、表格、简历等等图文信息有导出为PDF文件。下面是记录我在项目中完成该需求的代码dome,发布出来也是希望对大家有些帮助。

1,整体思路

将HTML元素打印或导出为PDF文件,无非就是提取元素页面内容,然后转化为图片,将图片保存为PDF文件。

2,准备工作

将HTML元素转化为图片:html2canvas.js  插件;

<script src="https://cdn.bootcss.com/html2canvas/0.5.0-beta4/html2canvas.js"></script>

导出为PDF文件:jspdf.js插件:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.0.272/jspdf.debug.js"></script>

3,dome

HTML:

    <button id="btn">导出为PDF文件</button>
    <div id="pdfDom">
        <table>
            <th></th>
        </table>
        <ul id="box"></ul>
    </div>

Javascript:

<script>
    let obox = document.getElementById("box")
    let opdfdom = $("#pdfDom")    
    let obtn = document.getElementById("btn")    
    let lihtml = ''    
    for(let i = 0; i < 50; i++){        
    lihtml += "<li>条目"+i+"</li>"    }    
    obox.innerHTML = lihtml    
    obtn.onclick = function(){        
    downLoadPdf(opdfdom)    
    }    
    function downLoadPdf(content){        
    content = content ? content : null;        
    // 条件判断是否打印        
    if(!content){            
    alert("打印失败,请重新操作")            
    return false        
    }        
    // 开始打印        
    console.log(content)        
    var contentWidth = content.width();        
    var contentHeight = content.height();        
    var canvas = document.createElement("canvas")        
    canvas.width = contentWidth        
    canvas.height = contentHeight        
    var context = canvas.getContext("2d");        
    html2canvas(content,{            
    allowTaint:true,            
    scale:2  // 提升画面质量,但是会增加文件大小        
    }).then(function(canvas){            
    var pdfWidth = canvas.width;            
    var pdfHeight = canvas.height;            
    var pageHeight = pdfWidth / 592.28 * 841.89;            
    var leftHeight = pdfHeight;            
    var position = 0;            
    var imgWidth = 595.28;            
    var imgHeight = 595.28 / pdfWidth * pdfHeight;            
    var pageData = canvas.toDataURL("img/jpeg",1.0);            
    var pdf = new jsPDF('', 'pt', 'a4');            
    // 判断打印dom高度是否需要分页,如果需要进行分页处理            
    if(leftHeight < pageHeight){                
    pdf.addImage(pageData,"JPEG",0,0,imgWidth,imgHeight)            
    }else{                
    while(leftHeight > 0){                    
    pdf.addImage(pageData,"JPEG",0,position,imgWidth,imgHeight)                    
    leftHeight -= pageHeight                    
    position -= 841.89                    
    if(leftHeight > 0){                        
    pdf.addPage()                    
    }                
    }            
    }            
    pdf.save("案例.pdf")        
    })    
    }
</script>

4,结果


该文章在 2023/5/15 19:08:54 编辑过

全部评论1

admin
2023年5月15日 19:11
 <script src="js/html2canvas.min.js" type="text/javascript" charset="utf-8"></script>
<script src="js/jspdf.debug.js" type="text/javascript" charset="utf-8"></script>
document.getElementById("savePdf").onclick = function() {
    html2canvas(document.getElementById("tabContainer"), {
        onrendered: function(canvas) {
            //通过html2canvas将html渲染成canvas,然后获取图片数据
            var pageData = canvas.toDataURL('image/jpeg', 1.0);
            var pdfWidth = 210;
            const pdf = new jspdf('p', 'mm', 'a4');
            pdf.addImage(pageData, 'JPEG', 25, 25, pdfWidth - 50, ((pdfWidth - 50) / canvas.width) * canvas.height);
            // 保存
            pdf.save(`fileName.pdf`);
        }
    });
}

关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved