Asp.net 在Chrome和Firefox中使用ReportViewer打印

Asp.net 在Chrome和Firefox中使用ReportViewer打印,asp.net,printing,reportviewer,Asp.net,Printing,Reportviewer,我有一个ASP.NET Webforms,它使用ReportViewer控件打印报告(LocalReport),而且,由于直接打印在Chrome和Firefox中不起作用,我需要添加一个按钮,该按钮在Chrome和Firefox中可以实现。有什么想法吗?我曾经遇到过同样的问题,我发现显式指定ReportViewer控件中应该显示哪些控件才是关键。我还向页面添加了ScriptManager。下面的代码适用于FireFox和Chrome。此外,当与UpdatePanel一起使用时,ReportVie

我有一个ASP.NET Webforms,它使用ReportViewer控件打印报告(LocalReport),而且,由于直接打印在Chrome和Firefox中不起作用,我需要添加一个按钮,该按钮在Chrome和Firefox中可以实现。有什么想法吗?

我曾经遇到过同样的问题,我发现显式指定ReportViewer控件中应该显示哪些控件才是关键。我还向页面添加了ScriptManager。下面的代码适用于FireFox和Chrome。此外,当与UpdatePanel一起使用时,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" />

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

功能添加打印按钮(ctl){
var innerTbody='';
变量innerTable=''+innerTbody+''
变量outerDiv=''+内部表+'';
$(“#ctl00_cphMain_rvReportMain_ctl05>div”).append(outerDiv);}

函数PrintFunc(){ var strFrameName=(“打印机-”+(新日期()).getTime()); var jFrame=$(“”); jFrame .css(“宽度”、“1px”) .css(“高度”、“1px”) .css(“左”,“2000px”) .css(“位置”、“绝对”) 。附录($(“正文:第一”); var objFrame=window.frames[strFrameName]; var objDoc=objFrame.document; var jStyleDiv=$(“”)。追加($((“样式”).clone(); var styles=''+jStyleDiv.html()+''; var docType=''; var docCnt=style+$(“#VisibleReportContentctl00_cphMain_rvReportMain_ctl09”).html(); var docHead=“…正文{margin:5;padding:0;}”; objDoc.open(); objDoc.write(docType+''+docHead+''+docCnt+''); objDoc.close();

}

不,这不是问题所在,问题是打印按钮只显示在Internet Explorer上,因为此控件显然使用ActiveX。那么,如果没有ActiveX,我们如何做同样的事情呢?您使用的是什么版本的.Net Framework和报表控件?版本10不使用ActiveX控件,所以它可以在FireFox和Chrome中工作。只是用容易出现问题的版本和堆栈中的解决方法更新了OA。您指向解决方法的链接提到了SQL报告,但我可能需要提到我处理的是LocalReport?如果是本地报告,该链接将无助于升级您的控件,应该这样做仍然可以解决这个问题。
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();