2009-06-04 20 views
14

estoy usando los servicios de Información SQL, está funcionando perfectamente y muestra un botón de impresión en IE, pero no se muestra en Mozilla Firefox.SQL Reporting Services - Botón de impresión que no se muestra en Mozilla

¿Alguien tiene alguna idea?

He comprobado esta solución, pero que no está funcionando:

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

+0

Eso no es una solución, es sólo que indica que el modo de impresión local no se implementa en el Informe 2005. Servicios – jgallant

+0

sí, eso es correcto, gracias –

+0

@Muhammad Akhtar: ¿Cuál es su edición de SQL Server y la versión ? – Sung

Respuesta

11

No creo que utiliza ActiveX, porque en el evento onclick mesa hay un simple:

ReportFramerpvReport.GetReportFrame().contentWindow.print() 

De todos modos, he sustituido este material de impresión con mi propia función de impresión, ya que este código anterior wasn' t trabajando en FF ..

Sé que es feo ... ¡pero funciona! (Basta con sustituir el valor ControlName con su ControlID y asegúrese de agregar jQuery lib en su página)

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

Ahora no tengo el proyecto, que tiene el problema anterior. porque he cambiado de compañía, pero tu solución es buena. es por eso que estoy votando. Gracias –

+0

Wow, +1. Si esto funciona, será increíble. – stimms

+0

¡Creo que funcionará para 1 página pero no funcionará para muchas páginas! ¿alguna solución? –

0

No es una solución, pero un poco de información.

Utilizo SSRS con bastante regularidad para proyectos internos ya que sé que el público objetivo usa IE, pero no lo uso para aplicaciones web externas ya que he tenido tantos problemas con él (los recolectores de fecha no funcionan etc.), aunque nunca he mirado las opciones de los botones de impresión, sospecho que esto puede ser un problema similar (¡control de visor de informes diseñado solo para IE!) ya que parece afectar la barra de herramientas en general.

Al salir de este http://www.windows-tech.info/15/5fb0fd315e07edf8.php parece que se usan algunos controles activex y FF no activa ActiveX nativamente aunque recuerdo un plugin que permitía cargar controles activex pero donde vi que no puedo recordar.

EDITAR: http://www.iol.ie/~locka/mozilla/plugin.htm Nunca lo he usado y no puedo responderlo, pero hay un complemento aquí.

¡Para proyectos de revestimiento web, suelo usar Crystal!

HTH

2

Si usted está ofreciendo funcionalidad de exportación a través de la ReportViewer, el usuario puede exportar a PDF e imprimir eso. No es tan eficiente/ingenioso como un botón de impresión con un solo clic, pero es un trabajo fácil.

+0

Sí, pero eso está fuera del punto de la pregunta OP – Fandango68

4

La solución anterior no funcionaba para mí, así que hice los siguientes cambios en la solución anterior después de inspeccionar la rendido html.

ReportViewerGeneral_ctl05 -> Identificación del buscapersonas
VisibleReportContentReportViewerGeneral_ctl09 -> id del div que contiene el resultado del informe.
pageLoad -> se refieren 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)); 
    } 
Cuestiones relacionadas