我有一个网格控件,我希望导出其中的内容。初始化后,pageSize
属性设置为10个项目,但我希望在exportToPDF
期间增加每页的项目数。
我尝试在执行导出之前修改pageSize
的{{1}},但这似乎对最终产品没有影响。
dataSource
是否有我遗漏的东西,所以我可以在PDF导出的每个页面上显示更多项目?
修改
将我的网格定义包含在以下答案建议的var grid = $("#grid").data("kendoGrid");
var filter = grid.dataSource.filter;
grid.dataSource.query({
filter: filter,
pageSize: 20, // has no effect on the exported PDF
page: 1,
group: [{
field: "groupField1",
dir: "asc"
}, {
field: "groupField2",
dir: "asc"
}, {
field: "groupField3",
dir: "asc"
}]
});
var progress = $.Deferred();
grid._drawPDF(progress)
.then(function (root) {
return kendo.drawing.exportPDF(root, { forcePageBreak: ".page-break", multiPage: true });
})
.done(function (dataURI) {
// ... do some manual manipulation of dataURI
kendo.saveAs({
dataURI: manipualtedDataURI
});
progress.resolve();
函数中(永远不会被调用):
pdfExport
注意:模板用于在PDF导出的每个页面上包含页眉/页脚。
另一个注意事项:'手动操纵dataURI'包括去服务器执行与另一个PDF文件的合并,所以我不能通过网格使用默认导出:(
编辑2
我已经从@ R.K.Saini的答案中扩展了Dojo示例,以使用我需要生成PDF导出的方法(根据原始帖子)。
该片段记录了正在导出的网格的URI以及调用var grid = $("#reportGrid").kendoGrid({
pdf: {
allPages: true,
avoidLinks: true,
repeatHeaders: true,
template: kendo.template($("#page-template").html()),
scale: 0.7,
margin: { top: "2.5cm", right: "1cm", bottom: "1.5cm", left: "1cm" },
paperSize: "A4",
landscape: true
},
// *this function is not getting called*
pdfExport: function(e) {
e.sender.dataSource.pageSize(10);
e.promise.done(function() {
e.sender.dataSource.pageSize(20);
});
},
toolbar: kendo.template($("#template").html()),
...
});
函数的时间。正如您将看到的,当使用内置网格'导出到PDF'按钮,pdfExport
功能被触发但是当使用网格下方的附加按钮时,它不是。
答案 0 :(得分:2)
在pdf导出开始之前,您可以使用pdfExport事件更改网格数据源的页面大小,然后在导出完成后,您只需要恢复以前的页面大小。
此事件的回调函数接收网格实例作为e.sender,并作为e.promise的承诺,可用于在导出完成时设置页面大小。
有关详情,请查看http://docs.telerik.com/kendo-ui/api/javascript/ui/grid#events-pdfExport
$("#grid").kendoGrid({
dataSource: dataSource,
pdf: {
allPages: true
},
pdfExport: function(e) {
e.sender.dataSource.pageSize(10);
e.promise.done(function() {
e.sender.dataSource.pageSize(20);
});
},
...
//Other configguration
});
这是一个有效的演示http://dojo.telerik.com/UzOXO
修改强>
您还可以在自定义导出功能中更改网格页面大小,只需在调用_drawPdf()函数之前更改网格页面大小,并在完成后将其更改回来。
$("#btnPdfExport").kendoButton({
click: function () {
var grid = $("#grid").data("kendoGrid");
var progress = $.Deferred();
// Change grid datasource pagesize before calling _drawPDF
grid.dataSource.pageSize(20);
grid._drawPDF(progress)
.then(function (root) {
return kendo.drawing.exportPDF(root, { forcePageBreak: ".page-break", multiPage: true });
})
.done(function (dataURI) {
console.log("Exporting " + dataURI);
kendo.saveAs({
dataURI: dataURI,
fileName: "export.pdf"
});
progress.resolve();
// Change grid datasource pagesize when done
grid.dataSource.pageSize(10);
});
}
});
检查更新DOJO http://dojo.telerik.com/UzOXO/8