jQuery - 将带有树结构的HTML表导出为PDF/Excel

Sli*_*yyy 7 html javascript jquery export-to-excel export-to-pdf

HTML表格结构

<table width="100%" border="0" name="tableID" id="activity" class="table table-striped">
<thead>
    <tr>
        <th style="height:24px !important" class="ui-state-default ui-th-column ui-th-ltr">Name</th>
        <th class="ui-state-default ui-th-column ui-th-ltr">Category</th>
        <th class="ui-state-default ui-th-column ui-th-ltr">Created</th>
        <th class="ui-state-default ui-th-column ui-th-ltr">Status</th>
        <th class="ui-state-default ui-th-column ui-th-ltr">Hours</th>
        <th class="ui-state-default ui-th-column ui-th-ltr">Action</th>
    </tr>
</thead>
<tbody><tr style="border:1px solid #ccc"><td style="border:1px solid #ccc"><span style="font-weight:bold;font-size:13px;padding-left:20px;color:#ff7a85">Development</span></td><td style="border:1px solid #ccc">Development</td><td style="border:1px solid #ccc">John Doe</td><td style="border:1px solid #ccc">Active</td><td style="border:1px solid #ccc">0</td><td style="border:1px solid #ccc"><a href="http://10.103.3.96/timesheet_bijal/manage/edittask/index?project_id=478&amp;id=130">Edit</a> / <a onclick="delete_task(130,0,478)" style="cursor:pointer">Deactivate</a> </td></tr><tr style="border:1px solid #ccc"><td style="border:1px solid #ccc"><span style="font-weight:bold;font-size:13px;padding-left:40px;color:#0074a2">Bug fixing</span></td><td style="border:1px solid #ccc">Development</td><td style="border:1px solid #ccc">John Doe</td><td style="border:1px solid #ccc">Active</td><td style="border:1px solid #ccc">120</td><td style="border:1px solid #ccc"><a href="http://10.103.3.96/timesheet_bijal/manage/edittask/index?project_id=478&amp;id=131">Edit</a> / <a onclick="delete_task(131,130,478)" style="cursor:pointer">Deactivate</a> </td></tr><tr style="border:1px solid #ccc"><td style="border:1px solid #ccc"><span style="font-weight:bold;font-size:13px;padding-left:60px;color:#33B940">dev2</span></td><td style="border:1px solid #ccc">Development</td><td style="border:1px solid #ccc">John Doe</td><td style="border:1px solid #ccc">Active</td><td style="border:1px solid #ccc">100</td><td style="border:1px solid #ccc"><a href="http://10.103.3.96/timesheet_bijal/manage/edittask/index?project_id=478&amp;id=9309">Edit</a> / <a onclick="delete_task(9309,131,478)" style="cursor:pointer">Deactivate</a> </td></tr><tr style="border:1px solid #ccc"><td style="border:1px solid #ccc"><span style="font-weight:bold;font-size:13px;padding-left:80px;color:#ffa62f">dev3</span></td><td style="border:1px solid #ccc">Development</td><td style="border:1px solid #ccc">John Doe</td><td style="border:1px solid #ccc">Inactive</td><td style="border:1px solid #ccc">100</td><td style="border:1px solid #ccc"><a href="http://10.103.3.96/timesheet_bijal/manage/edittask/index?project_id=478&amp;id=9310">Edit</a> </td></tr><tr style="border:1px solid #ccc"><td style="border:1px solid #ccc"><span style="font-weight:bold;font-size:13px;padding-left:60px;color:#33B940">task2</span></td><td style="border:1px solid #ccc">Development</td><td style="border:1px solid #ccc">John Doe</td><td style="border:1px solid #ccc">Active</td><td style="border:1px solid #ccc">100</td><td style="border:1px solid #ccc"><a href="http://10.103.3.96/timesheet_bijal/manage/edittask/index?project_id=478&amp;id=9311">Edit</a> / <a onclick="delete_task(9311,131,478)" style="cursor:pointer">Deactivate</a> </td></tr><tr style="border:1px solid #ccc"><td style="border:1px solid #ccc"><span style="font-weight:bold;font-size:13px;padding-left:40px;color:#0074a2">Development</span></td><td style="border:1px solid #ccc">Development</td><td style="border:1px solid #ccc">John Doe</td><td style="border:1px solid #ccc">Active</td><td style="border:1px solid #ccc">60</td><td style="border:1px solid #ccc"><a href="http://10.103.3.96/timesheet_bijal/manage/edittask/index?project_id=478&amp;id=133">Edit</a> / <a onclick="delete_task(133,130,478)" style="cursor:pointer">Deactivate</a> </td></tr><tr style="border:1px solid #ccc"><td style="border:1px solid #ccc"><span style="font-weight:bold;font-size:13px;padding-left:60px;color:#33B940">testing1</span></td><td style="border:1px solid #ccc">Development</td><td style="border:1px solid #ccc">John Doe</td><td style="border:1px solid #ccc">Active</td><td style="border:1px solid #ccc">100</td><td style="border:1px solid #ccc"><a href="http://10.103.3.96/timesheet_bijal/manage/edittask/index?project_id=478&amp;id=9312">Edit</a> / <a onclick="delete_task(9312,133,478)" style="cursor:pointer">Deactivate</a> </td></tr><tr style="border:1px solid #ccc"><td style="border:1px solid #ccc"><span style="font-weight:bold;font-size:13px;padding-left:40px;color:#0074a2">dev1</span></td><td style="border:1px solid #ccc">Development</td><td style="border:1px solid #ccc">John Doe</td><td style="border:1px solid #ccc">Active</td><td style="border:1px solid #ccc">100</td><td style="border:1px solid #ccc"><a href="http://10.103.3.96/timesheet_bijal/manage/edittask/index?project_id=478&amp;id=9308">Edit</a> / <a onclick="delete_task(9308,130,478)" style="cursor:pointer">Deactivate</a> </td></tr></tbody></table>

<table>
    <tr id="footerExport">
        <td id="exportpdf"><img src="https://cdn2.iconfinder.com/data/icons/windows-8-metro-style/128/pdf.png" title="Export to PDF" /></td>
    </tr>
</table>
Run Code Online (Sandbox Code Playgroud)

包含用于HTML表导出的jquery脚本

http://ngiriraj.com/pages/htmltable_export/demo.php
Run Code Online (Sandbox Code Playgroud)

这里项目任务以父子关系列出,并以树形结构显示如下

在此输入图像描述

以下小提琴以PDF格式导出数据,但不管怎样都不保留树视图.

小提琴链接

1)如何以附加图像维护树视图和任务顺序显示的PDF格式显示数据?

2)点击小提琴中的PDF图标显示Firefox中的输出,而不是Chrome中的输出.

3)如果不使用任何插件,我如何导出显示的HTML结构,以PDF/Excel格式维护树形视图?

小智 1

这是一个解决方案,但是有点混乱。我尝试了一些特殊的 ACSII 代码来添加空格或制表符,但它们不起作用。所以我这样做了:

$(document).ready(function () {
    $('#exportpdf').bind('click', function (e) {
        $(".lvl1").prepend("|");
        $(".lvl2").prepend("|  ");
        $(".lvl3").prepend("|    ");
        $(".lvl4").prepend("|       ");
        $('#activity').tableExport({ type: 'pdf', escape: 'false', htmlContent:'false' });
        $(".lvl1").text().substr(1);
        $(".lvl2").text().substr(3);
        $(".lvl3").text().substr(5);
        $(".lvl4").text().substr(8);
    });
});
Run Code Online (Sandbox Code Playgroud)

这会在生成 pdf 之前在文本前面加上 | (可以是键盘上的任何字符)和一些尾随空格。这样您的父子关系在 pdf 文件中可见,但有一个 | 在每个表行上。

此外,您还必须将“level”类添加到每一行。lvl1 是上级父级,lvl 4 是最低级子级。

<span style="font-weight:bold;..." class="lvl1">Development</span>
Run Code Online (Sandbox Code Playgroud)

要在生成 pdf 时删除空格,您必须使用 substr。该数字是起始字符(从零开始,因此 1 是字符串的第二个字符)。希望这能解决您的问题。