如何正确打印 HTML table 使用 jspdf.js 做 PDF?

How to print properly HTML table do PDF using jspdf.js?

这就是我想要实现的目标,我试图打印一个 html table,其中包含 HTML table 也在循环我的详细信息(我有 header 和细节)数据。但是当我使用 jspdf.js 打印我的 HTML table 时,pdf 中的 table 坏了,看起来不像 HTML,循环 table inside main table 乱七八糟,看来不会创建内幕了 table。如何正确打印table里面的table?

这是我的HTML样子

index.html

    <div id="customers">
    <div class="table-responsive">
        <table id="tbl" class="table table-hover">
            <thead>
                <tr>
                    <th style="background-color: #928989; color; white;">No BPS</th>
                    <th style="background-color: #928989; color; white;">Tanggal BPS</th>
                    <th style="background-color: #928989; color; white;">Tanggal Input</th>
                    <th style="background-color: #928989; color; white;">Status</th>
                </tr>
            </thead>
            <tbody>
                <tr ng-repeat-start="listLaporanRetur in listLaporanReturs | limitTo:quantity">
                    <td class="btn btn-mini btn-primary pull-center">BPXXXXXXX</td>
                    <td>2016-06-22</td>
                    <td>2016-06-22</td>
                    <td>SENT</td>
                </tr>
                <tr ng-repeat-end="">
                <td colspan="10" style="padding: 0">
                  <div>
                    <table class="table table-bordered table-hover">
                        <tr>
                            <td style="background-color: #80A3C1;">Kode Barang</td>
                            <td style="background-color: #80A3C1;">Qty</td>
                            <td style="background-color: #80A3C1;">Merk</td>
                            <td style="background-color: #80A3C1;">Hasil</td>
                        </tr> 
                        <tr ng-repeat-start="details in listLaporanRetur.returDetailList">
                            <td>STUFFID1</td>
                            <td>10</td>
                            <td>APPLE</td>
                            <td>BOOM</td>
                        </tr>
                  <tr>
                    <td>STUFFID2</td>
                            <td>40</td>
                            <td>SONY</td>
                            <td>BREAK</td>
                  </tr>
                        <tr ng-repeat-end=""></tr>
                    </table>

                  </div>
                </td>

                </tr>
            </tbody>
        </table>
    </div>
</div>
<button onclick="javascript:demoFromHTML();">PDF</button>

那么这是我的 javascript

function demoFromHTML() {
    var pdf = new jsPDF('p', 'pt', 'letter');
    // source can be HTML-formatted string, or a reference
    // to an actual DOM element from which the text will be scraped.
    source = $('#customers')[0];

    // we support special element handlers. Register them with jQuery-style 
    // ID selector for either ID or node name. ("#iAmID", "div", "span" etc.)
    // There is no support for any other type of selectors 
    // (class, of compound) at this time.
    specialElementHandlers = {
        // element with id of "bypass" - jQuery style selector
        '#bypassme': function (element, renderer) {
            // true = "handled elsewhere, bypass text extraction"
            return true
        }
    };
    margins = {
        top: 80,
        bottom: 60,
        left: 10,
        width: 700
    };
    // all coords and widths are in jsPDF instance's declared units
    // 'inches' in this case
    pdf.fromHTML(
    source, // HTML string or DOM elem ref.
    margins.left, // x coord
    margins.top, { // y coord
        'width': margins.width, // max width of content on PDF
        'elementHandlers': specialElementHandlers
    },

    function (dispose) {
        // dispose: object with X, Y of the last line add to the PDF 
        //          this allow the insertion of new lines after html
        pdf.save('Test.pdf');
    }, margins);
}

这是我的 jsfiddle http://jsfiddle.net/ugD5L/126/

如何正确打印 table,这样我就不必在 pdf 中弄乱 table?如果你们能给我看 jsfiddle 例子就更好了

正如答案嵌套 table 中提到的那样,目前 JsPDF 不受支持,但如果您可以修改 html 位(如果可能),则可以解决您的问题。

    <tr ng-repeat-end="" class="table table-bordered table-hover">

                        <td style="background-color: #80A3C1;">Kode Barang</td>
                        <td style="background-color: #80A3C1;">Qty</td>
                        <td style="background-color: #80A3C1;">Merk</td>
                        <td style="background-color: #80A3C1;">Hasil</td>
                    </tr> 

Demo