vue中使用html2canvas插件实现页面内容转换为PDF格式报告

概要:

      要求实现填写完成用户资料后,点击“下载pdf报告”按钮,将该PDF报告下载到本地,并且上传到服务器中。

实现思路:

1.使用html2canvas插件;

2.设定需要生成pdf报告的<div id='report'>下载pdf报告</div>;

3.使用html2canvas插件中的API将<div id='report'>下载pdf报告</div>中的内容转换为二进制数据流并将生成的PDF转换成Blob对象;

4.调用后端(uploadDoc)接口,上传到服务器。

 handlePDFreport() {
      const captureDiv = document.getElementById("report");//获取到需要生成pdf报告的页面div
      html2canvas(captureDiv)
        .then((canvas) => {
          // 生成pdf
          const imgData = canvas.toDataURL("image/png");
          const pdf = new jsPDF();
          const imgProps = pdf.getImageProperties(imgData);
          const pdfWidth = pdf.internal.pageSize.getWidth();
          const pdfHeight = (imgProps.height * pdfWidth) / imgProps.width;
          pdf.addImage(imgData, "PNG", 0, 0, pdfWidth, pdfHeight);
          pdf.save("报告解读.pdf");
          this.$message.success("报告解读已生成!");
          // 将生成的pdf上传到服务器
          // 将生成的PDF转换成Blob对象
          var blob = pdf.output("blob");
          // 创建FormData对象
          var formData = new FormData();
          // 将生成的PDF添加到FormData中
          formData.append("docFile", blob, "generated-pdf.pdf");
          uploadDoc(formData)
            .then((res) => {
              if (res) {
                let _url = res.fileUrl;
                let _data={
                  reportId:this.reportInfo.reportId,
                  reportUrl:_url
                }
                editfundUpdateReport(_data).then((res) => {
                  if (res.code == 200) {
                    this.$message.success("报告上传成功!");
                    this.getList();
                  }
                });
              }
            })
          // 结束
          this.showReport = false;
        })
        .catch((error) => {
          console.error("截图和生成PDF时发生错误:", error);
        });
    },

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 使用 pdf-lib 和 html2canvas 生成 PDF 文件需要进行以下几个步骤: 1. 安装依赖库 在项目使用 npm 或者 yarn 安装 pdf-lib 和 html2canvas 依赖库。 2. 引入依赖库 在需要使用Vue 组件引入 pdf-lib 和 html2canvas 依赖库。 ```javascript import { PDFDocument, StandardFonts } from 'pdf-lib'; import html2canvas from 'html2canvas'; ``` 3. 创建 PDF 文档对象 使用 pdf-lib 库PDFDocument 类来创建 PDF 文档对象,并添加需要生成 PDF内容。 ```javascript const pdfDoc = await PDFDocument.create(); const page = pdfDoc.addPage([595.28, 841.89]); // 设置页面大小 const font = await pdfDoc.embedFont(StandardFonts.HelveticaBold); // 在页面上添加文本内容 page.drawText('Hello, PDF!', { x: 50, y: 700, size: 24, font: font, color: rgb(0, 0, 0), }); ``` 4. 将 HTML 元素转换Canvas 使用 html2canvas的 toCanvas 方法将需要生成 PDFHTML 元素转换Canvas 对象。 ```javascript const canvas = await html2canvas(document.getElementById('pdf-content')); ``` 5. 将 Canvas 对象转换为 PNG 图片 将上一步得到的 Canvas 对象转换为 PNG 格式的图片。 ```javascript const pngUrl = canvas.toDataURL('image/png'); ``` 6. 添加 PNG 图片到 PDF 文档 将上一步得到的 PNG 图片添加到 PDF 文档对象。 ```javascript const pngImage = await pdfDoc.embedPng(pngUrl); page.drawImage(pngImage, { x: 50, y: 450, width: 500, height: 250, }); ``` 7. 导出 PDF 文件 使用 pdf-lib 库的 save 方法将生成的 PDF 文件导出。 ```javascript const pdfBytes = await pdfDoc.save(); const blob = new Blob([pdfBytes], { type: 'application/pdf' }); saveAs(blob, 'example.pdf'); // 将 PDF 文件保存到本地 ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值