导出为PDF会增加每页的项目数

时间:2017-05-09 09:48:28

标签: kendo-ui kendo-grid export-to-pdf

我有一个网格控件,我希望导出其中的内容。初始化后,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功能被触发但是当使用网格下方的附加按钮时,它不是。

1 个答案:

答案 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