jspdf导出图片到pdf 图片不全, 分页内容截断位置不能保证

获取DOM
将DOM转换为canvas
获取canvas的宽度、高度(稍微大一点,预览)
将pdf的宽高设置为canvas的宽高(不适用A4纸大小)
将canvas转为图片
实例化jspdf,将内容图片放在pdf中(因为内容宽高和pdf宽高一样,就只需要一页,也防止内容截断问题)

    document.querySelector('.download button').onclick = function(e) {
      var content = document.querySelector('.content')
      download(content)
    }

    function download(content) {
      html2canvas(content, {
        allowTaint: true,
        scale: 2 // 提升画面质量,但是会增加文件大小
      }).then(function (canvas) {
        /**jspdf将html转为pdf一页显示不截断,整体思路:
         * 1. 获取DOM 
         * 2. 将DOM转换为canvas
         * 3. 获取canvas的宽度、高度(稍微大一点)
         * 4. 将pdf的宽高设置为canvas的宽高
         * 5. 将canvas转为图片
         * 6. 实例化jspdf,将内容图片放在pdf中(因为内容宽高和pdf宽高一样,就只需要一页,也防止内容截断问题)
         */

        // 得到canvas画布的单位是px 像素单位
        var contentWidth = canvas.width
        var contentHeight = canvas.height

        console.log('contentWidth', contentWidth)
        console.log('contentHeight', contentHeight)
        // 将canvas转为base64图片
        var pageData = canvas.toDataURL('image/jpeg', 1.0)

        // 设置pdf的尺寸,pdf要使用pt单位 已知 1pt/1px = 0.75   pt = (px/scale)* 0.75
        // 2为上面的scale 缩放了2倍
        var pdfX = (contentWidth + 10) / 2 * 0.75
        var pdfY = (contentHeight + 500) / 2 * 0.75 // 500为底部留白

        // 设置内容图片的尺寸,img是pt单位 
        var imgX = pdfX;
        var imgY = (contentHeight / 2 * 0.75); //内容图片这里不需要留白的距离

        // 初始化jspdf 第一个参数方向:默认''时为纵向,第二个参数设置pdf内容图片使用的长度单位为pt,第三个参数为PDF的大小,单位是pt
        var PDF = new jsPDF('', 'pt', [pdfX, pdfY])

        // 将内容图片添加到pdf中,因为内容宽高和pdf宽高一样,就只需要一页,位置就是 0,0
        PDF.addImage(pageData, 'jpeg', 0, 0, imgX, imgY)
        PDF.save('download.pdf')
      })
    }



转载地址

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用Vue2导出PDF分页截断的步骤: 1. 首先,安装所需的模块。在命令行中运行以下命令: ```shell npm install html2canvas jspdf --save ``` 2. 在Vue组件中,引入所需的模块: ```javascript import html2canvas from 'html2canvas'; import jsPDF from 'jspdf'; ``` 3. 创建一个方法来导出PDF。在该方法中,首先使用html2canvas将页面的HTML内容转换为图片,然后使用jsPDF图片添加到PDF中。确保在转换为图片时,将页面分成多个部分以避免分页截断。 ```javascript export default { methods: { exportPDF() { const pdf = new jsPDF('p', 'mm', 'a4'); const pages = document.querySelectorAll('.page'); // 将页面分成多个部分 let y = 0; pages.forEach((page, index) => { html2canvas(page).then(canvas => { const imgData = canvas.toDataURL('image/png'); const imgWidth = pdf.internal.pageSize.getWidth(); const imgHeight = (canvas.height * imgWidth) / canvas.width; if (index !== 0) { pdf.addPage(); } pdf.addImage(imgData, 'PNG', 0, y, imgWidth, imgHeight); y += imgHeight; if (index === pages.length - 1) { pdf.save('export.pdf'); } }); }); } } } ``` 4. 在Vue模板中,添加一个按钮来触发导出PDF的方法: ```html <template> <div> <!-- 页面内容 --> <div class="page">Page 1</div> <div class="page">Page 2</div> <div class="page">Page 3</div> <!-- 导出按钮 --> <button @click="exportPDF">导出PDF</button> </div> </template> ``` 这样,当用户点击导出按钮时,将会生成一个包含所有页面内容PDF文件,并且页面内容不会被截断

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值