异常描述:
CrystalDecision.CrystalReports.Engine.InternalException:文件:c:\users\TQTZS_03\AppData\Local\temp_914a…{…}.rpt 内出错:尚未执行操作->System.Runtime.InteropServices.ComException(0x800003E7)
软件开发及运行环境:
该软件采用C# + .net3.5 + Crystal Reports Basic for Visual Studio 2008 (10.5.0.3700.0) + vs2008 开发(c/s),运行在Win7 SP1 x86系统上。
问题出现:
软件在多台机器上使用,在2015-12-11日部分机器在生成报表时出现上述异常,部分机器上的软件可正常生成报表;出现异常的机器上的软件是两张报表无法正常生成,其余十几张报表可正常生成。
问题分析
在不能正常生成报表的机器上进行源代码调试,发现不能生成的报表异常出现在转出PDF的过程中,
ReportModel.Twenty_firstReport report = new ReportModel.Twenty_firstReport();
//。。。。。。省略
report.ExportToDisk(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat, exprtDocPath + "Twenty_first.PDF");
在调用ExportToDisk将报表导出到PDF时出现异常
问题处理
搜索网络资源发现在12月份较多的出现相同的问题,其中Operation not yet implemented error in PDF export这里面的讨论比较详细,同时也给出了问题的解决方案。
解决分析
问题的根源在Windows6.1-KB3102429-x86.msu这个windows系统补丁(KB3102429),补丁信息,在补丁更新信息中可以查看该补丁的更新内容,其中指出在 Crystal 报告版本 9 (Crystal 9) 以及版本 10 (Crystal 10),”导出为 pdf 格式”功能无法正常工作。究其原因,是该补丁当中对字体版本的更新,具体包含哪些字体在补丁更新信息中有列举更新后的字体版本号,如果在crystal report中用到这其中的字体,在将报表导出PDF的过程中就可能出现本文最初所述异常( Arial,Times New Roman确定会引发异常,其他更新字体未逐项确认)。
处理方法
针对异常的处理方法是卸载更新KB3102429,或者用未安装KB3102429的机器上的字体(本文程序用Times New Roman)替换已安装更新的机器上的字体;当然也可以修改自己的程序,避免使用KB3102429中更新的字体。个人感觉这是微软更新引发的crystal report问题,修改程序中报表采用的字体感觉像是程序的bug,维护时间已经太长了,修改后还得打包然后挨个机器进行安装(用户只管使用),而且用户很快就会换B/S版,也不再采用水晶报表了,因此直接更换字体版本完事!
在Operation not yet implemented error in PDF export这里面的讨论过程中还涉及到了一些其他的分析问题的方法,值得学习。