2016-10-18 13 views
0

下のHTMLテーブルからpdfを生成したいのですが、jsPdf-AutoTableを使用しています。私は下の画像のようにPDFを取得しています。テーブルは、データがない正しい行数で構成されています。このテーブルのpdfを生成する方法。 このテーブルでもDatatable.jsを使用しています。下記のjsPDF-AutoTableは、空のセルを含むPDFテーブルを生成します。

enter image description here

HTMLマークアップ表とJavascript。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"> </script> 
 
<script src="https://github.com/MrRio/jsPDF/blob/master/dist/jspdf.debug.js"> </script> 
 
<script src="https://github.com/simonbengtsson/jsPDF-AutoTable/blob/master/dist/jspdf.plugin.autotable.src.js"> </script> 
 

 
// this function generates the pdf using the table 
 
function generate() { 
 
    var columns = ["productid", "productname", "unit", "unitprice"]; 
 
    var data = tableToJson($("#products-table").get(0), columns); 
 
    var doc = new jsPDF('p', 'pt'); 
 
    doc.autoTable(columns, data); 
 
    doc.save("table.pdf"); 
 
} 
 

 
// This function will return table data in an Array format 
 
function tableToJson(table, columns) { 
 
    var data = []; 
 
    // go through cells 
 
    for (var i = 1; i < table.rows.length; i++) { 
 
    var tableRow = table.rows[i]; 
 
    var rowData = {}; 
 
    for (var j = 0; j < tableRow.cells.length; j++) { 
 
     rowData[columns[j]] = tableRow.cells[j].innerHTML; 
 
    } 
 
    data.push(rowData); 
 
    } 
 
    return data; 
 
}
<table id="products-table" cellspacing="0" width="100%"> 
 
    <thead> 
 
     <tr> 
 
     <th>ProductId</th> 
 
     <th>ProductName</th> 
 
     <th>Unit</th> 
 
     <th>UnitPrice</th> 
 
     </tr> 
 
    </thead> 
 
    <tbody> 
 
     <tr> 
 
     <td>1</td> 
 
     <td>2</td> 
 
     <td>3</td> 
 
     <td>4</td> 
 
     </tr> 
 
     <tr> 
 
     <td>1</td> 
 
     <td>2</td> 
 
     <td>3</td> 
 
     <td>4</td> 
 
     </tr> 
 
     <tr> 
 
     <td>1</td> 
 
     <td>2</td> 
 
     <td>3</td> 
 
     <td>4</td> 
 
     </tr> 
 
     <tr> 
 
     <td>1</td> 
 
     <td>2</td> 
 
     <td>3</td> 
 
     <td>4</td> 
 
     </tr> 
 
    </tbody> 
 
    </table> 
 

 
    <a href="#" onclick="generate()" id="generate-report-button" class="btn">Run Code</a>

答えて

2

あなたがテーブルのデータからオブジェクトを作成しているからです。データから配列を作成する必要があります。

function tableToJson(table, columns) { 
    var data = []; 
    // go through cells 
    for (var i = 1; i < table.rows.length; i++) { 
    var tableRow = table.rows[i]; 

    // create an array rather than an object 
    var rowData = []; 
    for (var j = 0; j < tableRow.cells.length; j++) { 
     rowData.push(tableRow.cells[j].innerHTML) 
    } 
    data.push(rowData); 
    } 

    return data; 
} 

チェック作業フィドル https://jsfiddle.net/shakee93/dh8e7gjc/

+0

ソリューションは、偉大な働いています。 –

関連する問題