2016-02-26 53 views
3

我試圖將我的表格導出爲PDF,寬度爲100%。我曾嘗試以下,但我一直不成功DataTables導出PDF爲100%寬度

var settings={}; 
settings.buttons = [ 
    { 
     extend:'pdfHtml5', 
     text:'Export PDF', 
     orientation:'landscape', 
     customize : function(doc){ 
      doc.styles['table'] = { width:100% } 
     } 
    } 
]; 
$('.dTable').dataTable(settings); 

回答

3

挖掘和挖掘,我發現你只需要加「*」的寬度爲每列後。我創建了一個簡單的函數,以便根據td標籤的數量創建一個數組,幷包含一個colspan檢查。

var tbl = $('.dTable'); 
var settings={}; 
settings.buttons = [ 
    { 
     extend:'pdfHtml5', 
     text:'Export PDF', 
     orientation:'landscape', 
     customize : function(doc){ 
      var colCount = new Array(); 
      $(tbl).find('tbody tr:first-child td').each(function(){ 
       if($(this).attr('colspan')){ 
        for(var i=1;i<=$(this).attr('colspan');$i++){ 
         colCount.push('*'); 
        } 
       }else{ colCount.push('*'); } 
      }); 
      doc.content[1].table.widths = colCount; 
     } 
    } 
]; 
$('.dTable').dataTable(settings); 
0
var dtTbl = tbl.DataTable({ 
      dom: 'Bt', 
      buttons: [{ 
        extend: "pdfHtml5", 
        title: "Report", 
        customize: function(doc) { 
         console.log(doc.content) 
         doc.content.splice(0, 0, { 
          margin: [12, 0, 0, 12], 
          alignment: "center", 
         }); 

         doc.content[2].table.widths = ["*", "*", "*"]; 
        }] 
      }) 

這是我做過什麼和它的工作。我只有3個標題,所以我在表格寬度中插入了三個星號。

15

找到一個更簡單快捷的方法來做到這一點。

{ 
    extend: 'pdf', 
    customize: function (doc) { 
    doc.content[1].table.widths = 
     Array(doc.content[1].table.body[0].length + 1).join('*').split(''); 
    } 
} 

這裏會發生什麼情況是這樣:

doc.content[1].table.widths是寬度爲每列的一個陣列,如果他們每個人是一個'*'這意味着該表將正好與頁面的100%列均勻分佈。

Array(doc.content[1].table.body[0].length + 1)在我的表的所有列的長度中創建一個數組。

.join('*')從數組中的所有單元格中創建一個字符串,每個單元格爲'*'

.split('');將其拆分回數組中。

希望我幫助過一些人。

+0

作品perfectlyy!謝謝 –

+0

令人驚歎的thx ..! – Sam

+0

這一個似乎工作,但超出了正確的頁邊距 – Fr0zenFyr

1
customize : function(doc){ 
    var colCount = new Array(); 
    var length = $('#reports_show tbody tr:first-child td').length; 
    console.log('length/number of td in report one record = '+length); 
    $('#reports_show').find('tbody tr:first-child td').each(function(){ 
     if($(this).attr('colspan')){ 
      for(var i=1;i<=$(this).attr('colspan');$i++){ 
       colCount.push('*'); 
      } 
     }else{ colCount.push(parseFloat(100/length)+'%'); } 
    }); 
} 

它在我的情況下工作。它計算標題中數據標記的數量。然後爲每個數據標籤分配100 /(數據標籤的數量)寬度。

0

您應該在'pdfmake.js'文件中查找t.table.widths的位置,並將值更改爲'*'。

t.table.widths = 「*」