将HTML导出为PDF格式(记录01)

安装需要的插件

npm install html2canvas --save
npm install jspdf --save

html2Canvas配置项

名称默认值描述
allowTaintfalse是否允许跨源图像污染画布
backgroundColor#ffffff画布背景色(如果在DOM中未指定),为透明设置null
canvasnull用作绘图基础的现有画布元素
foreignObjectRenderingfalse如果浏览器支持ForeignObject渲染,是否使用它
imageTimeout15000加载图像超时(毫秒),设置为0可禁用超时
loggingtrue为调试目的启用日志记录
proxynull用于加载跨源图像的代理的Url。如果留空,则不会加载跨原点图像
removeContainertrue是否清除html2canvas临时创建的克隆DOM元素
scalewindow.devicePixelRatio用于渲染的比例。默认为浏览器设备像素比率
useCORSfalse是否尝试使用CORS从服务器加载图像
widthElement width画布的宽度
heightElement height画布的高度
xElement x-offset裁剪画布x坐标
yElement y-offset裁剪画布y坐标
scrollXElement scrollX渲染元素时要使用的x滚动位置(例如,如果元素使用位置:fixed)
scrollYElement scrollY渲染元素时要使用的y轴滚动位置(例如,如果元素使用位置:fixed)
windowWidthWindow.innerWidth渲染Element时使用的窗口宽度,这可能会影响Media查询等内容
windowHeightWindow.innerHeight渲染Element时使用的窗口高度,这可能会影响Media查询等内容

详细代码 

在utils文件夹中创建名为htmlToPdf.js的文件

// 导出页面为PDF格式
import html2Canvas from 'html2canvas';
import JsPDF from 'jspdf';
export default {
  getPdf() {
    let title = '设备档案'; // 导出的pdf名称
    html2Canvas(document.querySelector('.c-content'), { // 此类名或id必须为全局唯一
      useCORS: true, 
    }).then(function (canvas) {
      let contentWidth = canvas.width;
      let contentHeight = canvas.height;
      let pageHeight = (contentWidth / 592.28) * 841.89;
      let leftHeight = contentHeight;
      let position = 0;
      let imgWidth = 595.28;
      let imgHeight = (592.28 / contentWidth) * contentHeight;
      let pageData = canvas.toDataURL('image/jpeg', 1.0);
      let PDF = new JsPDF('', 'pt', 'a4');
//new JsPDF('l', 'pt', 'a4');三个接收三个参数,第一个控制文件是横向还是竖向,该代码是横向导出pdf
      if (leftHeight < pageHeight) {
        PDF.addImage(pageData, 'JPEG', 0, 0, imgWidth, imgHeight);
      } else {
        while (leftHeight > 0) {
          PDF.addImage(pageData, 'JPEG', 0, position, imgWidth, imgHeight);
          leftHeight -= pageHeight;
          position -= 841.89;
          if (leftHeight > 0) {
            PDF.addPage();
          }
        }
      }
      PDF.save(title + '.pdf');
    });
  },
};

HTML展示使用

    <template>
        <div class="c-content">
          <div class="c-item">
            <div class="i-title">设备图片</div>
            <el-image :src="ip + equipmentImg" ></el-image>
            <div class="i-title">设备二维码</div>
            <el-image :src="ip + equipmentQrCode" ></el-image>
          </div>
          <div class="c-item">
            <div class="i-title">基本信息</div>
            <ul>
              <li>所属系统:视频系统</li>
              <li>设备型号:v-as001</li>
              <li>设备IP:19*.***.**.**</li>
              <li>设备名称:超清电子眼</li>
              <li>区域位置:亚马逊丛林</li>
              <li>所属部门:战忽局</li>
            </ul>
          </div>
          <div  class="c-item">
            <div class="i-title">维保信息</div>
            <ul>
              <li>维保商:华夏重工</li>
              <li>设备厂商:华夏重工</li>
              <li>联系人:张三</li>
              <li>电话:136*****7821</li>
            </ul>
          </div>
        </div>
        <div class="footer">
            <div  class="common-button" @click="htmlToPdf.getPdf">下载</div>
            <div class="common-button" @click="closeDialog">确定</div>
        </div>
    </template>

<script setup>
import htmlToPdf from '@/utils/htmlToPdf';

</script>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值