jsPDF ReferenceError:未定义窗口
Posted
技术标签:
【中文标题】jsPDF ReferenceError:未定义窗口【英文标题】:jsPDF ReferenceError: window is not defined 【发布时间】:2018-05-27 06:40:41 【问题描述】:我需要用 javascript 创建一个 PDF。我找到了 npm 包“jsPDF”。我已经用npm install jspdf
安装了“jsPDF”。它成功安装,但是当我执行以下代码时:
const jspdf = require ('jspdf');
let doc = new jspdf();
doc.setFontSize(40);
doc.text(35, 25, 'PDF with jsPDF!');
我收到一条错误消息,上面写着ReferenceError: window is not defined
。
有人知道我的代码出了什么问题,或者缺少某些导入吗?
【问题讨论】:
【参考方案1】:在服务器端使用 jsPDF 时会出现问题。检查此拉取请求Refactor acroform.js so that it is working in node.js and enable tests for IE 11
【讨论】:
【参考方案2】:替换这个:
const jspdf = require ('jspdf');
let doc = new jspdf();
用这个:
import jsPDF from 'jspdf';
var doc = new jsPDF('p', 'pt');
【讨论】:
【参考方案3】:解决这个问题:
npm install jspdf
在 node_modules/jspdf/dist/ 文件夹中,你会看到一个 jspdf.node.min.js 文件,用这个替换 jspdf.min.js。
那么下面的代码会生成一个pdf。
//This is a fix for the ReferenceError: window is not defined
//
global.window = document: createElementNS: () => return ;
global.navigator = ;
global.btoa = () => ;
var fs = require('fs');
var jsPDF = require('jspdf');
var doc = new jsPDF();
doc.setFontSize(40);
doc.text(35, 25, 'PDF with jsPDF!');
var data = doc.output();
fs.writeFileSync('./document.pdf', data);
delete global.window;
delete global.navigator;
delete global.btoa;
【讨论】:
【参考方案4】:由于我合并了服务器端渲染,最终对我有用的是创建一个环境变量来查看我是否在浏览器中,然后用这个标志包装你的代码。
if(process.env.BROWSER)
const jspdf = require ('jspdf');
let doc = new jspdf();
doc.setFontSize(40);
doc.text(35, 25, 'PDF with jsPDF!');
【讨论】:
以上是关于jsPDF ReferenceError:未定义窗口的主要内容,如果未能解决你的问题,请参考以下文章
打字稿 - 未捕获的 ReferenceError:未定义导出
JavaScript Uncaught ReferenceError: jQuery is not defined;未捕获的 ReferenceError:$ 未定义 [重复]