当前位置:首页 > JavaScript

js实现pdf报表

2026-04-07 13:44:50JavaScript

使用jsPDF生成PDF报表

jsPDF是一个流行的JavaScript库,用于客户端生成PDF文件。它支持文本、表格、图像等多种元素。

安装方式:

npm install jspdf

基础示例代码:

import { jsPDF } from "jspdf";

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

添加表格数据

使用jsPDF-autoTable插件可以方便地添加表格:

import { jsPDF } from "jspdf";
import "jspdf-autotable";

const doc = new jsPDF();
const data = [
  ["ID", "Name", "Value"],
  [1, "Item 1", 100],
  [2, "Item 2", 200]
];

doc.autoTable({
  head: [data[0]],
  body: data.slice(1),
  startY: 20
});

doc.save("table-report.pdf");

使用PDFKit生成PDF

PDFKit是另一个功能强大的PDF生成库,适合更复杂的文档需求。

安装:

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();

添加图表到PDF

结合Chart.js和jsPDF可以将图表转换为PDF:

// 先使用canvas生成图表
const chartCanvas = document.getElementById('chart');
const chartImage = chartCanvas.toDataURL('image/png');

// 添加到PDF
const doc = new jsPDF();
doc.addImage(chartImage, 'PNG', 15, 40, 180, 100);
doc.save('chart-report.pdf');

服务器端生成方案

对于Node.js环境,Puppeteer可以渲染网页后生成PDF:

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('http://example.com/report', {waitUntil: 'networkidle0'});
  await page.pdf({path: 'report.pdf', format: 'A4'});
  await browser.close();
})();

样式和布局控制

jsPDF支持基本样式设置:

const doc = new jsPDF();
doc.setFont("helvetica", "bold");
doc.setTextColor(255, 0, 0);
doc.text("Important Note", 10, 10);

doc.setFontSize(10);
doc.setTextColor(0, 0, 0);
doc.text("Details go here...", 10, 20);

多页文档处理

处理长内容自动分页:

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

for(let i = 0; i < 100; i++) {
  if(y > 280) {
    doc.addPage();
    y = 20;
  }
  doc.text(`Item ${i}`, 10, y);
  y += 10;
}

doc.save("long-report.pdf");

中文支持

处理中文需要添加字体:

import { jsPDF } from "jspdf";

const doc = new jsPDF();
doc.addFont('NotoSansSC-Regular.ttf', 'NotoSansSC', 'normal');
doc.setFont('NotoSansSC');
doc.text("中文内容", 10, 10);
doc.save("chinese-report.pdf");

性能优化建议

大量数据生成时考虑分块处理,避免浏览器卡顿。对于复杂报表,建议先在服务器端生成或使用Web Worker。

js实现pdf报表

浏览器内存限制大约在500页左右,超过此限制可能导致崩溃。对于超长文档,建议分批生成后合并。

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

相关文章

js实现

js实现

JavaScript 实现方法 JavaScript 是一种广泛使用的编程语言,适用于网页开发、服务器端编程以及移动应用开发。以下是几种常见的 JavaScript 实现方法: 网页交互功能 使用…

js实现图片预览

js实现图片预览

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

js实现vr

js实现vr

使用WebXR API实现VR体验 WebXR是浏览器中实现VR和AR体验的标准API,它取代了早期的WebVR。现代浏览器如Chrome、Edge和Firefox已支持WebXR。 // 初始化W…

利用js实现

利用js实现

使用 JavaScript 实现 在 JavaScript 中,可以通过多种方式实现功能,具体取决于需求。以下是几种常见的方法: 方法一:使用原生 JavaScript // 示例代码…

js钟表实现

js钟表实现

实现JavaScript钟表的基本方法 创建一个简单的JavaScript钟表可以通过以下步骤完成,涵盖数字和模拟两种形式。 数字钟表实现 HTML结构只需一个显示时间的容器: <div i…

js实现图片

js实现图片

图片加载与显示 在JavaScript中,可以通过Image对象动态加载图片。创建实例后设置src属性触发加载,通过onload回调处理加载完成后的操作: const img = new Ima…