未捕获的 ReferenceError:jsPDF 未在 2.3.0 版和普通 JS 中定义

问题描述

我需要从表格中生成 PDF 报告,并且我正在使用 jsPDF 和 jsPDF-autotable。 我知道使用 jsPDF 生成 PDF 文件非常简单,并且我相信我正在遵循 jsPDF 文档页面上提到的确切步骤,但到目前为止我还没有取得任何成功。我也遇到过很多类似的问题,但似乎没有一个我有用。

这是我在 html head 标签中导入 jsPDF 和 jsPDF-autotable 的方法

<!-- Js PDF -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.3.0/jspdf.umd.min.js"></script>
<!-- Js PDF Auto Table -->
<script src="https://cdn.jsdelivr.net/npm/jspdf-autotable@3/dist/jspdf.plugin.autotable.min.js"></script>

这是我应该触发 JavaScript 函数的按钮的 html 代码

<div class="col text-end">
        <button type="button" class="btn btn-secondary" id="btnGenerateReport" onclick="prepareReport()">
            Generate Report
        </button>
</div>

这是一个 JavaScript 函数,它应该只基于表格生成一个 PDF 文件

function prepareReport() {
    var doc = new jsPDF();
    doc.autoTable({ html: '#reportTable' });
    doc.save(stationSelected + '_' + dateSelected + '.pdf');
}

这是我得到的控制台错误

reports.js:180 Uncaught ReferenceError: jsPDF is not defined
at prepareReport (reports.js:180)
at HTMLButtonElement.onclick (reports:213)

我真的很感激我能得到的所有帮助。 谢谢。

解决方法

问题出在您的函数中:

function prepareReport() {
    var doc = new jsPDF();
    doc.autoTable({ html: '#reportTable' });
    doc.save(stationSelected + '_' + dateSelected + '.pdf');
}

像您一样使用标签导入此模块,在查看 jsPDF project repo 后,将全局变量导出为 jspdf,而不是 jsPDF

所以正确的工作版本应该是:

function prepareReport() {
    var doc = new jspdf.jsPDF();
    doc.autoTable({ html: '#reportTable' });
    doc.save(stationSelected + '_' + dateSelected + '.pdf');
}

请注意,仅此代码是不够的,因为未定义 stationSelecteddateSelected。您还应该为这些值提供定义。

实时 codepen 工作示例。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...