首页 前端知识 如何使用html2canvas把html导出为pdf格式

如何使用html2canvas把html导出为pdf格式

2025-02-27 11:02:44 前端知识 前端哥 752 391 我要收藏

使用 html2canvas 将 HTML 导出为 PDF 的过程分为两步:

  1. 使用 html2canvas 将 HTML 内容渲染为 Canvas。

  2. 使用 jsPDF 将 Canvas 图像插入到 PDF 中并保存。

以下是具体实现步骤:

1. 安装依赖

首先,确保你引入了 html2canvas 和 jsPDF 库。你可以通过以下方式获取它们:

使用 CDN
<script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/1.4.1/html2canvas.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js"></script>
使用 npm

如果你使用 npm 或 yarn:

npm install html2canvas jspdf
# 或
yarn add html2canvas jspdf

2. 实现代码

以下是一个完整的示例代码,将 HTML 内容导出为 PDF:

// 导出页面为PDF格式
import html2Canvas from 'html2canvas'
import JsPDF from 'jspdf'

const getPdf = (elementId = 'pdfDom', pdfTitle = 'pdf文件') => {
  // 当下载pdf时,若不在页面顶部会造成PDF样式不对,所以先回到页面顶部再下载
  let top = document.getElementById(elementId)
  if (top != null) {
    top.scrollIntoView()
    top = null
  }
  html2Canvas(document.querySelector(`#${elementId}`), {
    scale: 2, // 提高分辨率
    logging: true, // 启用日志
    allowTaint: true,
    useCORS: true
  }).then(function(canvas) {
    // 获取canvas画布的宽高
    let contentWidth = canvas.width
    let contentHeight = canvas.height
    // 一页pdf显示html页面生成的canvas高度;
    let pageHeight = contentWidth / 841.89 * 592.28
    // 未生成pdf的html页面高度
    let leftHeight = contentHeight
    // 页面偏移
    let position = 0
    // html页面生成的canvas在pdf中图片的宽高(本例为:横向a4纸[841.89,592.28],纵向需调换尺寸)
    let imgWidth = 641.89
    let imgHeight = 841.89 / contentWidth * contentHeight
    let pageData = canvas.toDataURL('image/jpeg', 1.0)
    let PDF = new JsPDF('l', 'pt', 'a4')
    // 两个高度需要区分: 一个是html页面的实际高度,和生成pdf的页面高度
    // 当内容未超过pdf一页显示的范围,无需分页
    if ((leftHeight + 50) < pageHeight) {
      PDF.addImage(pageData, 'JPEG', 100, 50, imgWidth, imgHeight)
    } else {
      while (leftHeight > 0) {
        PDF.addImage(pageData, 'JPEG', 100, position, imgWidth, imgHeight)
        leftHeight -= pageHeight
        position -= 592.28
        // 避免添加空白页
        if (leftHeight > 0) {
          PDF.addPage()
        }
      }
    }
    PDF.save(pdfTitle + '.pdf')
  })
}

使用方式: getPdf(elementId, `未命名文件.pdf`)

3. 代码说明

  • html2canvas:将 HTML 元素渲染为 Canvas。

    • scale: 2:提高分辨率,避免生成的 PDF 模糊。

    • useCORS: true:允许加载跨域图片。

  • jsPDF:用于创建和保存 PDF。

    • new jspdf.jsPDF('p', 'mm', 'a4'):创建一个 A4 尺寸的 PDF 文档。

    • addImage:将 Canvas 生成的图片插入到 PDF 中。

    • pdf.save('exported.pdf'):保存 PDF 文件并下载。

4. 注意事项

  • 跨域图片:如果 HTML 中包含跨域图片,确保服务器允许跨域访问(CORS),否则图片可能无法渲染。

  • 分辨率:通过调整 scale 参数可以提高生成 PDF 的分辨率。

  • 分页:如果 HTML 内容较长,可以使用 jsPDF 的分页功能手动分页。

转载请注明出处或者链接地址:https://www.qianduange.cn//article/21771.html
标签
评论
发布的文章

Opencv [去除水印]

2025-02-27 11:02:42

0基础学前端-----CSS DAY13

2025-02-27 11:02:41

蓝桥杯之日期题

2025-02-27 11:02:39

模拟算法.

2025-02-27 11:02:39

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!