5

我在本地主机(wamp 服务器)中使用 http://datatables.net/extensions/tabletools/ 。它工作正常,但是当我将相同的代码放在我的在线服务器上时,它不起作用。

我正在使用所有最新版本的数据表

tableTools: {
    "sSwfPath": "https://datatables.net/release-datatables/extensions/TableTools/swf/copy_csv_xls_pdf.swf",
    "sRowSelect": "os",
    "sRowSelector": 'td:first-child',
    // "aButtons": [ "copy", "csv", "xls","pdf","print","select_all", "select_none" ]
    "aButtons": [
        "copy",
        "print", {
            "sExtends": "collection",
            "sButtonText": "Save", // button name 
            // "aButtons":    [ "csv", "xls", "pdf" ]
            "aButtons": [
                "csv",
                "xls", {
                    "sExtends": "pdf",
                    "sPdfOrientation": "landscape",
                    "sPdfMessage": "List of product."
                },
                "print"
            ]
        }
    ]
}    

首先,没有点击复制、pdf、csv、xls 按钮。因此我教了我的路径或 swf 不起作用,因此我用在线链接替换了链接。因此,现在我得到了点击,但是当我点击复制按钮时,它给了我一条消息......但是当我在记事本中过去时,它给了我“空白”。我的 pdf、csv、xlsx 也无法正常工作。只有打印工作完美。请让我知道我的本地主机中的问题是什么,一切正常。它在我的在线服务器中创建问题。

4

3 回答 3

13

我很确定 datatables.net 正在积极阻止使用.swf. Allan Jardine 曾多次评论直接使用这些.swf文件:

datatables.net 不是 CDN 服务器,因此不应这样使用。它不是这样设计的,将来我可能会为盗链添加限制,因为正在使用大量带宽并导致不必要的负载。通过使用适当的 CDN 甚至本地托管文件,您将获得更好的性能。

然而,随着 1.10.x 的推出,终于建立了一个真正的 CDN 服务器,包括所有 TableTools 资源 - > http://cdn.datatables.net/tabletools/2.2.2/

所以替换为sSwfPath

http://cdn.datatables.net/tabletools/2.2.2/swf/copy_csv_xls_pdf.swf

于 2014-07-19T11:40:04.730 回答
4

我的意思是你应该把它作为一个全新的问题发布,因为它实际上是一个新问题!:) 反正。问题是,当您生成 PDF 时,您需要渲染数据。否则,您只会得到一些 $(element).text() 输出,包括选择及其选项。像这样 :

 "aButtons": [ 
      "copy", 
      "csv", 
      "xls",
      { "sExtends":  "pdf",
        "fnCellRender": function ( sValue, iColumn, nTr, iDataIndex ) {
           //extract the value of the select  
           if ( iColumn === 7 ) {
              var val=$(sValue).find('select').val(); 
              return (val!=='') ? val : 'not set';
           }
           //create a dummy text for the HTML-link
           if ( iColumn === 8 ) {
              return 'click';
           }
           return sValue;
         }
      },
      "print",
      "select_all", 
      "select_none" 
  ]

在此处查看您的代码(尽可能接近)-> http://jsfiddle.net/3F8ZJ/。但是,您的渲染仍然存在问题mRender,因此列位置混乱。它打破了内部<table>结构。你为什么要插入额外的<td>.. </td>?但目前没有时间研究这个。

于 2014-07-21T16:21:27.193 回答
0

因为我想显示正确的代码格式,因此发布为新答案

@ DAVIDKONRAD:我知道当我从下面的代码中删除columnDefs时,我的 PDF 会显示正确的记录...顺便说一下,我的 csv、excel、使用 columnDefs 打印显示正确的记录 .. 只有 pdf 没有显示带有“columnDefs”的正确记录

我知道了“选择”这个词是因为只有..因为我在 columndefs 中使用了下拉菜单

 dt = $('#example').DataTable( {
            "dom": '<"clear">T<"clear"><"clear">lfrtip',
            "pagingType": "full_numbers",
            "scrollY": "440px",
            "scrollX": "100%",
            "scrollCollapse": true,
            "bProcessing": true, 
            "bServerSide": true,
            "sAjaxSource": "includes/db/server_processing.php",
             "deferRender": true,
            "aaSorting":[[0, "desc"]],
            "aoColumns": [ 
                            { className: "center", },
                            { className: "center", },
                            { className: "center", },
                            { className: "center", },
                            { className: "center", },
                            { className: "center", },
                            { className: "center", },
                               ],
            "columnDefs": [

                            {
                                "aTargets":[7],
                                "fnCreatedCell": function(nTd, sData, oData, iRow, iCol)
                                {
                                $(nTd).css('text-align', 'center');
                                },
                                "mData": null,
                                "mRender": function( data, type, full) {    
                                           return '<td><select id="dynamic_select_'+full[0]+'" name="dynamic_select_'+full[0]+'">\n\
                                                 <option id="0" value="">Select</option/>\n\
                                                 <option id="1_'+full[0]+'" value="test.php?id='+full[0]+'">10</option/>\n\
                                                 <option id="2_'+full[0]+'" value="test2.php?id='+full[0]+'">12</option/>\n\
                                                 <option id="3_'+full[0]+'" value="test3.php?id='+full[0]+'">13</option/>\n\
                                                  </select></td>'; 
                                            //return '<button>Click!</button>';

                                 }

                                },
                              {   
                                "aTargets":[8],
                                "fnCreatedCell": function(nTd, sData, oData, iRow, iCol)
                                {
                                $(nTd).css('text-align', 'center');
                                },
                                "mData": null, 
                                "mRender": function(data, type, full){
                                 //return '<button>Click!</button>';
                                 return '<div id="container"><a href="javascript: void(0);" class="click_'+full[0]+'">Click</a></div>';
                                }
                              }
                           ]
        } );
于 2014-07-21T08:23:00.443 回答