You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

服务端使用jsPDF从HTML生成PDF出现空白文件如何解决

问题原因与修复方案

你遇到的生成空白PDF问题由两个常见原因导致,按以下步骤修复即可:

核心原因1:异步逻辑顺序错误

doc.html() 是异步方法,你当前的同步执行逻辑会在HTML内容还没完成渲染的时候就触发doc.save(),这是绝大多数同类问题的诱因。

修正后的基础调用代码如下:

const { jsPDF } = require("jspdf");  
const doc = new jsPDF();

// 通过callback参数确认渲染完成后再执行保存
doc.html('<p>Hola Mundo!</p>', {
  callback: function (renderedDoc) {
    renderedDoc.save("export.pdf");
  },
  // 可按需配置渲染起始坐标、缩放比例等参数
  x: 10,
  y: 10
});

核心原因2:服务端缺少DOM环境支持

你是在Node.js服务端运行代码,而doc.html依赖的html2canvas包需要浏览器DOM环境才能正常工作,原生Node环境没有内置window、document等全局DOM对象,需要额外配置模拟环境:

  • 首先安装DOM模拟依赖:
npm install jsdom @types/jsdom --save
  • 在代码开头注入全局DOM对象:
const { JSDOM } = require('jsdom');
// 初始化空DOM环境
const dom = new JSDOM('<!DOCTYPE html>');
global.window = dom.window;
global.document = dom.window.document;
// 挂载html2canvas依赖的其他全局属性
global.navigator = {
  userAgent: 'node.js'
};

可选验证点

如果调整后仍然异常,可优先排查两项配置:

  • 确认html2canvas已正常安装,jsPDF的HTML渲染能力强依赖该包,缺失时会无报错直接返回空白内容
  • 可以先把HTML内容放到浏览器端执行渲染逻辑,确认HTML本身没有语法兼容问题后再迁移到服务端

内容的提问来源于stack exchange,提问作者Seddik ld

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 02:09:03