jsPDF 未在 javascript 中定义

问题描述 投票:0回答:4

我导入了 jsPDF 库并尝试导出为 PDF,但收到 JavaScript 错误 jsPDF 未定义。

我尝试了其他类似的帖子,但它对我不起作用。

我在这里找到了小提琴https://jsfiddle.net/aybhvf8e/1/

<script type="text/javascript" src="https://unpkg.com/jspdf@latest/dist/jspdf.umd.min.js"></script>

$( document ).ready(function() {

var doc = new jsPDF();
var specialElementHandlers = {
    '#editor': function (element, renderer) {
        return true;
    }
};
})

$('#cmd').click(function () {
    doc.fromHTML($('#content').html(), 15, 15, {
        'width': 170,
            'elementHandlers': specialElementHandlers
    });
    doc.save('sample-file.pdf');
});


<div id="content">
     <h3>Hello, this is a H3 tag</h3>

    <p>A paragraph</p>
</div>
<div id="editor"></div>
<button id="cmd">generate PDF</button>
javascript jspdf
4个回答
4
投票

我认为你的代码似乎是正确的,但 cdn 有一些问题。我这里用的是debug一。

这是我创建的一个工作示例,您可以参考。如果由于 stackoverflow 限制而看不到 pdf 下载,请使用此小提琴进行测试。

工作下载PDF演示

我使用的cdn链接是:JsPDF CDN LINK。您绝对可以寻找任何其他可用版本。

function createPdf() {

  var doc = new jsPDF();
  
  source = $('#content')[0];
  
  specialElementHandlers = {
        '#editor': function (element, renderer) {
            return true
        }
    };
  
  doc.fromHTML(
    source,
    15,
    15, 
    {
      'width': 170,
      'elementHandlers': specialElementHandlers
    }
  );
  doc.save('sample-file.pdf')
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.2.61/jspdf.debug.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div id="content">
     <h3>Hello, this is a H3 tag</h3>

    <p>A paragraph</p>
</div>
<div id="editor"></div>
<button onclick="javascript:createPdf()" id="cmd">generate PDF</button>


1
投票

我发现了两个主要问题,在这个fork中解决了。首先,您没有链接到

jspdf
。你可以在 html 代码中做到这一点:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.5.3/jspdf.min.js"></script>

其次,在

click
函数外部添加
ready()
事件侦听器。这反过来会导致两个问题:事件可能无法附加(请确保检查
ready()
函数的原因)以及您在
ready()
函数中定义的变量不可用(超出范围)在
click
函数中。您可以通过在
click
侦听器内设置
ready
侦听器来解决这两个问题:

$( document ).ready(function() {

var doc = new jsPDF();
var specialElementHandlers = {
    '#editor': function (element, renderer) {
        return true;
    }
};
$('#cmd').click(function () {
    doc.fromHTML($('#content').html(), 15, 15, {
        'width': 170,
            'elementHandlers': specialElementHandlers
    });
    doc.save('sample-file.pdf');
});

})

0
投票

VQR .....一个问题,我的应用程序有时可以在没有网络的地方运行,所以下一行在没有网络的情况下将无法运行,对吗?

<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.5.3/jspdf.min.js"></script>

所以,我安装了它...

npm install jspdf --save

但是现在,我需要将哪些文件复制到我的 Js 地毯上才能使生产线工作?

var doc = new jsPDF(); 

0
投票

对我来说,只有这可以解决“jsPDF未定义”的问题 -

const doc = new jspdf.jsPDF()
,如下面的简单示例所示

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.4.0/jspdf.umd.min.js"></script>
  <title>Convert <div> to PDF</title>
</head>
    <body>

        <div id="content">
            <h1>Hello, World!</h1>
        </div>

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

        <script>
        function generatePDF() {
        // Default export is a4 paper, portrait, using millimeters for units
        **const doc = new jspdf.jsPDF();**

        doc.text("Hello world!", 10, 10);
        doc.save("a4.pdf");
        }
        </script>

    </body>
</html>

© www.soinside.com 2019 - 2024. All rights reserved.