我在尝试从ASP.Net页面打印Crystal Reports报告时遇到了一些严重问题。这是当前的设置:
当我单击报表查看器上的“打印”图标时,出现以下错误消息:
“发生通信错误。将停止打印。”
同样的错误发生在多台机器上。如果我在错误消息上单击“确定”,则下面的对话框显示“请在加载Crystal Reports打印控件时等待”。如果我等,没有任何反应。没有提示安装ActiveX控件,并且没有弹出任何内容允许我选择一台打印机(我知道其中有几台已安装)。
我尝试过做以下事情,其中没有一项有效:
Microsoft JScript运行时错误:需要对象。“
特别突破这一行:
bobj.crv.stateManager.setComponentState( 'MainContent_reportViewer_ UI',EVAL( '(' +的document.getElementById( ' _CRYSTALSTATEctl00 $ $搜索Maincontent的ReportViewer')值+ ')')); < / p>
报告中有多个动态图像,但在查看报告时所有图像都正确显示。它们是我能想到的唯一与此报告相关的二进制对象。错误发生在动态创建的页面代码中 - 而不是我写过的内容。
“Microsoft JScript运行时错误:需要对象”
...它与单击“打印”按钮时尝试打印PDF报告时的行相同。
我至少在一天之内一直在打击我的头脑,而且我的想法很新鲜。任何人都知道可能导致这种情况的原因是什么?
编辑:
嗯,这就是我为了让事情发挥作用而做的事情。它最终比我想的更容易修复:
将整个ReportDocument填入会话。您的页面加载应如下所示:
protected void Page_Load(object sender, EventArgs e)
{
if (Session["report"] != null)
{
reportViewer.ReportSource = Session["report"];
}
BuildReport();
}
使ReportViewer尽可能简单 - 不要指定报告类型(PDF或ActiveX)。将它设置为任何东西似乎都会导致问题。这就是页面源中的样子:
......就是这样。我简直不敢相信我花了大约一天的时间试图让它变得如此简单。希望这篇文章可以帮助其他人面对同样的问题。
答案 0 :(得分:1)
如果您收到大量用户请求,那么将整个报告存储在会话中是个坏主意。
在处理Crystal报表时,您必须在发送响应之前重新初始化报表及其登录和数据源,参数等在每个请求中(回发或没有回发无关紧要)。 Crystal报表不会维护完整的视图状态,这就是每次都应该重新初始化的原因。
我认为你不会在回发请求期间重新初始化因此错误。
答案 1 :(得分:1)
让自己避免头疼并禁用activeX打印。它会使用临时文件炸毁您的Web服务器,仅适用于IE,并且仅限于您可以同时打印的报告数量。将打印模式设置为Pdf并完成。很多浏览器都可以直接打印pdfs。
crViewer.PrintMode = PrintMode.Pdf;
答案 2 :(得分:0)
我知道这个问题已经过时了,但我想我会发信息以防其他人遇到这个问题。
我发现this page有许多选项可以解决我认为与您非常相似的问题。我得到的标题是'bobj is undefined'错误,但真正归结为IIS无法为Crystal找到JS文件的正确路径。
对于我自己,我最终在我的站点根目录(wwwroot)中的aspnet_client目录中放置了一些文件夹,并确保NETWORK_SERVICE可以访问aspnet_client文件夹。我必须在
下的x86 SAP文件夹中的'crystalreportviewers'文件夹中执行相同的操作'C:\ Program Files(x86)\ SAP BusinessObjects \ Crystal Reports 20XX \ crystalreportviewers'
我还必须将该站点的配置添加到我的web.config中...然后查看器开始正常工作。
希望它有所帮助!
答案 3 :(得分:0)
我遇到了类似的问题,报告是在页面上正确生成的,但当我尝试缩放时,它说,&#34;没有有效的报告源可用&#34;。要解决此问题,我只需在每次加载页面时加载报告,无论是回发还是正常加载。
还要确保您正确处理Crystal Report文档,否则可能会开始提供&#34;加载报告失败&#34;错误。