【问题标题】:JSPDF-autotable : jsPDF is not definedJSPDF-autotable : jsPDF 未定义
【发布时间】:2018-11-22 02:58:50
【问题描述】:

尝试提供在 xpages 中生成 pdf 的可能性 我的代码:

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">

<xp:this.resources>
<xp:script src="generate.js" clientSide="true"></xp:script>
</xp:this.resources>
<script type='text/javascript' src='js/jspdf.min.js'></script>
<script type="text/javascript"  src="js/jspdf.plugin.autotable.js"></script>

<button onclick="generate()">Generate PDF</button>

<xp:br></xp:br>
<xp:br></xp:br>
<table id="basic-table" >
<thead>
<tr>
  <th>ID</th>
  <th>First name</th>
  <th>Last name</th>
  <th>Email</th>
  <th>Country</th>
  <th>IP-address</th>
</tr>
</thead>
<tbody>
<tr>
  <td align="right">1</td>
  <td>Donna</td>
  <td>Moore</td>
  <td>dmoore0@furl.net</td>
  <td>China</td>
  <td>211.56.242.221</td>
</tr>
    <tr>
      <td align="right">2</td>
      <td>Janice</td>
      <td>Henry</td>
      <td>jhenry1@theatlantic.com</td>
      <td>Ukraine</td>
      <td>38.36.7.199</td>
     </tr>
     <tr>
      <td align="right">3</td>
      <td>Ruth</td>
      <td>Wells</td>
      <td>rwells2@constantcontact.com</td>
      <td>Trinidad and Tobago</td>
      <td>19.162.133.184</td>
    </tr>
    <tr>
      <td align="right">4</td>
      <td>Jason</td>
      <td>Ray</td>
      <td>jray3@psu.edu</td>
      <td>Brazil</td>
      <td>10.68.11.42</td>
    </tr>
    <tr>
      <td align="right">5</td>
      <td>Jane</td>
      <td>Stephens</td>
      <td>jstephens4@go.com</td>
      <td>United States</td>
      <td>47.32.129.71</td>
    </tr>
    <tr>
      <td align="right">6</td>
      <td>Adam</td>
      <td>Nichols</td>
      <td>anichols5@com.com</td>
      <td>Canada</td>
      <td>18.186.38.37</td>
    </tr>
  </tbody>
</table>

    <xp:br></xp:br>
</xp:view>

我在控制台中遇到错误:

未捕获的 ReferenceError: jsPDF 未定义 在生成(生成:3) 在 HTMLButtonElement.onclick (test_pdf2.xsp:20) 生成@生成:3 onclick@test_pdf2.xsp:20

generate.js 的第 3 行 = var doc = new jsPDF('p','pt');

当我查看源代码时,我可以在 js 下看到 2 个库

怎么了?

【问题讨论】:

  • js 文件的顺序很重要。 jspdf.min.js如果generate.js依赖需要先加载。
  • 知道如何先加载它吗?
  • 只需将 generate.js 脚本块在 HTML 中进一步向下移动(在 jspdf 块下)。虽然如果第 3 行是在点击时运行的,那应该没关系。

标签: xpages


【解决方案1】:

jsPDF 使用 AMD。这是使用 AMD 的 jspdf.min.js 源代码中的 sn-p:

function"==typeof define&&define.amd?define(e)

不幸的是,AMD 加载与 XPages 中的 Dojo 发生冲突。见this answer on how to remove AMD loading

您需要通过将jspdf.min.js中的代码更改为以下代码来更改AMD加载部分:

function"==typeof define&&false?define(e)

jspdf.plugin.autotable.js 也使用 AMD。这里你也需要将define.amd替换为false

【讨论】:

  • 进行了此更改。现在我收到另一个错误: Uncaught TypeError:doc.autoTableHtmlToJson is not a function,在 generate.js 的第 5 行,该行是: var res = doc.autoTableHtmlToJson(document.getElementById("basic-table"));还有其他依赖吗?
  • 对不起,它正在工作。看来我的浏览器没有接收到 jspdf.plugin.autotable.js 中的变化一定是在某个地方被查过......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-27
  • 1970-01-01
  • 2021-12-17
  • 1970-01-01
  • 2017-08-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多