2009-06-04 9 views
14

Używam SQL Reporting Services, to działa doskonale i pokazuje przycisku drukowania w IE, ale nie wykazano w Mozilla Firefox.SQL Reporting Services - Przycisk Print nie pokazano w Mozilli

Czy ktoś ma jakiś pomysł?

Sprawdziłem to rozwiązanie, ale to nie działa:

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

+0

To nie jest rozwiązanie, to jest po prostu stwierdzając, że drukowanie w trybie lokalnym nie jest realizowany w raporcie Services 2005. – jgallant

+0

tak, to prawda, dzięki –

+0

@Muhammad Akhtar: Jaki jest Twój SQL Server i wydanie wersji ? – Sung

Odpowiedz

11

Nie sądzę wykorzystuje ActiveX, ponieważ w tabeli zdarzenia onclick jest prosta:

ReportFramerpvReport.GetReportFrame().contentWindow.print() 

Zresztą zastąpić tę druku rzeczy z moich własnych funkcji drukowania, ponieważ ten kod powyżej waśń” t pracuje na FF ..

Wiem, że to brzydkie ... ale działa! (Wystarczy zastąpić wartość ControlName ze swoim sterowania ustawiono i mieć pewność, aby dodać jQuery lib na stronie)

$(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

Teraz nie mam projektu, który ma powyższy problem. ponieważ zmieniłem firmę, ale twoje rozwiązanie jest dobre. właśnie dlatego mam głosowanie. Dzięki –

+0

Wow, +1. Jeśli to zadziała, będzie niesamowite. – stimms

+0

Myślę, że będzie działać na 1 stronę, ale nie będzie działać na wielu stronach! jakieś rozwiązanie? –

0

nie jest rozwiązaniem, ale trochę info.

Używam SSRS dość regularnie do wewnętrznych projektów, ponieważ wiem, że docelowi odbiorcy używają IE, ale nie używam go do zewnętrznych aplikacji internetowych, ponieważ miałem tak wiele problemów z nim w FF (zbieracze dat nie działają itp.), chociaż nigdy nie patrzyłem na opcje przycisku drukowania, podejrzewam, że może to być podobny problem (kontrolka przeglądarki raportów zaprojektowana tylko dla IE!), ponieważ wydaje się wpływać ogólnie na pasek narzędzi.

Wychodzimy z tego http://www.windows-tech.info/15/5fb0fd315e07edf8.php wydaje się, że niektóre kontrolki ActiveX są używane, a FF nie działa activeX natywnie, chociaż pamiętam wtyczkę, która pozwoliła załadować formanty activex, ale gdzie zobaczyłem, że nie pamiętam.

EDYCJA: http://www.iol.ie/~locka/mozilla/plugin.htm Nigdy go nie użyłem i nie mogę ręczyć za to, ale jest tutaj wtyczka.

W przypadku projektów internetowych mam tendencję do korzystania z Crystal!

HTH

2

Jeśli oferując funkcjonalność eksportowej poprzez ReportViewer, użytkownik nadal może eksportować do formatu PDF i wydrukować. Nie jest tak wydajny/gładki jak przycisk drukowania jednym kliknięciem, ale jest łatwy do wykonania.

+0

Tak, ale to jest poza punktem OP – Fandango68

4

Powyższe rozwiązanie nie działa dla mnie, więc dokonała następujących zmian do powyższego roztworu po inspekcji świadczonych html.

ReportViewerGeneral_ctl05 -> id pager
VisibleReportContentReportViewerGeneral_ctl09 -> id div, który zawierał wynik raportu.
pageload -> patrz 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)); 
    } 
Powiązane problemy