javascript - 使用 jsPDF 或 javascript 将 HTML 页面中的 div 下载为 pdf

标签 javascript jquery html css jspdf

我想做的就是将 div 中 id 为“pdf”的内容打印成 pdf。这必须使用 JavaScript 来完成。然后应自动下载文件名为“foobar.pdf”的“pdf”文档 我正在使用 jsPDF 脚本。它抛出“Uncaught TypeError: Cannot read property 'name' of undefined”

异常[在此处输入链接描述][1]

 function demoFromHTML() {
        debugger;
        var pdf = new jsPDF('p', 'pt', 'letter');
        source = $('#divInvoice')[0];
        var Name = $("#spnorderno").text();
        specialElementHandlers = {
            '#editor': function (element, renderer) {
                return true
            }
        };
        margins = {
            top: 80,
            bottom: 60,
            left: 40,
            width: 522
        };
        pdf.fromHTML(
        source,
        margins.left, 
        margins.top, { 
            'width': margins.width,
            'elementHandlers': specialElementHandlers
        },
        function (dispose) {
            pdf.save('Invoice'+Name+'.pdf');
        }, margins);
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
<script src="http://mrrio.github.io/jsPDF/dist/jspdf.debug.js"></script>
<div style="width:800px; border-top:5px solid #1dbbe3; margin:0px auto; padding:25px; border-left:1px solid #ccc;  border-bottom:1px solid #ccc;  border-right:1px solid #ccc; font-family: Arial; font-size:13px; font-weight:normal; text-decoration:none; line-height:19px;">
<div class="printBox">
  <table width="100%" style="margin-bottom:30px;">
    <tr>
      <td align="left" valign="middle">LOGO</td>
      <td align="right" valign="middle" style="font-size:20px;">LAB</td>
    </tr>
    <tr>
      <td align="left" valign="middle" height="60"><span style="color:#757575;">Address:</span><br>
        <span>INDIA</span></td>
      <td align="right" valign="top"><span style="color:#757575;">Address:</span><br>
        <span>INDIA</span></td>
    </tr>
    <tr>
      <td align="left" valign="middle"><span style="color:#757575;">Contact No.:</span> <br>
        <span>+000000000000</span></td>
      <td align="right" valign="middle"><span style="color:#757575;">Contact No.:</span> <br>
        <span>+000000000</span></td>
    </tr>
  </table>
  <table width="100%" style="border-top:3px solid #ccc; margin-top:15px;">
    <tr>
      <td style="border-bottom:1px solid #ccc;padding: 6px 0 8px;"><span style="color:#757575;">Patient name:</span> <span style="color:#1dbae3; font-weight:bold;">Rahul Kumar Sharma</span></td>
    </tr>
    <tr>
      <td style="border-bottom:1px solid #ccc;padding: 6px 0 8px;"><span style="color:#757575;">Age:</span> <span>25 year</span></td>
    </tr>
    <tr>
      <td style="padding: 7px 0 20px;"><span style="color:#757575;">Gender: </span><span>male</span></td>
    </tr>
  </table>
  <table width="100%" style="border-top:3px solid #ccc; margin-top:15px;" cellpadding="0" cellspacing="0">
    <tr>
      <td style="border-bottom:1px solid #ccc;padding: 15px 0 12px; font-size:16px;" colspan="3" align="left">Order No: <span style="color:#fe8534;">O1500002200</span></td>
      <td style="border-bottom:1px solid #ccc;padding: 15px 0 12px;" colspan="2" align="right"><span style="color:#757575;">Order Date:</span> 28 October 2015 11:07AM</td>
    </tr>
    <tr>
      <td style="border-bottom:1px solid #ccc;padding: 6px 0 8px; font-weight:bold;" width="7%" align="left">S. No.</td>
      <td style="border-bottom:1px solid #ccc;padding: 6px 0 8px; font-weight:bold;" colspan="3" align="left">Investigations</td>
      <td style="border-bottom:1px solid #ccc;padding: 6px 0 8px; font-weight:bold;" width="19%" align="right" valign="middle">Amount</td>
    </tr>
    <tr>
      <td style="border-bottom:1px solid #ccc;padding: 6px 0 8px;" align="left" valign="middle">1</td>
      <td style="border-bottom:1px solid #ccc;padding: 6px 0 8px;" colspan="3" align="left" valign="middle">Senior Citizen Package Male</td>
      <td style="border-bottom:1px solid #ccc;padding: 6px 0 8px;" align="right" valign="middle">Rs. 2000</td>
    </tr>
    <tr>
      <td style="border-bottom:1px solid #ccc;padding: 6px 0 8px;" align="left" valign="middle">2</td>
      <td style="border-bottom:1px solid #ccc;padding: 6px 0 8px;" colspan="3" align="left" valign="middle">Senior Citizen Package Male</td>
      <td style="border-bottom:1px solid #ccc;padding: 6px 0 8px;" align="right" valign="middle">Rs. 2000</td>
    </tr>
    <tr>
      <td style="border-bottom:1px solid #ccc;padding: 6px 0 8px;" align="left" valign="middle">3</td>
      <td style="border-bottom:1px solid #ccc;padding: 6px 0 8px;" colspan="3" align="left" valign="middle">Senior Citizen Package Male</td>
      <td style="border-bottom:1px solid #ccc;padding: 6px 0 8px;" align="right" valign="middle">Rs. 2000</td>
    </tr>
    <tr>
      <td style="border-bottom:1px solid #ccc;padding: 6px 0 8px;" align="left" valign="middle">4</td>
      <td style="border-bottom:1px solid #ccc;padding: 6px 0 8px;" colspan="3" align="left" valign="middle">Senior Citizen Package Male</td>
      <td style="border-bottom:1px solid #ccc;padding: 6px 0 8px;" align="right" valign="middle">Rs. 2000</td>
    </tr>
    <tr>
      <td colspan="5"><table width="100%" cellpadding="0" cellspacing="0">
          <tr>
            <td style="border-bottom:1px solid #ccc;padding: 6px 0 8px; font-weight:bold;" width="82%" align="right" valign="middle">Sub Total:</td>
            <td style="border-bottom:1px solid #ccc;padding: 6px 0 8px; font-weight:bold;" width="18%" align="right" valign="middle">Rs. 12000</td>
          </tr>
          <tr>
            <td style="border-bottom:1px solid #ccc;padding: 6px 0 8px;" align="right" valign="middle">Discount:</td>
            <td style="border-bottom:1px solid #ccc;padding: 6px 0 8px;" align="right" valign="middle">Rs. 12000</td>
          </tr>
          <tr>
            <td style="border-bottom:1px solid #ccc;padding: 6px 0 8px;" align="right" valign="middle">Promo Discount:</td>
            <td style="border-bottom:1px solid #ccc;padding: 6px 0 8px;" align="right" valign="middle">Rs. 12000</td>
          </tr>
          <tr>
            <td style="border-bottom:3px solid #ccc;padding: 6px 0 8px;" align="right" valign="middle">Your Price:</td>
            <td style="border-bottom:3px solid #ccc;padding: 10px 0 10px; font-size:19px;" align="right" valign="middle"><b>Rs. 12000</b></td>
          </tr>
        </table></td>
    </tr>
  </table>
  </div>
  <div class="printBtnBox" style="margin-top: 25px;">
  <a href="#" style="background:#1dbae3; padding: 8px 20px; border-radius:3px; color:#fff; text-decoration:none; font-size:16px;" onclick='demoFromHTML()'>Download</a>
  </div>
  
</div>

最佳答案

您是否检查了 $("#spnorderno").text() 返回的内容?这可能是未定义的。

除此之外,您应该发布错误发生的确切位置,这很可能发生在 jsPDF 库中。

关于javascript - 使用 jsPDF 或 javascript 将 HTML 页面中的 div 下载为 pdf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33435795/

相关文章:

javascript - Eslint:在条件表达式中不必要地使用 bool 文字

javascript - 如何在Threejs中从平面发出光?

javascript - 为什么我总是收到 401(未经授权)错误以防 jquery ajax

javascript - 嵌入 Youtube 视频 http/https 匹配错误

javascript - 如何通过 Javascript 中的表单数据附加对象数组

javascript - 使用外部 Javascript 将图像添加到 HTML Canvas

javascript - 将悬停事件绑定(bind)到组合框项目时出现问题

javascript - 以更好的方式重新配置我的脚本

html - 我想打印我的博客文章

javascript - 适用于桌面和移动设备的 jQuery 事件