0
点赞
收藏
分享

微信扫一扫

利用html2pdf将html生成pdf

mjjackey 2022-04-14 阅读 74
<!DOCTYPE HTML>
<html>
<head>
    <title>HTML转PDF测试</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
</head>
<body>
    <button onclick="downloadPdf()">生成PDF</button>
    <div id="root">
        <style>
            .box {
                width: 587px;
                height: 833px;
                margin: 0px auto;
                position: relative;
            }
            .box img {
                position: absolute;
                width: 100%;
                left: 0;
                top: 0;
                z-index: -1;
            }

            .box .title {
                position: absolute;
                left: 67px;
                top: 407px;
                font-size: 20px;
                font-weight: bold;
            }

            .box .qrcode {
                display: none;
            }
            .box .award {
                position: absolute;
                top: 536px;
                left: 293px;
                font-size: 30px;
                font-weight: bold;
                background: #fff;
                width: 300px;
                margin-left: -150px;
                text-align: center;
            }
        </style>
        <div class="box">
            <img src="" id="bgimg" />
            <div class="title">学校 姓名 作品名称</div>
            <div class="qrcode">团队邀请码</div>
            <div class="award">组别 奖项</div>
        </div>

    </div>

    <script src="https://cdnjs.cloudflare.com/ajax/libs/html2pdf.js/0.10.1/html2pdf.bundle.min.js"
        integrity="sha512-GsLlZN/3F2ErC5ifS5QtgpiJtWd43JWSuIgh7mbzZ8zBps+dvLusV+eNQATqgA/HdeKFVgA5v3S/cIrLF7QnIg=="
        crossorigin="anonymous" referrerpolicy="no-referrer"></script>

    <script>

        function getBase64Image(img) {
            var canvas = document.createElement("canvas");
            canvas.width = img.width;
            canvas.height = img.height;
            var ctx = canvas.getContext("2d");
            ctx.drawImage(img, 0, 0, img.width, img.height);
            var ext = img.src.substring(img.src.lastIndexOf(".") + 1).toLowerCase();
            var dataURL = canvas.toDataURL("image/" + ext);
            return dataURL;
        }

        var img = "2022.png";//imgurl 就是你的图片路径  
        var image = new Image();
        image.src = img;
        image.onload = function () {
            var base64 = getBase64Image(image);
            document.getElementById("bgimg").setAttribute("src", base64);
            console.log(base64);
        }

        function downloadPdf() {
            // 获取DIV元素
            var element = document.getElementById('root');
            // 生成PDF调用
            html2pdf().from(element).set({
                margin: 0,
                filename: 'test.pdf',
                html2canvas: { scale: 2 },
                jsPDF: { orientation: 'portrait', unit: 'in', format: 'letter', compressPDF: true }
            }).save();
        }
    </script>
</body>

</html>

最终效果图如下:

 学校、姓名、作品名称、组别、奖项可以通过定位放到指定位置

有几点需要注意:

  1. 图片必须经过base64,否则会显示空白
  2. 图片路径必须与html的域名一样,防止跨域
  3. 生成的pdf会有白色内边距,这个还在调试中,有结果再更新

 

举报

相关推荐

0 条评论