miércoles, 30 de marzo de 2011

Botón de imprimir de Reporting Services no aparece en FireFox ni Chrome

Si alguna vez se han topado con que el botón de impresión de Reporting Services no aparece en FireFox ni en Google Chrome si no que solamente en Internet Explorer, aqui les tengo la solución al problema.

En este momento lo tienen así:


Será alguna artimaña de Microsoft???  Sin importar si así es, he aquí la solución a ello:

Primero deben decargar esta dll y agregarla como referencia a su Sitio Web: PrintButtonDLL (Opción 1)  

Si este link no funciona, por favor usen este: PrintButtonDLL (Opción 2)

Si necesitan ayuda para agregar una referencia a su proyecto Web, pueden consultar este artículo: Agregar Referencia a proyecto Web

En su página Web deben agregar un control llamado ReportViewer y en este caso lo llamaremos "rvReportes".

Es necesario agregar la siguiente referencia:

<%@ Register assembly="printButtonDLL" namespace="printButtonDLL" tagprefix="cc1" %>

Luego dentro de la etiqueta Body de su página agreguen esta línea:

<cc1:PrintButton ID="PrintButton1" runat="server" ReportName="rvReportes" />

Ya con el ReportViewer agregado, debe quedar así:

<body>
    <form id="form1" runat="server">
    <div>
        <rsweb:ReportViewer ID="rvReportes" runat="server" ProcessingMode="Remote"
            Width="850px" Height="590px" Font-Names="Verdana" Font-Size="8pt">
            <ServerReport ReportServerUrl="" />
    </rsweb:ReportViewer>  
      
        <br />
        <cc1:PrintButton ID="PrintButton1" runat="server" ReportName="rvReportes" />
      
    </div>
    </form>
</body>

El siguiente paso es agregar el siguiente código en la misma página, dentro del Head, debe quedar así:


<head id="Head1" runat="server">
    <title></title>
  
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.0/jquery.min.js" language="javascript" type="text/javascript"></script>
<script type="text/javascript">
    function $_create(elem, tag, target) { return addElem(elem, target, tag) }
    function $_add(elem, target) { return addElem(elem, target) }
    function $_GB() { return GetBrowser(); }

    function GetBrowser() {
        //JQuery Script;
        if ($.browser.mozilla)
            return 'FF';
        else if ($.browser.msie)
            return 'IE';
        else if ($.browser.webkit)
            return 'OP';
        else if ($.browser.opera)
            return 'WK';
        else
            return 'FF';
    }

    function addElem(elem, target, tag) {
        if (typeof elem === 'string') {
            var el = document.getElementById(elem);
            if (!el) {

                el = document.createElement(tag);

                el.id = elem;
            }
            elem = el;
        }
        if (target) {
            var dest;
            if (typeof target === 'string')
                dest = document.getElementById(target);
            else
                dest = target;

            dest.appendChild(elem);
        }

        return elem;
    }

    function insert(elem, target) {
        if (typeof target === 'string')
            target = document.getElementById(target);
        var myDoc = target.contentWindow || target.contentDocument;
        if (myDoc.document) {
            myDoc = myDoc.document;
        }
        var headLoc = myDoc.getElementsByTagName("head").item(0);
        var scriptObj = myDoc.createElement("script");
        scriptObj.setAttribute("type", "text/javascript");
        scriptObj.innerHTML = 'window.print();';
        if (elem)
            elem = document.getElementById(elem);

        if (elem)
            headLoc.appendChild(elem);
        else
            headLoc.appendChild(scriptObj);

    }
  </script>

</head>


Ya con esta solución queda así:


Por último, al hacer clic en el botón de imprimir, deben seleccionar la opción que recomiendo a continuación:



Listo!!!!!!!!!

14 comentarios:

  1. Te falto:
    <%@ Register Assembly="printButtonDLL" Namespace="printButtonDLL" TagPrefix="cc1" %>

    ResponderEliminar
  2. Cuando la utilizo en una pestaña que tiene Master.Page no me funciona, me podrías ayudar diciendo Por que?

    ResponderEliminar
  3. Amigo no me funciona, hago todos tus pasos y nada, tengo vs2010 .......

    ResponderEliminar
  4. hargir,

    Yo lo utilicé con Visual Studio 2008.

    Podrías probar con Visual Studio 2010 pero seleccioná Framework 3.0 ó 3.5

    ResponderEliminar
  5. a mi me aparece el boton abajo, pero cuando le doy click hace postback pero no hace nada, yo lo estoy utilizando en un webusercontrol, que tengo que hacer para que me funciones correctamente

    ResponderEliminar
  6. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  7. Tengo el mismo problema que Lea, me aparece el botón abajo, pero al darle clic solo hace postback, y luego nada. Al ver en Firebug, me aparece el error: "TypeError: refTD is null". Lo estoy probando con .NET Framework 4.5, y no me puedo pasar a 3.5 ni a 3 debido a que estoy trabajando con MVC3. ¿Alguna idea? Muchas gracias de antemano.

    ResponderEliminar
    Respuestas
    1. Hola Guillermo, tengo el mismo problema que tu, pudiste encontrar la solución?
      Gracias y saludos

      Eliminar
  8. No me funciona con Visual Studio 2010

    ResponderEliminar
  9. FUnciona perfecto connvisual studio 2010 el problema es que no funciona si uso iframes....

    ResponderEliminar
  10. ¿puede imprimir varias paginas de datos o solo lo que se muestra en pantalla?

    ResponderEliminar
  11. Una vez que mando a imprimir quiero cerrar la pagina como hago?

    ResponderEliminar