首页 > 其他分享 >vue中将html导出成pdf

vue中将html导出成pdf

时间:2024-06-05 13:55:52浏览次数:14  
标签:vue const img 导出 html2canvas html PDF pdf

vue 中将页面 html 内容导出成 pdf 文件格式,使用 html2canvas 、jspdf 。

首先使用 html2canvas 将内容转换为图片,之后写入 pdf 。

1、引用

第一个.将页面html转换成图片
npm install --save html2canvas 
第二个.将图片生成pdf
npm install jspdf --save

2、创建  exportToPdf.js ,放入导出方法

// exportToPdf.js
import html2canvas from 'html2canvas';
import jsPDF from 'jspdf';

export function exportToPDF(fileName,elementId) {
  // 根据元素ID获取要导出的元素
  const element = document.getElementById(elementId);
  if (!element) {
    console.error('无法找到指定的元素');
    return;
  }

  // 使用 html2canvas 将元素转换为 canvas
  html2canvas(element).then(canvas => {
    // 创建一个新的 jsPDF 实例
    const pdf = new jsPDF('p', 'mm', 'a4');

  // 将 canvas 转换为图片并添加到 PDF
  const imgProps = canvas.toDataURL('image/png');
  const imgPropsArr = imgProps.split(','), mimeType = imgPropsArr[0].match(/:(.*?);/)[1];
  const img = new Image();

  img.onload = function() {
    // 获取图片的宽高
    const pdfWidth = pdf.internal.pageSize.getWidth();
    const pdfHeight = (img.height * pdfWidth) / img.width;

    // 添加图片到 PDF
    pdf.addImage(imgProps, mimeType, 0, 0, pdfWidth, pdfHeight);

    // 保存 PDF
    pdf.save(fileName);

    //预览
    /* // 生成PDF的Blob对象
     const pdfBlob = pdf.output('blob');
     // 创建一个指向Blob对象的URL
     const pdfUrl = URL.createObjectURL(pdfBlob);
     // 打开新窗口预览PDF
     const win = window.open();
     win.document.write(`
   <html>
     <head>
       <title>PDF Preview</title>
     </head>
     <body>
       <embed src="${pdfUrl}" type="application/pdf" width="100%" height="100%">
     </body>
   </html>
 `);*/
    // 你可以选择在预览后释放URL,但这会关闭预览(如果浏览器支持)
    //URL.revokeObjectURL(pdfUrl);
  };

  img.src = imgProps;
}).catch(error => {
    console.error('导出PDF时发生错误:', error);
});
}

  3、vue中

<template>
  <div style="text-align: center">
    <div>
      <div>
        <button type="button" @click="pdfBtn">导出PDF</button>
      </div>
      <div id="pdfDom" >
        <div>内容</div>
      </div>
    </div>
  </div>
</template>

<script>
  // 导入exportToPDF函数
  import { exportToPDF } from '@/utils/feature/exportToPdf';

    export default {
      name: "exportpdf",
      data(){
        return{
          htmlTitle:'页面导出PDF文件名',
        }
      },
      methods:{
        pdfBtn(){
          exportToPDF(this.htmlTitle,'pdfDom');
        },

      }
    }
</script>

<style scoped>

</style>

  

标签:vue,const,img,导出,html2canvas,html,PDF,pdf
From: https://www.cnblogs.com/webttt/p/18232853

相关文章

  • VUE网易云【附:资料➕文档】
    前言:我是源码分享交流Coding,专注Java+Vue领域,专业提供程序设计开发、源码分享、技术指导讲解、各类项目免费分享,定制和毕业设计服务!免费获取方式--->>文章末尾处!项目介绍007:项目名:仿网易云技术栈:VUE(页面数据对接网易云官方数据,需联网运行)访问网页:http://localh......
  • 【vuejs】keep-alive组件的原理讲解和使用讲解
    1.keep-alive简介Vue.js框架中的<keep-alive>组件是一个用于缓存组件实例的内置组件,它使得组件在不活动时保持其状态,从而提高应用的性能和用户体验。当使用动态组件<component>切换视图时,不在显示的组件实例会被销毁并重新创建,这会导致状态丢失。而<keep-alive>可......
  • vue 项目中使用v-permission 实现按钮级权限控制
    在使用vue-element-admin框架进行开发时,您可以通过自定义指令来实现按钮级的权限控制。这个自定义指令可以根据用户的权限动态地控制按钮的显示。以下是一个详细的实现步骤:1、在src目录下按照如下目录结构,创建一个权限文件,例如permission.js:目录结构:src/directive/permissi......
  • 生态学pdf电子书
    2022年准备拿一个兽医的学位,所以需要报考个大专,需要先参加成人自考,其实就是高考(当然远远没有高考那样难了),呵,关键是我们报考时的老师开始给我们说要考语数外,后面临近1个月了,我百度了下成人高考这个动物医学专业的难度,才发现需要考的有新的学科–生态学(这些中介很不靠谱,什么人......
  • Element UI上传图片和PDF,支持预览,并支持复制黏贴上传
      背景 如上图,使用ElementUI的el-upload组件,并且预览的时候可以展示图片和PDF格式文件; 做法 index.vue<template><div><el-uploadv-model="diaForm.list":limit="5":on-exceed="handleExceed":on-preview=&q......
  • Vue 获取组件名称
    Vue2获取组件名称获取方式:this.$options.name解读:通过Vue2的 this 关键字,可以很容易地访问Vue组件实例对象身上的 $options 的name属性来获取组件名称。 <script>exportdefault{name:"Brand",mounted(){//Brandconsole.log(this.$options.......
  • vue动态加载组件import引入组件找不到组件(Error: Cannot find module)
    更多ruoyi-nbcio功能请看演示系统gitee源代码地址前后端代码:https://gitee.com/nbacheng/ruoyi-nbcio演示地址:RuoYi-Nbcio后台管理系统http://218.75.87.38:9666/更多nbcio-boot功能请看演示系统 gitee源代码地址后端代码:https://gitee.com/nbacheng/nbcio-boot前端......
  • 交互式流程图组件DHTMLX Diagram v6.0 - 拥有更灵活的高度可定制功能
    DHTMLXDiagram库允许用几行代码构建JavaScript流程图,通过自动布局和实时编辑器,它可以更容易地将复杂数据可视化到一个整洁的层次结构中。DHTMLXDiagramv6.0版本发布,带来了众多令人兴奋的新功能和改进,使得这个JavaScript图表库更加强大和灵活。此次更新不仅增强了现有的功能......
  • 毕业设计-基于Springboot+Vue的影城管理系统的设计与实现(源码+LW+包运行)
    如需完整项目,请私信博主基于SpringBoot+Vue的影城管理系统开发语言:Java数据库:MySQL技术:SpringBoot+MyBatis+Vue.js工具:IDEA/Ecilpse、Navicat、Maven互联网发展至今,已经解决了很多我们解决不了的难题,使得我们工作更加便捷,提高了我们的工作效率。目前各行各业都在运用网络信......
  • 毕业设计-基于Springboot+Vue的音乐网站与分享平台 的设计与实现(源码+LW+包运行)
    如需完整项目,请私信博主基于SpringBoot+Vue的音乐网站与分享平台开发语言:Java数据库:MySQL技术:SpringBoot+MyBatis+Vue.js工具:IDEA/Ecilpse、Navicat、Maven互联网发展至今,已经解决了很多我们解决不了的难题,使得我们工作更加便捷,提高了我们的工作效率。目前各行各业都在运用......