当前位置:首页 > 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

基本用法示例:

js实现pdf报表

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

基本用法:

js实现pdf报表

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 生成任务,避免阻塞主线程:

// 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
分享给朋友:

相关文章

js实现轮播图

js实现轮播图

轮播图实现方法 基础HTML结构 <div class="slider"> <div class="slides"> <img src="image1.jpg…

js实现选项卡

js实现选项卡

实现选项卡的基本思路 选项卡通常由一组标签和对应的内容面板组成。点击标签时,显示对应的内容面板,隐藏其他面板。实现这一效果需要结合HTML结构、CSS样式和JavaScript交互逻辑。 HTML结…

js 实现vue

js 实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,可以通过数据绑定、响应式系统和虚拟 DOM 来实现。以下是实现 Vue.js 核心功能的简化版本。 数据响应式系…

js 实现分页

js 实现分页

实现分页的基本逻辑 分页功能通常需要后端返回数据总量或总页数,前端根据当前页码和每页条数截取对应数据。以下是一个基于JavaScript的简单分页实现方案: 前端分页实现 假设已有从后端获取的完整数…

js实现点击显示和隐藏

js实现点击显示和隐藏

实现点击显示和隐藏的JavaScript方法 使用classList.toggle切换类名 通过添加/移除CSS类控制元素的显示与隐藏,需提前在CSS中定义隐藏样式(如display: none)。…

实现继承js

实现继承js

实现继承的方式 在JavaScript中,实现继承可以通过多种方式完成,每种方式都有其优缺点。以下是几种常见的实现继承的方法: 原型链继承 原型链继承是最基本的继承方式,通过将子类的原型指向父类的实…