如何解决Crystal Reports需要数小时才能通过代码导出为pdf
很长一段时间以来,我一直面临这个问题,几个月后我仍然找不到任何解决方案。这是场景: VS 2019,Framework 4.6和Crystal报告13_0_27。
以下代码需要几个小时才能导出pdf(约400页和30.000行)。如果我打开报告 使用Crystal报告和导出文档,通过代码进行相同的查询,只需几秒钟。
我尝试了几件事,例如ExportToStream并将流保存到文件,或直接导出到磁盘 其他文章确实读到“ pdfFormatOptions.UsePageRange = True”应该有帮助,但结果相同。
该代码适用于具有100行的小型pdf。
Informe.Load(Application.StartupPath + @"\informes\report.rpt");
for (i = 0; i < Informe.Database.Tables.Count; ++i)
{
logOnInfo.ConnectionInfo.ServerName = "Server";
logOnInfo.ConnectionInfo.DatabaseName = "BBDD";
logOnInfo.ConnectionInfo.UserID = "user";
logOnInfo.ConnectionInfo.Password = "user";
Informe.Database.Tables[i].ApplyLogOnInfo(logOnInfo);
}
diskOpts.DiskFileName = PDFPath + _cabe.Guid + "_minutos.pdf";
ExportOptions exportOpts2 = Informe.ExportOptions;
exportOpts2.DestinationOptions = diskOpts;
exportOpts2.ExportFormatType = ExportFormatType.PortableDocFormat;
exportOpts2.ExportDestinationType = ExportDestinationType.DiskFile;
try
{
Informe.RecordSelectionFormula = @" {CabeceraFacturas.Guid}='{" + _cabe.Guid.ToString() + "}'";
//Informe.Export();
Stream oStream;
oStream = (Stream)Informe.ExportToStream(ExportFormatType.PortableDocFormat);
using (FileStream fileStream = File.Create(RutaGeneracionPDF + _cabe.Guid + "_minutos.pdf",(int)oStream.Length))
{
byte[] bytesInStream = new byte[oStream.Length];
oStream.Read(bytesInStream,bytesInStream.Length);
fileStream.Write(bytesInStream,bytesInStream.Length);
fileStream.Close();
}
}
谢谢!
解决方法
经过数小时和数小时的头痛之后,我终于做到了。
在每个详细信息(约30.000行)中,我都有一个公式,该公式计算了一些值,其中包含两个详细信息字段和两个来自联合视图的字段。当我通过代码导出时,该视图就是问题(Crystal Reports中的导出工作正常,没有延迟)。我必须用SQL创建一个新表,将所有视图中的行插入到该新表中,然后将此表添加到报表中。.voilá,它可以正常工作,并且可以在几秒钟内导出报表。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。