2009-06-04 19 views
14

Sto usando SQL Reporting Services, sta funzionando perfettamente e mostra un pulsante di stampa in IE, ma non mostrato in Mozilla Firefox.SQL Reporting Services - pulsante di stampa non mostrato in Mozilla

Qualcuno ha qualche idea?

Ho verificato questa soluzione, ma non funziona:

http://social.msdn.microsoft.com/Forums/en-US/vsreportcontrols/thread/7bdf431d-70db-419d-8e98-ef41cad8e2d8

+0

che non è una soluzione, è solo affermando che la stampa modalità locale non è implementata in Report Services 2005. – jgallant

+0

sì, è vero, grazie –

+0

@Muhammad Akhtar: Qual è la sua edizione di SQL Server e la versione ? – Sung

risposta

11

Non credo che utilizza ActiveX, perché in caso onclick tavolo v'è un semplice:

ReportFramerpvReport.GetReportFrame().contentWindow.print() 

In ogni caso, ho sostituito questa roba di stampa con la mia funzione di stampa, perché questo codice sopra wasn' t lavorando su FF ..

So che è brutto ... ma funziona! (Basta sostituire il valore nomecontrollo con il ControlID ed essere sicuri di aggiungere jQuery lib nella tua pagina)

$(document).ready(function() 
    { 
     if ($.browser.mozilla) 
     { 
      try 
      { 
       var ControlName = 'RptDespesas'; 
       var innerScript = '<scr' + 'ipt type="text/javascript">document.getElementById("' + ControlName + '_print").Controller = new ReportViewerHoverButton("' + ControlName + '_print", false, "", "", "", "#ECE9D8", "#DDEEF7", "#99BBE2", "1px #ECE9D8 Solid", "1px #336699 Solid", "1px #336699 Solid");</scr' + 'ipt>'; 
       var innerTbody = '<tbody><tr><td><input type="image" style="border-width: 0px; padding: 2px; height: 16px; width: 16px;" alt="Print" src="/Reserved.ReportViewerWebControl.axd?OpType=Resource&amp;Version=9.0.30729.1&amp;Name=Microsoft.Reporting.WebForms.Icons.Print.gif" title="Print"></td></tr></tbody>'; 
       var innerTable = '<table title="Print" onmouseout="this.Controller.OnNormal();" onmouseover="this.Controller.OnHover();" onclick="PrintFunc(\'' + ControlName + '\'); return false;" id="' + ControlName + '_print" style="border: 1px solid rgb(236, 233, 216); background-color: rgb(236, 233, 216); cursor: default;">' + innerScript + innerTbody + '</table>' 
       var outerScript = '<scr' + 'ipt type="text/javascript">document.getElementById("' + ControlName + '_print").Controller.OnNormal();</scr' + 'ipt>'; 
       var outerDiv = '<div style="display: inline; font-size: 8pt; height: 30px;" class=" "><table cellspacing="0" cellpadding="0" style="display: inline;"><tbody><tr><td height="28px">' + innerTable + outerScript + '</td></tr></tbody></table></div>'; 

       $("#" + ControlName + " > div > div").append(outerDiv); 

      } 
      catch (e) { alert(e); } 
     } 
    }); 

    function PrintFunc(ControlName) 
    { 
     setTimeout('ReportFrame' + ControlName + '.print();', 100); 
    } 
+0

Ora non ho il progetto, che ha il problema sopra. perché ho cambiato compagnia, ma la tua soluzione è buona. è per questo che sto votando. Grazie –

+0

Wow, +1. Se funziona, sarà fantastico. – stimms

+0

Penso che funzionerà per 1 pagina ma non funzionerà per molte pagine! qualche soluzione? –

0

non è una soluzione, ma un po 'di informazioni.

Io uso SSRS abbastanza regolarmente per progetti interni perché so che il pubblico di destinazione utilizza tutti IE, ma io non lo uso per le app esterne web di fronte in quanto ho avuto così tanti problemi con esso in FF (i raccoglitori di date non funzionano ecc.), anche se non ho mai guardato le opzioni dei pulsanti di stampa temo che possa trattarsi di un problema simile (il controllo del visualizzatore di report è stato progettato solo per IE!) poiché sembra influire sulla barra degli strumenti in generale.

Uscendo da questo http://www.windows-tech.info/15/5fb0fd315e07edf8.php sembra che alcuni controlli activex siano utilizzati e FF non esegue activeX nativamente anche se ricordo un plug-in che consentiva il caricamento dei controlli activex ma dove ho visto che non riesco a ricordare.

EDIT: http://www.iol.ie/~locka/mozilla/plugin.htm ho mai usato e non può garantire per esso, ma c'è un plugin qui.

Per i progetti di contornitura, utilizzo Crystal!

HTH

2

Se stai offrendo funzionalità di esportazione tramite il ReportViewer, l'utente può comunque esportare in PDF e la stampa che. Non efficiente/slick come un pulsante di stampa con un solo clic, ma è un lavoro facile da aggirare.

+0

Sì ma questo è accanto al punto della domanda OP – Fandango68

4

La soluzione di cui sopra non funzionava per me, così ho fatto le seguenti modifiche alla soluzione di cui sopra dopo aver ispezionato la resa html.

ReportViewerGeneral_ctl05 -> id del cercapersone
VisibleReportContentReportViewerGeneral_ctl09 -> id del div che conteneva il risultato del rapporto.
Pageload -> vedi this

function pageLoad() { 

if ($.browser.mozilla && !$("#ff_print").length) { 
      try { 
       var ControlName = 'ReportViewerGeneral'; 
       var innerTbody = '<tbody><tr><td><input type="image" style="border-width: 0px; padding: 2px; height: 16px; width: 16px;" alt="Print" src="/Reserved.ReportViewerWebControl.axd?OpType=Resource&amp;Version=9.0.30729.1&amp;Name=Microsoft.Reporting.WebForms.Icons.Print.gif" title="Print"></td></tr></tbody>'; 
       var innerTable = '<table title="Print" onclick="PrintFunc(\'' + ControlName + '\'); return false;" id="ff_print" style="border: 1px solid rgb(236, 233, 216); background-color: rgb(236, 233, 216); cursor: default;">' + innerTbody + '</table>' 
       var outerDiv = '<div style="display: inline; font-size: 8pt; height: 30px;" class=" "><table cellspacing="0" cellpadding="0" style="display: inline;"><tbody><tr><td height="28px">' + innerTable + '</td></tr></tbody></table></div>'; 

       $("#ReportViewerGeneral_ctl05 > div").append(outerDiv); 

      } 
      catch (e) { alert(e); } 
     } 
} 


    function PrintFunc() { 
     var strFrameName = ("printer-" + (new Date()).getTime()); 
     var jFrame = $("<iframe name='" + strFrameName + "'>"); 
     jFrame 
     .css("width", "1px") 
     .css("height", "1px") 
     .css("position", "absolute") 
     .css("left", "-2000px") 
     .appendTo($("body:first")); 

     var objFrame = window.frames[strFrameName]; 
     var objDoc = objFrame.document; 
     var jStyleDiv = $("<div>").append($("style").clone()); 

     objDoc.open(); 
     objDoc.write($("head").html()); 
     objDoc.write($("#VisibleReportContentReportViewerGeneral_ctl09").html()); 
     objDoc.close(); 
     objFrame.print(); 

     setTimeout(function() { jFrame.remove(); }, (60 * 1000)); 
    } 
Problemi correlati