在Chrome和Firefox中使用ReportViewer进行打印

时间:2013-11-19 18:22:56

标签: asp.net printing reportviewer

我有使用ReportViewer控件打印报表(LocalReport)的ASP.NET Webforms,由于直接打印在Chrome和Firefox中不起作用,我需要添加按钮,这将在Chrome和Firefox中以某种方式执行。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

我曾经遇到过同样的问题,发现明确指定应该显示ReportViewer控件中的哪些控件就可以了。我还在页面中添加了一个ScriptManager。以下代码适用于FireFox&铬。此外,与UpdatePanels一起使用时,ReportViewer控件与其他浏览器存在问题。根据您的标记设置方式,这些可能是您的问题。

    <rsweb:ReportViewer ID="ReportViewer1" runat="server" Font-Names="Verdana" Font-Size="8pt"
        InteractiveDeviceInfos="(Collection)" ProcessingMode="Remote" WaitMessageFont-Names="Verdana"
        WaitMessageFont-Size="14pt" ShowExportControls="true" Width="1280px" Height="700px"
        ShowBackButton="true" ShowToolBar="true" ShowParameterPrompts="true" ShowPageNavigationControls="true"
        ZoomMode="Percent" ZoomPercent="100" ShowReportBody="true" InternalBorderStyle="Solid">
    </rsweb:ReportViewer>

旧版本的报告控件会出现ActiveX等问题。您可以通过查看web.config文件找出哪个版本。版本8及更低版本存在此问题。

    <add assembly="Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />
    <add assembly="Microsoft.ReportViewer.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />

可以在此处找到解决方法:ReportViewer Client Print Control “Unable to load client print control”?

答案 1 :(得分:0)

我是通过以下js代码完成的: addPrintButton函数在报表查看器中添加了一个print btn(ctl是reportviewer的id。'#ctl00_cphMain_rvReportMain_ctl05'是reportviewr控件中的主要div的id,因此您可以根据控件客户端ID进行更改):

function addPrintButton(ctl) {
var innerTbody = '<tbody><tr><td><input type="image" style="border-width: 0px; padding: 2px; height: 16px; width: 16px;" alt="Print" src="/App/Reserved.ReportViewerWebControl.axd?OpType=Resource&Version=10.0.40219.1&Name=Microsoft.Reporting.WebForms.Icons.Print.gif" title="Print"></td></tr></tbody>';
var innerTable = '<table title="Print" onclick="javascript:PrintFunc(\'' + ctl + '\'); return false;" id="do_print" style="cursor: default;">' + innerTbody + '</table>'
var outerDiv = '<div style="display: inline-block; 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>';
$("#ctl00_cphMain_rvReportMain_ctl05 > div").append(outerDiv);}

function PrintFunc() {
var strFrameName = ("printer-" + (new Date()).getTime());
var jFrame = $("<iframe name='" + strFrameName + "'>");
jFrame
.css("width", "1px")
.css("height", "1px")
.css("left", "-2000px")
.css("position", "absolute")
.appendTo($("body:first"));

var objFrame = window.frames[strFrameName];
var objDoc = objFrame.document;
var jStyleDiv = $("<div>").append($("style").clone());
var styles = '<style type="text/css">' + jStyleDiv.html() + "</style>";
var docType = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">';
var docCnt = styles + $("#VisibleReportContentctl00_cphMain_rvReportMain_ctl09").html();
var docHead = '<head><title>...</title><style>body{margin:5;padding:0;}</style></head>';
objDoc.open();
objDoc.write(docType + '<html>' + docHead + '<body onload="window.print();">' + docCnt + '</body></html>');
objDoc.close();

}