1

我在我的自定义应用程序中添加了一个打印按钮和一个 PrintDialog,现在需要编写一个打印函数。我是否需要打开一个新窗口并构建一个表格,其中包含格式化为适合 A4 纸张大小的 css 样式的网格数据,或者我可以使用 Rally 内置的东西吗?我是 Rally 和 Ext JS 的新手,所以任何建议都将不胜感激!

Ext.create('Rally.ui.dialog.PrintDialog', {
          height: 250,
          autoShow: true,
          autoCenter: false,
          shouldShowFormatOptions: false,
          defaultTitle: 'Book Of Work Report',
          listeners: {
                print: function(event) {
                //How do I print a grid?         
            },
4

2 回答 2

1

为了打印网格,我创建了一个 Rally.data.WsapiDataStore 并将存储加载到一个数组中。我将此数组(StoreData)传递给下面的函数,该函数打开一个打印窗口,显示表格中的网格。

_printDetails: function(Storedata) {

        var myData = Storedata;    
        var htmlTable ='<table>';
        htmlTable +='<width="100%">';   

    var r,c;                   
        for(r= 0 ; r<myData.length; r++){   
            htmlTable+= '<tr>';
            for(c = 0 ; c<myData[0].length; c++){    
                htmlTable+='<td>'+myData[r][c]+'</td>';         
            }
            htmlTable+='</tr>';
        }
        htmlTable+='</table>'; 

       var cssTable = '<style type="text/css">';
        cssTable +='table {border-collapse:collapse;...}';
        cssTable +='th {color:#080808;border-bottom-style: solid; ...}';
        cssTable +='tr {color:#000000; border-bottom-style: solid; ..}';
        cssTable +='td {padding:3px 4px; text-align:left; vertical-align:top;}';
        cssTable +='#filter {text-align:left; ...}';    
        cssTable += '</style>';

        var printwindow=window.open('', '', 'width=1000,height=500');
        var myDate = new Date;
        printwindow.document.write('<div id="todayDate">' + Ext.Date.format(myDate,'F j, Y, g:i a') + '</div>');            
        printwindow.document.write('<div id="header">Book Of Work Report</div>');
        printwindow.document.write('<div id="filter"><p>' + this._GetFilterString() + '</p></div>');
        printwindow.document.write(htmlTable);
        printwindow.document.write(cssTable);   
        printwindow.document.close();
        printwindow.focus();
        printwindow.print();
        printwindow.close();
    },
于 2013-05-23T08:13:59.510 回答
0

你的倾向是正确的——这里最好的选择是打开一个窗口,用表格输出/网格内容填充并应用你喜欢的任何 CSS 格式。Rally 没有任何服务器端打印输出功能(至少对 AppSDK2 开放)。

于 2013-04-03T20:16:57.773 回答