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

js实现vue

Vue.js 简介 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。其核心库专注于视图层,易于与其他库或现有项目整合。 实现 Vue.js 的基本步骤 安装 Vue.j…

js实现拖拽

js实现拖拽

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

js实现轮播图

js实现轮播图

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

js 实现倒计时

js 实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是两种常见实现方式。 使用 setInterval 实…

js 进度条的实现

js 进度条的实现

使用 HTML 和 CSS 创建基础进度条 HTML 结构可以简单使用一个 div 元素作为容器,内部嵌套另一个 div 表示进度: <div class="progress-containe…

js实现图片预览

js实现图片预览

使用FileReader API实现图片预览 通过FileReader对象读取用户选择的图片文件并显示预览: const input = document.getElementById('imag…