我有一个包含大量列的数据集。
导出pdf时,不适合页面的列会被截断。
我尝试使用'方向'和'页面大小'选项,但还不够。
buttons: [
{
extend: 'pdfHtml5',
orientation: 'landscape',
pageSize: 'LEGAL'
}
]
理想情况下,它应该执行以下操作之一:
答案 0 :(得分:9)
我设法通过设置pdf的选项来解决这个问题,如
{
extend : 'pdfHtml5',
title : function() {
return "ABCDE List";
},
orientation : 'landscape',
pageSize : 'LEGAL',
text : '<i class="fa fa-file-pdf-o"> PDF</i>',
titleAttr : 'PDF'
}
成了
答案 1 :(得分:3)
感谢@parlad,但是下面是完美的解决方案 -
{
extend : 'pdfHtml5',
title : function() {
return "ABCDE List";
},
orientation : 'landscape',
pageSize : 'A0',
text : '<i class="fa fa-file-pdf-o"> PDF</i>',
titleAttr : 'PDF'
}
pageSize:&#39; A0&#39;,诀窍:) 希望它对其他人有所帮助。
答案 2 :(得分:0)
CDN:
https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.5.0/css/font-awesome.min.css
https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.6/css/bootstrap.min.css
https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.min.js
https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.6/js/bootstrap.min.js
https://cdn.datatables.net/s/bs/jszip-2.5.0,pdfmake-0.1.18,dt-1.10.10,b-1.1.0,b-flash-1.1.0,b-html5-1.1.0,b-print-1.1.0,fh-3.1.0,sc-1.4.0/datatables.min.css
https://cdn.datatables.net/s/bs/jszip-2.5.0,pdfmake-0.1.18,dt-1.10.10,b-1.1.0,b-flash-1.1.0,b-html5-1.1.0,b-print-1.1.0,fh-3.1.0,sc-1.4.0/datatables.min.js
HTML:
<h1>Print test</h1>
<div class="data-table-container">
<table class="table table-hover table-striped table-bordered data-table">
<thead>
<tr>
<th class="text-right">No.</th>
<th>Name</th>
</tr>
</thead>
<tbody>
<tr>
<td class="text-right">1</td>
<td>Java</td>
</tr>
<tr>
<td class="text-right">2</td>
<td>HTML</td>
</tr>
</tbody>
<tfoot>
<tr>
<td colspan="2" class="text-center">footer text</td>
</tr>
</tfoot>
</table>
</div>
JavaScript:
$('table.data-table').DataTable({
paging: false,
columnDefs: [{
targets: 'no-sort',
orderable: false
}],
dom: '<"row"<"col-sm-6"Bl><"col-sm-6"f>>' +
'<"row"<"col-sm-12"<"table-responsive"tr>>>' +
'<"row"<"col-sm-5"i><"col-sm-7"p>>',
fixedHeader: {
header: true
},
buttons: {
buttons: [{
extend: 'print',
text: '<i class="fa fa-print"></i> Print',
title: $('h1').text(),
exportOptions: {
columns: ':not(.no-print)'
},
footer: true,
autoPrint: false
}, {
extend: 'pdf',
text: '<i class="fa fa-file-pdf-o"></i> PDF',
title: $('h1').text(),
exportOptions: {
columns: ':not(.no-print)'
},
footer: true
}],
dom: {
container: {
className: 'dt-buttons'
},
button: {
className: 'btn btn-default'
}
}
}
});
答案 3 :(得分:0)
在这种情况下,有一种解决方案,如果将所有列设置为相等的长度,我检查了16列,发现所有列都正确显示。
您可以手动设置宽度,也可以在不知道列数的情况下动态设置宽度。
首先添加以下行:
$('.en-ajax-button').on('click', function(e){
var tbl = document.getElementById('descriptive-table');
var rCount = tbl.rows.length;
var cCount = 3;
var allArray = [];
for (var i = 1; i <rCount; i++){
var rowArray = [];
for (var j = 0; j <cCount; j++){
if (j != 2){
rowArray.push(tbl.rows[i].cells[j].children[0].value);
}
else{
rowArray.push(tbl.rows[i].cells[j].children[0].children[0].checked);
}
}
allArray.push(rowArray);
}
console.log(allArray);
});
现在您可以用其他方式设置表格宽度。选择您想要的那个。
方法1:
doc.content[0].layout = objLayout;
方法2: 如果要为不同的不同列设置固定宽度,则设置固定列大小:
//For equal column size
doc.content[0].table.widths = ["*", "*", "*", "*", "*", "*","*","*", "*"];
方法3: 动态设置相等的大小(如果有不同的表且列数不同)
doc.content[0].table.widths = ["5%", "5%", "8%", "8%", "8%", "8%","7%", "7%", "8%", "6%", "8%", "8%","7%", "7%"];