所以我真的可以使用线索来了解为什么会发生这种情况以及如何解决它。我正在尝试使用以下代码将水晶报告导出为 pdf:
protected void ExportRptButton_Click( object sender, EventArgs e )
{
Datamart.UI.Reporting.Web.ReportParamsSvc.ReportDefinition rptCfg = SelectedReport;
if ( null != SelectedReport )
{
rptParams.Clear();
rptParams = null;
// Get the report document
// string filePath = Server.MapPath( @"~\Reports\" + SelectedReport.FileName + ".rpt" );
// Declare a new Crystal Report Document object and load the report file into the report document.
ReportDocument rptDoc = new CrystalDecisions.CrystalReports.Engine.ReportDocument();
ConfigureCrystalReports(rptDoc);
// repDoc.Load(rptFileName);
// AddParameters();
// Set the report parameters the report object.
//LoadReportParameterValues(SelectedReport);
LoadParameterFields(rptDoc);
// Set the static text fields in the report object.
LoadStaticTextFields(rptDoc);
try
{
if (rptDoc.IsLoaded)
{
// Stop buffering the response
Response.Buffer = false;
// Clear the response content and headers
Response.ClearContent();
Response.ClearHeaders();
Response.ContentType = "application/pdf";
// Export the Report to Response stream in PDF format and file name Customers
rptDoc.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Response, true, "DirectAccessReport");
// Response.Filter.Flush();
// Response.Flush();
// rptDoc.ExportToDisk(ExportFormatType.PortableDocFormat, "~/PDF_Folder");
// There are other format options available such as Word, Excel, CVS, and HTML in the ExportFormatType Enum given by crystal reports
}
}
catch (System.Threading.ThreadAbortException ex)
{
logger.ErrorFormat("Could not export to pdf: threading! {0}", ex);
}
catch ( Exception ex )
{
logger.ErrorFormat("Could not export to pdf! {0}", ex);
}
}
}
“ConfigureCrystalReports”只是获取报告的文件路径。
“LoadParameterFields”填充报表的参数,我很确定它可以工作,因为它与我在 CRViewer 中打开报表时用来填充参数的代码相同。但是,如果您想看看它的作用,请告诉我,我会添加它。
“LoadStaticTextFields”也是如此,它只获取报告中标签的文本值。
我收到的错误可以在下面的 img 中找到:
关于问题发生在哪里,我最好的猜测是在 try 循环中。正如你所看到的,我已经尝试了几种不同的方法来处理大多数注释掉的代码中的响应字段。
我花了很多时间寻找答案,大多数人说我必须从我的代码中删除所有 Response.Write() 调用,但是我没有在我的任何地方使用 Response.Write()代码。
非常感谢任何帮助或建议。谢谢你。