轻松的PDF发电
#html #vue #pdf #htmltopd

注意:此博客文章最初发表在我的个人博客Majid's

您是否想知道是否可以将HTML表作为PDF文件下载?最近,在使用NUXT3进行附带项目的过程中,我遇到了同样的问题。我需要生成一个数据表并使其与他人共享。我发现许多可以做到这一点的库,但是在Vue中没有一个很好的例子。因此,我认为与他人分享我的方法可能很有用。

要下载HTML表作为PDF文件,我们需要使用两个库:

dom-to-image:此库允许捕获DOM元素的屏幕截图并返回包含PNG图像的数据URI。

jsPDF:此库允许在JavaScript中创建PDF文档。

让我们开始以下步骤:

步骤1:安装库

npm install jspdf -S
npm install dom-to-image -S

步骤2:立即创建一个PDF文档,我们需要使用JSPDF构造函数创建PDF文档。这是代码:

// new jsPDF(orientation, unit, dimensions, ...otherOptions) 
const pdf = new jsPDF('l', 'pt', [tableWidth, tableHeight]);

您可以看到,该构造函数采用some options,我们将使用其中3个

  • l:PDF文档的方向。 l代表风景,p代表肖像。在这种情况下,l用于创建面向景观的PDF。
  • pt:用于指定PDF文档尺寸的测量单元。 pt代表点,这是印刷材料的常见测量单位。
  • [tableWidth, tableHeight]:一个数组,在点中指定PDF文档的宽度和高度。这些值基于将HTML表的大小转换为PDF。

步骤3:将HTML添加为图像

  • 我们需要使用addImage方法将HTML表作为图像添加到我们的PDF文档。这是代码:
// addImage(imageData, format, x, y, width, height, alias, compression, rotation)
pdf.addImage(imageData, 'PNG', 0, 0, tableWidth, tableHeight);
  • imageData:要插入的图像的数据(我们还没有此图像!)
  • PNG:要插入的图像的格式。
  • 0, 0:pdf文档中图像左上角的X和Y坐标。
  • tableWidth, tableHeight:将插入PDF文档中的图像的宽度和高度。

,但由于我们还没有imageData,这是我们要在这里使用dom-to-image Library

步骤4:将HTML表捕获为图像

domtoimage.toPng(HTMLElement);

domtoimage.toPngdom-to-image库提供的一种方法,它允许捕获DOM元素的屏幕截图并返回包含PNG图像的数据URI。该方法将DOM元素作为参数,并返回使用数据URI解决的承诺。

步骤5:保存PDF文件

pdf.save("table.pdf");

这是一个完整的vue示例

<template>
  <div class="wrapper">
    <table ref="table">
      <thead>
        <tr>
          <th>Month</th>
          <th>Revenue</th>
          <th>Profit</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td>January</td>
          <td>$10,000</td>
          <td>$2,000</td>
        </tr>
        <tr>
          <td>February</td>
          <td>$15,000</td>
          <td>$3,000</td>
        </tr>
        <tr>
          <td>March</td>
          <td>$12,000</td>
          <td>$2,500</td>
        </tr>
        <tr>
          <td>April</td>
          <td>$20,000</td>
          <td>$5,000</td>
        </tr>
      </tbody>
    </table>

    <button @click="onDownload">Download PDF</button>
  </div>
</template>
<script setup>
import { ref } from "vue";
import { jsPDF } from "jspdf";
import domtoimage from "dom-to-image";

const table = ref(null);

const onDownload = () => {
  const tableWidth = table.value.clientWidth;
  const tableHeight = table.value.clientHeight;

  // Convert HTML table to PNG image using dom-to-image
  domtoimage.toPng(table.value).then((imageData) => {
    // Create a new jsPDF document
    const pdf = new jsPDF("l", "pt", [tableWidth, tableHeight]);
    // Add the PNG image to the PDF document
    pdf.addImage(imageData, "PNG", 0, 0, tableWidth, tableHeight);
    // Save the PDF document
    pdf.save("table.pdf");
  });
};
</script>

检查Codesandbox

最后笔记

从vue.js中的HTML表创建PDF文档可以是一种有力的方法,可以使用户以便携式和专业的格式共享数据。在此示例中,我们使用JSPDF库生成PDF文档和DOM-TO-IMAGE库将HTML表转换为已添加到PDF的PNG图像。但是,请记住,如果您在表中使用自定义字体,则可能还需要将字体添加到PDF中。请务必检查jsPDF documentation以获取有关在PDF文档中添加自定义字体的进一步指南。愉快的编码! ð§ð»ð»