【问题标题】:How to export two DataTables in just one PDF file如何在一个 PDF 文件中导出两个数据表
【发布时间】:2023-04-04 10:00:02
【问题描述】:

我目前正在使用 DataTables 在网页中绘制表格。我有一个没有隐藏的表,用户可以毫无问题地查看它。另一方面,我有一个隐藏的表,它必须与未隐藏的表同时导出。

我希望能够单击未隐藏表中的“导出 PDF”并生成包含两个表的 PDF 文件,即隐藏表和未隐藏表。

有人可以帮我吗?我对如何做到这一点有点困惑。

【问题讨论】:

    标签: javascript jquery pdf datatables


    【解决方案1】:

    我没有尝试过,但您可以尝试简单地从第一个按钮触发第二个按钮。

    $("#foo .buttons-pdf").on("click", function() {
      $("#bar .buttons-pdf").trigger("click");
    });
    

    第二个表仍然需要在 DOM 中可用。

    【讨论】:

    • 这可能是一个选项,但两个表的内容相似,所以我想将它们打印成一个 PDF 文件。如果我没有找到一个好的解决方案,我认为你的解决方案是最好的。
    【解决方案2】:

    如果你有相同的表,那很容易。只需拥有仅用于导出目的的第三个(或第四个等)隐藏表。单击“PDF”按钮时,请按照以下步骤操作:

    1. 事先将*_wrapper 容器设置为display: none;,这样用户就不会在屏幕上看到闪烁或垃圾
    2. 使用 API 从所有表中收集数据并合并它们
    3. 初始化隐藏导出表并将合并后的数据作为data
    4. 以编程方式触发 PDF 导出
    5. 清理隐藏的导出表,以免用户再次尝试导出时发生冲突

    ===

    $('#example').DataTable({ });
    $('#example2').DataTable({ });
    
    $('button').on('click', function() {
      var data = $('#example').DataTable().table().data();
      $.merge( data, $('#example2').DataTable().table().data() );
      $('#export-table').DataTable({
        dom: 'B',
        data: data,
        buttons: [{
          extend: 'pdfHtml5'
        }],
        drawCallback: function() {
          $('#export-table_wrapper .buttons-pdf').click()
           setTimeout(function() {
              $('#export-table').DataTable().destroy(false);
           }, 200)
        }
      })
    })  
    

    这是一个演示,其中包含一个可见表、一个隐藏表和第三个负责导出的表 -> https://jsfiddle.net/u20x4be0/

    【讨论】:

    • 这是一个不错的解决方案!
    • 如果您想将多个不同的表格导出到单个 pdf,有没有办法做到这一点?例如,说表都有相同的标题,但每个表都是它自己的实体(在我的具体情况下,标题是一周中的几天,每个表代表不同的员工,我想保持表分开)跨度>
    • @NicLovin,唷,自从我使用 DataTables 以来已经有好几年了。我退休了,不再是程序员。只是为了好玩而编程,偶尔。您可以提出一个新问题并使用上面的答案作为参考,或者将代码复制粘贴为问题中的“我尝试过什么”。但我可以看到 setTimeout 的使用应该被淘汰,这是老式编码。我相信今天的 pdfmake 有一个你可以回应的承诺,但这不是你问题的答案,只是对我显然正在使用或建议的旧的不太安全的编码风格的评论。
    • @davidkonrad 好的,我会调查一下,谢谢您的回复!
    猜你喜欢
    • 2013-04-14
    • 2014-09-26
    • 2018-01-26
    • 2022-09-28
    • 1970-01-01
    • 2011-03-09
    • 2020-11-30
    • 1970-01-01
    • 2018-12-01
    相关资源
    最近更新 更多