当前位置:首页 > JavaScript

js实现pdf报表

2026-02-02 19:59:25JavaScript

使用 jsPDF 生成 PDF 报表

jsPDF 是一个流行的 JavaScript 库,用于在客户端生成 PDF 文件。它支持文本、表格、图片等内容的添加。

安装 jsPDF:

npm install jspdf

基本用法示例:

import { jsPDF } from "jspdf";

const doc = new jsPDF();
doc.text("Hello world!", 10, 10);
doc.save("report.pdf");

添加表格:

const doc = new jsPDF();
doc.autoTable({
  head: [['ID', 'Name', 'Email']],
  body: [
    [1, 'John', 'john@example.com'],
    [2, 'Jane', 'jane@example.com']
  ]
});
doc.save('table.pdf');

使用 PDFKit 生成 PDF 报表

PDFKit 是另一个强大的 JavaScript PDF 生成库,特别适合复杂的文档生成。

安装 PDFKit:

npm install pdfkit

基本用法示例:

const PDFDocument = require('pdfkit');
const fs = require('fs');

const doc = new PDFDocument();
doc.pipe(fs.createWriteStream('output.pdf'));

doc.fontSize(25).text('Report Title', 100, 80);
doc.fontSize(12).text('This is a sample PDF report.', 100, 100);

doc.end();

添加表格功能需要额外实现:

function addTable(doc, data) {
  const startY = 150;
  const rowHeight = 20;
  const colWidth = 100;

  data.forEach((row, rowIndex) => {
    row.forEach((cell, colIndex) => {
      doc.text(cell, 100 + colIndex * colWidth, startY + rowIndex * rowHeight);
    });
  });
}

使用 html2pdf 从 HTML 生成 PDF

如果需要基于现有 HTML 内容生成 PDF,可以使用 html2pdf.js。

安装 html2pdf.js:

npm install html2pdf.js

基本用法:

import html2pdf from 'html2pdf.js';

const element = document.getElementById('report-container');
const opt = {
  margin:       10,
  filename:     'report.pdf',
  image:        { type: 'jpeg', quality: 0.98 },
  html2canvas:  { scale: 2 },
  jsPDF:        { unit: 'mm', format: 'a4', orientation: 'portrait' }
};

html2pdf().from(element).set(opt).save();

使用 Puppeteer 生成 PDF

对于需要服务器端生成的场景,Puppeteer 是一个强大的选择。

安装 Puppeteer:

npm install puppeteer

基本用法:

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();

  await page.setContent('<h1>Report</h1><p>This is a PDF report</p>');
  await page.pdf({ path: 'report.pdf', format: 'A4' });

  await browser.close();
})();

性能优化建议

对于大量数据的报表,考虑分页处理:

const doc = new jsPDF();
let y = 20;

data.forEach((item, index) => {
  if (y > 280) { // 接近页面底部
    doc.addPage();
    y = 20;
  }
  doc.text(`${item.id}: ${item.name}`, 10, y);
  y += 10;
});

使用 Web Worker 处理大型 PDF 生成任务,避免阻塞主线程:

js实现pdf报表

// main.js
const worker = new Worker('pdf-worker.js');
worker.postMessage({ data: largeDataSet });

// pdf-worker.js
self.onmessage = function(e) {
  const doc = new jsPDF();
  // 生成PDF逻辑
  const pdfOutput = doc.output('blob');
  self.postMessage({ pdf: pdfOutput });
};

以上方法涵盖了从简单到复杂的 PDF 报表生成需求,可根据具体场景选择合适的技术方案。

标签: 报表js
分享给朋友:

相关文章

jquery.js

jquery.js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,用于简化 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它的设计宗旨是“Write Less, Do Mor…

js实现vue路由

js实现vue路由

Vue路由基础实现 使用Vue Router实现前端路由需要先安装并配置路由库。Vue Router是Vue.js官方的路由管理器。 安装Vue Router: npm install vue-r…

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 通过监听鼠标事件(mousedown、mousemove、mouseup)实现拖拽功能。以下是核心代码逻辑: const draggableElement = document.…

js实现轮播图

js实现轮播图

基础轮播图实现 使用HTML、CSS和JavaScript实现一个简单的自动轮播图。HTML结构包含一个容器和多个图片项。 <div class="slider"> <div…

js实现百叶窗

js实现百叶窗

使用CSS和JavaScript实现百叶窗效果 通过CSS动画和JavaScript事件监听可以实现百叶窗效果。核心思路是将内容区域分割为多个条状元素,通过控制它们的展开/折叠状态来模拟百叶窗。 &…

链表实现js

链表实现js

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针(单向链表)或两个指针(双向链表)。与数组不同,链表在内存中非连续存储,插入和删除操作更高效,但随机…