SQL Reporting Services - 打印按钮未在Mozilla中显示

时间:2009-06-04 14:39:02

标签: asp.net firefox reporting-services

我正在使用 SQL报告服务,它运行正常并在 IE 中显示一个打印按钮,但在Mozilla Firefox中没有显示。

有没有人有任何想法?

我已经检查了这个解决方案,但它无法正常工作:

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

5 个答案:

答案 0 :(得分:11)

我不认为它使用ActiveX,因为在onclick事件表中有一个简单的:

ReportFramerpvReport.GetReportFrame().contentWindow.print()

无论如何,我用自己的打印功能替换了这个打印内容,因为上面的代码不适用于FF ..

我知道它很难看......但是它有效! (只需用ControlID替换ControlName值,并确保在页面中添加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);
    }

答案 1 :(得分:5)

上述解决方案对我不起作用,因此在检查渲染的html后,我对上述解决方案进行了以下更改。

ReportViewerGeneral_ctl05 - &gt;寻呼机的身份
VisibleReportContentReportViewerGeneral_ctl09 - &gt;包含报告结果的div的id。
pageLoad - &gt;参考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 :(得分:2)

如果您通过ReportViewer提供导出功能,则用户仍可以导出为PDF并进行打印。不像单击打印按钮那样高效/光滑,但它很容易解决。

答案 3 :(得分:0)

不是解决方案,而是一些信息。

我经常使用SSRS进行内部项目,因为我知道目标受众都使用IE浏览器,但我不会将它用于外部网络应用程序,因为我在FF中遇到了很多问题(日期选择器不工作等) ),虽然我从来没有看过打印按钮选项,我怀疑这可能是一个类似的问题(报告查看器控件只为IE设计!),因为它似乎一般影响工具栏。

关闭这个http://www.windows-tech.info/15/5fb0fd315e07edf8.php似乎使用了一些activex控件而FF本身没有做activeX虽然我记得一个插件允许加载activex控件但是我看到我记不起来了

编辑:http://www.iol.ie/~locka/mozilla/plugin.htm我从未使用它,也无法保证它,但这里有一个插件。

对于面向Web的项目,我倾向于使用Crystal!

HTH

答案 4 :(得分:0)

我已经制作了一个解决方案,可以模拟从IE到其他浏览器的整个打印按钮。

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