从Crystal Reports Viewer(ActiveX、ASP.Net)打印Crystal报表
我在尝试从ASP.Net页面打印Crystal Reports时遇到了一些严重问题。以下是当前设置:从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
- 在页面上设置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位应用程序
- 将报告类型切换为PDF。如果执行此操作,并单击报表查看器上的“打印”按钮,则会出现以下错误:
- 我已尝试从正确的.cab文件手动安装ActiveX控件。这在任何情况下都没有影响
- 我已经安装了最新的Crystal Reports service pack(service pack 3)。同样,这并没有改变任何事情
- 我曾尝试在默认网站中为CrystalReportViewers13设置一个虚拟目录,正如我遇到的一些论坛帖子所建议的那样。这也没有任何效果
- 在页面上启用ViewState对打印是否有效没有影响
- 我已尝试添加我自己的打印按钮和带有可用打印机列表的下拉列表。当我单击我自己的自定义打印按钮并调用PrintTopPrinter()时,我收到与尝试打印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;