vue使用html2pdf导出pdf

我现在vue页面生成pdf,遇到了几个问题,首先是我页面设定的左右边距各是10mm,打印出的pdf只有左边的20mm,页面显示的换行了但是打印出来没有换行,有些文字被截掉了,还有想要隐藏输入框。是因为使用的HTML2pdf,不会适配vue吗?


  exportToPdf() {
      console.log("123");
      // 获取要导出的页面内容的HTML元素
      const content = document.getElementById("pdfcontent");
      console.log(content);
      // 定义PDF选项,设置页面大小为A4
      const options = {
        filename: "exported.pdf",
        pagebreak: { mode: "css", before: ".page-break" }, // 页面分页
        // jsPDF: {
        //   format: "a4",
        //   margin: { top: 60, right: 60, bottom: 60, left: 60 },
        // },
      };
      console.log(options);
      // 使用html2pdf.js生成PDF
      // html2pdf().set(options).from(content).save();},
      html2pdf()
        .set(options)
        .from(content)
        .output("blob")
        .then(function (pdfBlob) {
          // 创建FormData对象
          const formData = new FormData();
          console.log(pdfBlob);
          // 将PDF Blob添加到FormData
          formData.append("file", pdfBlob, "expored.pdf");
          console.log(formData);
          // 发送FormData到后端
          fetch("http://127.0.0.1:5007/pdf", {
            method: "POST",
            body: formData,
          })
            .then((response) => {
              console.log(response.data);
            })
            .catch((error) => {
              console.error(error);
            });
        });
    },
.pdfcontent {
  width: 21cm;
  height: 29.7cm;
  margin: 10mm 10mm 10mm 10mm;
    /* border: 1px solid black; 添加整体边框 */

  padding: 10mm; /* 添加卡片内边距 */
  box-sizing: border-box; /* 盒子模型计算包含边框和内边距 */
  box-shadow: 0 0 5px rgba(0, 0, 0, 0.4); /* 添加卡片阴影效果 */
}

学会了再弄一个div和输入框双向绑定,然后就打印的时候div出现输入框消失,解决了外边框的问题和内容不换行的问题

【以下回答由 GPT 生成】

问题分析

问题1: 左右边距设置无效,只有左边距起作用。

问题2: 页面中的换行在导出的pdf中没有显示,部分文字被截断。

问题3: 隐藏输入框。

问题4: HTML2pdf是否适配vue。

解决方案

针对问题1和问题2,我们可以尝试调整html2pdf的选项来解决,尝试以下代码:

const options = {
    filename: 'exported.pdf',
    margin: [10, 10, 10, 10], // 设置上下左右边距
    image: { type: 'jpeg', quality: 0.98 }, // 调整图片质量
    html2canvas: { scale: 2 }, // 增加缩放比例
    jsPDF: { unit: 'mm', format: 'a4', orientation: 'portrait' } // 设置页面格式和方向
};

针对问题3,我们可以在生成PDF之前,通过CSS隐藏输入框。例如:

.input-box {
    display: none;
}

并在对应的HTML元素中添加类名:

<input type="text" class="input-box" />

这样生成的PDF中就会隐藏输入框。

针对问题4,HTML2pdf与Vue没有直接的关系,它是一个独立的库。通常情况下,HTML2pdf可以在Vue中正常工作。如果在某些情况下出现问题,通常可能是由于配置选项或其他因素引起的。你可以尝试调整选项、使用其他版本的HTML2pdf或者查看其他用户在处理类似问题时的解决方案。

修改后的代码

exportToPdf() {
    const content = document.getElementById('pdfcontent');
    const options = {
        filename: 'exported.pdf',
        margin: [10, 10, 10, 10],
        image: { type: 'jpeg', quality: 0.98 },
        html2canvas: { scale: 2 },
        jsPDF: { unit: 'mm', format: 'a4', orientation: 'portrait' }
    };

    html2pdf()
        .set(options)
        .from(content)
        .output('blob')
        .then(function (pdfBlob) {
            const formData = new FormData();
            formData.append('file', pdfBlob, 'expored.pdf');
            fetch('http://127.0.0.1:5007/pdf', {
                method: 'POST',
                body: formData
            })
                .then((response) => {
                    console.log(response.data);
                })
                .catch((error) => {
                    console.log(error);
                });
        });
}

请尝试以上解决方案,如果问题仍然存在或者有其他问题,请随时追加评论,我会尽力帮助您解决。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^