使用jQuery Datatables在新选项卡中打开PDF

时间:2017-08-29 21:49:24

标签: c# jquery asp.net-mvc html5 datatables

我试图在新标签页中打开PDF,它位于jQuery Datatables的集合按钮中,但它不起作用。相反,它会向我显示如下警告信息:

enter image description here

这是我的jQuery配置:

$("#clientes").DataTable({
    dom: 'T<"clear">lfrtip',
    tableTools: {
        "aButtons": [
            {
                "sExtends": "collection",
                "sButtonText": "Generar Listado <span class='caret' />",
                "aButtons": ['csv', 'xls', {
                    extend: 'pdfHtml5',
                    download: 'open'
                }]
            }
        ],
        "sSwfPath": "Content/DataTables/swf/copy_csv_xls_pdf.swf"
       }
    });

有关如何使用jquery datatables的此集合按钮解决此问题的任何想法?

我已将所有引用放在我的bundle类中,试图让它工作:

enter image description here

1 个答案:

答案 0 :(得分:0)

问题似乎来自错误提供的"sSwfPath"值,因此按钮类型变为undefined

"sSwfPath": "Content/DataTables/swf/copy_csv_xls_pdf.swf"

按钮检查条件适用于dataTables.tableTools.js中的_fnButtonDefinations

if (typeof TableTools.BUTTONS[ buttonSet[i] ] == 'undefined' )  { 
    alert( "TableTools: Warning - unknown button type: "+buttonSet[i]);
    continue;
}
buttonDef = $.extend({}, TableTools.BUTTONS[buttonSet[i]], true);

您可以尝试UrlHelper.Content与SWF文件的相对路径或直接从DataTables CDN外部资源引用:

// local content (in Razor view)
"sSwfPath": "@Url.Content("~/Content/DataTables/swf/copy_csv_xls_pdf.swf")"

// external resource (i.e. DataTables CDN)
"sSwfPath": "http://cdn.datatables.net/tabletools/2.2.2/swf/copy_csv_xls_pdf.swf"

您也可以尝试将sExtends设置为pdf而不是collection

$("#clientes").DataTable({
    dom: 'T<"clear">lfrtip',
    tableTools: {
        "aButtons": [
            {
                "sExtends": "pdf",
                "sButtonText": "Generar Listado <span class='caret' />",
                "aButtons": ['csv', 'xls', {
                    extend: 'pdfHtml5',
                    download: 'open'
                }]
            }
        ],
        "sSwfPath": "http://cdn.datatables.net/tabletools/2.2.2/swf/copy_csv_xls_pdf.swf"
    }
});

示例:JSFiddle Demo

您需要关注的下一个问题是文件安全问题,因为加载外部SWF资源会受到一些限制。打开global security settings panel并选择&#34;始终允许&#34;对于CDN资源,或用于本地存储的SWF使用&#34;添加位置&#34; (参见下图),输入分配给sSwfPath的SWF路径,然后确认对该路径应用信任(可能需要在之后刷新视图)。

Adobe Flash Player Settings Manager

参考文献:

DataTables TableTools buttons not working correctly (simple example)

TableTools export in JQuery Datatables not working

jQuery dataTables - TableTools not working

jQuery TableTools not working