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

打字稿 - 未捕获的 ReferenceError:未定义导出

ReferenceError: $ 未定义

ReferenceError:未定义 DartObject

ReferenceError:未定义解析

JavaScript Uncaught ReferenceError: jQuery is not defined;未捕获的 ReferenceError:$ 未定义 [重复]