我已经设法制作了一种新字体并将其添加到数据表中,但是当我生成PDF时,文本从左到右对齐,这与我想要的相反,是否有任何配置可以用来制作从右到左。此外,我正在使用服务器端处理和多列过滤,而PDF按钮仅打印当前页面,使其打印整个过滤结果的配置是什么。提前致谢
您需要使用特定的 pdfmake 配置选项来操作导出的 PDF:https://datatables.net/reference/button/pdfHtml5
这将使文本右对齐,它不会使文本从右到左排列,但是:
buttons: [
{
extend: 'pdf',
customize: function ( doc ) {
doc.content[0].alignment = 'right';
}
}
]
嗨,
这是我的波斯语 ltr 到 rtl 的代码,这是一个可以在 DataTable 中用于导出为 pdf 的函数:
function buttonForDatatable(columns, margins, prtrait = "portrait",title='',message='') {
return [
{
extend: 'copy',
text:"کپی",
exportOptions: {
columns: columns.reverse(),
},
}, {
extend: 'csv',
text:"سی اس وی",
exportOptions: {
columns: columns.reverse(),
},
}, {
extend: 'print',
text:"پرینت",
exportOptions: {
columns: columns.reverse(),
},
}, {
extend: 'excel',
text:"اکسل",
exportOptions: {
columns: columns,
},
} ,{
extend: 'pdfHtml5',
orientation: prtrait,
footer: true,
alignment: "center",
title: title,
messageTop:message,
text: "PDF",
exportOptions: {
alignment: "center",
orthogonal: "PDF",
columns: columns,
modifier: {order: 'index', page: 'current'}
},
customize: function (doc) {
doc.styles.message.alignment = "right";
doc.styles.tableBodyEven.alignment = "center";
doc.styles.tableBodyOdd.alignment = "center";
doc.styles.tableFooter.alignment = "center";
doc.styles.tableHeader.alignment = "center";
doc.content[0]['text'] = doc.content[0]['text'].split(' ').reverse().join(' ');
doc.content[1].margin = margins;
doc.content[2].margin = margins;
for (var i = 0; i < doc.content[2].table.body.length; i++) {
// console.log(doc.content[1].table.body[i].length);
for (var j = 0; j < doc.content[2].table.body[i].length; j++) {
doc.content[2].table.body[i][j]['text'] = doc.content[2].table.body[i][j]['text'].split(' ').reverse().join(' ');
}
}
}
}
];
}
之后,您可以使用与此处相同的功能:
table = $('#mydatatable').DataTable({
language: language,
"lengthMenu": [[10, 25, 50, -1], [10, 25, 50, "all"]],
dom: 'Blfrtip',
buttons: buttonForDatatable([2, 3, 4], [0, 0, 0, 0]),
processing: true,
serverSide: true,
.....