Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Crystal Reports Viewer(ActiveX、ASP.Net)打印Crystal报表_Asp.net_Crystal Reports - Fatal编程技术网

从Crystal Reports Viewer(ActiveX、ASP.Net)打印Crystal报表

从Crystal Reports Viewer(ActiveX、ASP.Net)打印Crystal报表,asp.net,crystal-reports,Asp.net,Crystal Reports,我在尝试从ASP.Net页面打印Crystal Reports时遇到了一些严重问题。以下是当前设置: 在页面上设置Crystal Reports viewer。查看报告时,报告显示良好 报表查看器打印模式设置为ActiveX 我根据SAP的建议(在他们的一篇知识库文章中)从会话变量设置报表数据源。正在通过调用WCF服务设置报表数据源。正在传递到报表中的数据没有问题。(同样,报告显示得很好,显示了它应该显示的所有内容) ASP.Net应用程序和相关服务的构建目标是x86 所有内容都使用Cryst

我在尝试从ASP.Net页面打印Crystal Reports时遇到了一些严重问题。以下是当前设置:

  • 在页面上设置Crystal Reports viewer。查看报告时,报告显示良好
  • 报表查看器打印模式设置为ActiveX
  • 我根据SAP的建议(在他们的一篇知识库文章中)从会话变量设置报表数据源。正在通过调用WCF服务设置报表数据源。正在传递到报表中的数据没有问题。(同样,报告显示得很好,显示了它应该显示的所有内容)
  • ASP.Net应用程序和相关服务的构建目标是x86
  • 所有内容都使用Crystal Reports版本13,而ASP.Net web应用程序使用的是.Net 4。它正在Internet Explorer 8中查看
  • 我已经试着在InternetExplorer8上检查ActiveX设置,但没有一个是问题(所有设置都设置为允许或提示)
  • 无论是从IDE运行,还是从单独服务器上设置的网站运行,都会发生此错误
  • 另一台服务器上IIS中的应用程序池设置为允许32位应用程序
单击报表查看器上的“打印”图标时,会收到以下错误消息:

“发生通信错误。打印将停止。”

同一错误发生在多台机器上。如果我在错误消息上单击OK,下面的对话框会显示“请稍候,正在加载Crystal Reports打印控件。”。如果我等待,什么也不会发生。没有安装ActiveX控件的提示,也没有任何弹出窗口允许我选择打印机(我知道已经安装了多台打印机)

我试过做以下几件事,但都没有成功:

  • 将报告类型切换为PDF。如果执行此操作,并单击报表查看器上的“打印”按钮,则会出现以下错误:
Microsoft JScript运行时错误:需要对象。“

特别是在这一行:

bobj.crv.stateManager.setComponentState('MainContent_reportViewer_UI',eval('('+document.getElementById('u CRYSTALSTATEctl00$MainContent$reportViewer')。value+'))

报告中有多个动态图像,但在查看报告时所有图像都正确显示。它们是我能想到的唯一与此报告关联的二进制对象。错误发生在为页面动态创建的代码中,而不是我编写的代码中

  • 我已尝试从正确的.cab文件手动安装ActiveX控件。这在任何情况下都没有影响
  • 我已经安装了最新的Crystal Reports service pack(service pack 3)。同样,这并没有改变任何事情
  • 我曾尝试在默认网站中为CrystalReportViewers13设置一个虚拟目录,正如我遇到的一些论坛帖子所建议的那样。这也没有任何效果
  • 在页面上启用ViewState对打印是否有效没有影响
  • 我已尝试添加我自己的打印按钮和带有可用打印机列表的下拉列表。当我单击我自己的自定义打印按钮并调用PrintTopPrinter()时,我收到与尝试打印PDF报告相同的错误消息:
“Microsoft JScript运行时错误:需要对象”

…它与单击“打印”按钮打印PDF报告时在同一行中断

我已经为此绞尽脑汁至少一天了,现在我已经没有主意了。有人知道是什么导致了这一切吗

编辑:

好吧,下面是我为了让事情顺利进行所做的。最终的解决方案比我想象的要简单得多:

  • 将整个ReportDocument填充到会话中。页面加载应如下所示:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["report"] != null)
        {
            reportViewer.ReportSource = Session["report"];
        }
    
        BuildReport();
    }
    
  • 让ReportViewer尽可能简单-不要指定报告类型(PDF或ActiveX)。将其设置为任何可能导致问题的内容。这是页面源中的外观:


…就这样。我简直不敢相信我花了一天的时间试图让它工作,结果却如此简单。希望这篇文章能帮助其他面临同样问题的人。

如果你收到大量用户请求,在会话中存储整个报告是个坏主意

在使用crystal reports时,您必须在发送响应之前重新初始化每个请求中的报表及其登录名、数据源、参数等(回发或不回发无关紧要)。crystal report不维护完整的viewstate,因此每次都应重新初始化


我认为您在回发请求期间没有重新初始化,因此出现了错误。

我知道这个问题很老,但我想我会插话,以防其他人遇到这个问题

我发现有很多解决问题的方法,我认为这些方法与你的方法非常相似。我得到了标题为“bobj未定义”的错误,但归根结底,IIS无法找到Crystal的JS文件的正确路径

对于我自己,我最终将一些文件夹放在我的站点根目录(wwwroot)中的aspnet_客户端目录中,并确保NETWORK_服务可以访问aspnet_客户端文件夹。我必须对x86 SAP文件夹下的“CrystalReportViewer”文件夹执行同样的操作

'C:\Program Files(x86)\SAP BusinessObjects\Crystal Reports 20XX\Crystal ReportViewer'

我还必须将该站点的配置添加到我的web.config…然后查看器开始正常工作


希望它有帮助!

省去您的麻烦,禁用activeX打印。它会用临时文件破坏您的web服务器,仅适用于IE,并且限制您同时打印的报告数量。设置
crViewer.PrintMode = PrintMode.Pdf;