Nag*_*y E 5 report crystal-reports
在将报告导出为 PDF 时,我们收到线程被中止异常。
我们用于将报告导出为 PDF 的以下代码。
Response.Buffer = true;
Response.ClearContent();
Response.ClearHeaders();
Response.ContentType = "application/pdf";
myReportDoc.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Response, true, Session["ReportName"].ToString());
Response.Flush();
Response.Close();
Run Code Online (Sandbox Code Playgroud)
请帮助我如何解决此异常。
SAP解释说:
该问题已被识别并记录在问题报告 ID 下ADAPT00765364。错误很可能是因为Response.End()在ExportToHttpResponse()方法内部使用了。
这是Reponse.End()导致线程中止的已知问题。这是设计使然。
有关详细信息,请参阅Microsoft KB312629 文章。
....
try
{
reportDocument.ExportToHttpResponse(format, Response, true, Page.Title);
}
catch (System.Threading.ThreadAbortException)
{
}
....
Run Code Online (Sandbox Code Playgroud)
您可以编写自己的代码,以 PDF、Word、Excel 等格式将 Crystal Report 直接导出到浏览器。您必须确保使用适当的内容类型。
将 Crystal Report 以 PDF 格式导出到 Web 浏览器的示例代码
try
{
boReportDocument.Load(Server.MapPath(@"MyReport.rpt"));
System.IO.Stream oStream = null;
byte[] byteArray = null;
oStream = boReportDocument.ExportToStream (ExportFormatType.PortableDocFormat);
byteArray = new byte[oStream.Length];
oStream.Read(byteArray, 0, Convert.ToInt32(oStream.Length - 1));
Response.ClearContent();
Response.ClearHeaders();
Response.ContentType = "application/pdf";
Response.BinaryWrite(byteArray);
Response.Flush();
Response.Close();
boReportDocument.Close();
boReportDocument.Dispose();
}
catch (Exception ex)
{
string s = ex.Message;
}
Run Code Online (Sandbox Code Playgroud)
引发错误是因为在 ExportToHttpResponse 内部调用了 response.End()。删除对 Flush 和 Close 响应的调用,并将对 ExportToHttpResponse 的调用包装在 try/catch 块内以捕获并忽略 System.Threading.ThreadAbortException。