Vue

作者: 誰在花里胡哨 | 来源:发表于2021-07-19 17:34 被阅读0次
image.png
🔥 jsPDF-文档地址

主要用到了html2canvas,jspdf,原理就是将页面内容转为一个 canvas,也可以理解为先把页面转成图片,然后再把图片转成 PDF。
这里涉及到一个分页的问题,主要是因为 A4纸 的原因,所以pdf的储存基本都会有一个固定的内容高低,代码中有提到。

移动端截屏保存当前图片
解决html2canvas截图不全的问题
导出html为PDF内容截断终极解决方案
导出为横向的PDF
如何添加水印
导出PDF压缩

image.png
代码如下:
<template>
  <div>
    <div ref="IMG">
      <ol>
        <li v-for="item in 50" :key="item">
          <h1>页面转PDF</h1>
        </li>
      </ol>
    </div>
    <div @click="imgDownload" class="download">转PDF</div>
  </div>
</template>

<script>
import html2canvas from "html2canvas";
import jsPDF from "jspdf";
export default {
  data() {
    return {
      imgURL: ""
    };
  },
  methods: {
    // 图片保存方法
    imgDownload() {
      let _this = this;
      // 获取需转图片的范围元素
      let img = this.$refs["IMG"];
      // 图片高度
      var w = parseInt(window.getComputedStyle(img).width);
      // 图片宽度
      var h = parseInt(window.getComputedStyle(img).height);
      //滚轮置顶,避免留白
      window.pageYOffset = 0;
      document.documentElement.scrollTop = 0;
      document.body.scrollTop = 0;
      // 利用 html2canvas 下载 canvas
      html2canvas(img).then(function(canvas) {
        //转化为本地的图片地址
        _this.imgURL = canvas.toDataURL();
        var filename = "导出的文件.pdf";
        //一页pdf显示html页面生成的canvas高度;
        var pageHeight = (w / 592.28) * 841.89;
        //未生成pdf的html页面高度
        var leftHeight = h;
        //页面偏移
        var position = 0;
        //a4纸的尺寸[595.28,841.89],html页面生成的canvas在pdf中图片的宽高
        var imgWidth = 595.28;
        var imgHeight = (592.28 / w) * h;
       // new jsPDF("l", "pt", "a4"); l 表示横向导出;true表示压缩pdf,否则文件会很大
        var pdf = new jsPDF("p", "pt", "a4");
        //有两个高度需要区分,一个是html页面的实际高度,和生成pdf的页面高度(841.89)
        //当内容未超过pdf一页显示的范围,无需分页
        if (leftHeight < pageHeight) {
          pdf.addImage(_this.imgURL, "JPEG", 0, 0, imgWidth, imgHeight);
        } else {
          // 分页
          while (leftHeight > 0) {
            pdf.addImage(
              _this.imgURL,
              "JPEG",
              0,
              position,
              imgWidth,
              imgHeight
            );
            leftHeight -= pageHeight;
            position -= 841.89;
            //避免添加空白页
            if (leftHeight > 0) {
              pdf.addPage();
            }
          }
        }
        //转pdf下载
        pdf.save(filename);
      });
    }
  }
};
</script>

<style scoped>
h1{
  text-align: left;
}
.download{
  position: fixed;
  width: 100px;
  height: 60px;
  background: blueviolet;
  color: white;
  font-size: 20px;
  text-align: center;
  line-height: 60px;
  right: 0;
  bottom: 50px;
  z-index: 99;
  cursor: pointer;
}
</style>

相关文章

  • Vue

    主要用到了html2canvas,jspdf,原理就是将页面内容转为一个 canvas,也可以理解为先把页面转成图...

  • vue显示pdf

    1、下载插件 npm install --save vue-pdf 2、在需要展示的页面引入vue-pdf ...

  • vue 在线预览pdf

    vue 在线预览pdf 使用了vue-pdf插件,页面初始的loading使用了vant UI 的loading。

  • Vue 初探页面转PDF附件下载

    前言: 网页端生成PDF是一种很常见的业务场景,多数情况下用在工作流、审批流、甚至后台管理系统上。最近在项目中有...

  • Vue导出页面为PDF格式

    思路:就是将页面转换成图片格式.然后通过图片的base64码.生成PDF 方案一: 1.在Vue页面上实现PDF导...

  • 在官网首页如何打开指南的pdf

    vue版本:"vue": "^2.6.14" vue-pdf版本:"vue-pdf": "^4.2.0"、"vue...

  • 基于 Vue 页面导出 PDF与html2canvas受污染的解

    基于 Vue 页面导出 PDF 首先引入两个模块 template 代码 原理 通过 html2Canvas 将 ...

  • Vue页面预览PDF文件

    vue-pdf,可实现在线预览 PDF 格式的文档,流程: 在搭建好的 Vue 项目中,引入 Vue-pdf np...

  • vue-pdf查看pdf文件及打印乱码问题处理

    前言 vue中简单使用vue-pdf预览pdf文件,解决打印预览乱码问题 vue-pdf 使用 安装 npm in...

  • vue 前端预览pdf

    vue 前端预览pdf 情形:页面中有个table,其中有一列是显示文档名称,点击pdf文档名称,就在浏览器中打开...

网友评论

    本文标题:Vue

    本文链接:https://www.haomeiwen.com/subject/bpshmltx.html