vue2 js 继pdf导出拆坑之图片无法导出成功

pdf导出详见:

CSDN

坑1:因为图片服务器未开启允许跨域导致图片导出跨域问题

报错:Access to image at 'http://**图片路径*.png' from origin 'http://**请求路径* has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

处理:需要图片服务器允许跨域

配置大致如下:

 坑2:http和https的坑,实际的url是https 请求的图片服务器是http 

处理:图片服务器需要将http更改为https

坑3: 考虑到是通过传参实现的pdf导出,可能会因为图片加载未完成就执行导出的问题,导致导出图片只是占位符

处理:

//导入axios
import axios from "axios";

export default {
  name: "111",
  data() {
    return {
       localImagePath: [],
    };
  },

  methods: {
    downloadImage(imglist) {
      imglist.forEach((element) => {
        // 下载图片到本地
        axios
          .get(element.address, { responseType: "blob" })
          .then((response) => {
            const url = window.URL.createObjectURL(new Blob([response.data]));
            this.localImagePath.push(url);
          });
      });
    },
    /** 导出按钮操作 */
    handleExport(row) {
    //根据点击传参进行赋值
      this.rowPdfData = row;
    //将图片缓存到本地
      this.downloadImage(row.imgs);
     ...
    //代码详见https://mp.csdn.net/mp_blog/creation/editor/138524748
    },
  },
};
  <div class="imgkard">
   <p
   v-for="(index, item) in localImagePath"
   :key="item"
   class="image-column"
   >
       <img
       :key="item"
       :src="index"
      />
   </p>
</div>

  • 21
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是使用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文件,并且页面内容不会被截断。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值