Службы отчетов SQL - кнопка печати не отображается в Mozilla - PullRequest
14 голосов
/ 04 июня 2009

Я использую Службы отчетов SQL , работает отлично и показывает кнопку печати в IE , но не отображается в Mozilla Firefox.

У кого-нибудь есть идеи?

Я проверил это решение, но оно не работает:

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

Ответы [ 5 ]

11 голосов
/ 09 марта 2010

Я не думаю, что он использует ActiveX, потому что в событии onclick для таблицы есть простое:

ReportFramerpvReport.GetReportFrame().contentWindow.print()

Во всяком случае, я заменил этот материал для печати своей собственной функцией печати, потому что этот код выше не работал на FF.

Я знаю, что это некрасиво ... но это работает! (просто замените значение ControlName на свой ControlID и обязательно добавьте jQuery lib на свою страницу)

    $(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);
    }
5 голосов
/ 27 декабря 2012

Приведенное выше решение не работает для меня, поэтому я внес следующие изменения в приведенное выше решение после проверки обработанного html.

ReportViewerGeneral_ctl05 -> идентификатор пейджера
VisibleReportContentReportViewerGeneral_ctl09 -> идентификатор div, который содержал результат отчета.
pageLoad -> см. 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));
    }
2 голосов
/ 04 июня 2009

Если вы предлагаете функцию экспорта через ReportViewer, пользователь все равно может экспортировать в PDF и распечатать его. Не так эффективно / гладко, как кнопка печати одним щелчком, но это легко обойти.

0 голосов
/ 26 мая 2016

Я создал решение, которое эмулирует всю кнопку печати от IE до других браузеров.

https://stackoverflow.com/a/37455354/1253835

0 голосов
/ 04 июня 2009

Не решение, но немного информации.

Я использую SSRS довольно регулярно для внутренних проектов, так как знаю, что целевая аудитория использует IE, но я не использую его для внешних веб-приложений, так как у меня было так много проблем с ним в FF (средства выбора даты не работают и т. Д.) ), хотя я никогда не рассматривал параметры кнопки печати, я подозреваю, что это может быть похожей проблемой (элемент управления средством просмотра отчетов, предназначенной только для IE!), поскольку она, похоже, влияет на панель инструментов в целом.

Отключение этого http://www.windows -tech.info / 15 / 5fb0fd315e07edf8.php кажется, что используются некоторые элементы управления activex, и FF не делает activeX изначально, хотя я помню плагин, который разрешал activex элементы управления должны быть загружены, но там, где я увидел, я не могу вспомнить.

РЕДАКТИРОВАТЬ: http://www.iol.ie/~locka/mozilla/plugin.htm Я никогда не использовал его и не могу ручаться за это, но здесь есть плагин.

Для веб-проектов я использую Crystal!

НТН

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...