当前位置:首页 > JavaScript

js实现pdf

2026-04-05 19:16:03JavaScript

使用 jsPDF 生成 PDF

安装 jsPDF 库:

npm install jspdf

基本示例代码:

import { jsPDF } from "jspdf";

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

使用 PDFKit 生成 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('Some text here', 100, 100);
doc.end();

使用 html2pdf.js 转换 HTML 为 PDF

安装 html2pdf.js:

npm install html2pdf.js

基本示例代码:

import html2pdf from 'html2pdf.js';

const element = document.getElementById('content-to-export');
html2pdf().from(element).save();

使用 Puppeteer 生成 PDF

安装 Puppeteer:

npm install puppeteer

基本示例代码:

const puppeteer = require('puppeteer');

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

添加样式和格式

jsPDF 添加字体和样式:

doc.setFont("helvetica", "bold");
doc.setFontSize(16);
doc.setTextColor(255, 0, 0);

PDFKit 添加图像:

doc.image('path/to/image.png', {
  fit: [250, 300],
  align: 'center',
  valign: 'center'
});

处理中文显示问题

jsPDF 使用自定义字体:

import { jsPDF } from "jspdf";
import simhei from './simhei-normal';

const doc = new jsPDF();
doc.addFileToVFS("simhei-normal.ttf", simhei);
doc.addFont("simhei-normal.ttf", "simhei", "normal");
doc.setFont("simhei");
doc.text("中文内容", 10, 10);

生成表格

jsPDF 自动表格插件:

import 'jspdf-autotable';

doc.autoTable({
  head: [['Name', 'Email', 'Country']],
  body: [
    ['John', 'john@example.com', 'USA'],
    ['李华', 'lihua@example.com', 'China']
  ]
});

分页控制

PDFKit 分页示例:

doc.addPage();
doc.text('This is page 2', 100, 100);

jsPDF 分页示例:

doc.addPage();
doc.text('This is page 2', 10, 10);

保存选项

设置 PDF 元数据:

doc.setProperties({
  title: 'Sample PDF',
  subject: 'Demo PDF generation',
  author: 'Your Name',
  keywords: 'javascript, pdf',
  creator: 'Your App'
});

浏览器兼容性提示

现代浏览器支持这些库生成 PDF,但需要注意:

  • 某些功能可能需要 polyfill
  • 移动端浏览器可能有不同表现
  • 大型文档可能需要性能优化

这些方法各有优缺点,选择取决于具体需求:

js实现pdf

  • 简单文本:jsPDF
  • 复杂布局:PDFKit
  • HTML转换:html2pdf.js
  • 网页截图:Puppeteer

标签: jspdf
分享给朋友:

相关文章

js 实现vue

js 实现vue

实现 Vue 的核心功能 在 JavaScript 中实现 Vue 的核心功能需要模拟数据绑定、虚拟 DOM 和响应式系统。以下是一个简化版的实现思路: 响应式系统 通过 Object.define…

js实现日历

js实现日历

实现日历的基本思路 使用JavaScript实现日历的核心是动态生成日期表格,并处理月份切换逻辑。需要计算当前月的天数、起始星期几,并动态渲染到页面上。 获取当前日期信息 通过Date对象获取当前年…

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…

js类实现

js类实现

使用类实现 JavaScript 功能 在 JavaScript 中,类(Class)是一种语法糖,基于原型继承机制。通过 class 关键字可以更直观地定义对象模板。 基本类定义 class…

js实现密码

js实现密码

密码强度验证 使用正则表达式验证密码强度是一种常见方法。以下代码检查密码是否包含大小写字母、数字和特殊字符,且长度至少为8位: function checkPasswordStrength(pass…