输出HTML图文报表
HTML格式输出是Web程序最基本的要求。在输出有图片的报表时,使用PDF格式输出是最好的,HTML很容易出现各种图片显示问题。根据网上资料,在早期iReport0.5以前版本HTML输出图片没有问题,从iReport1.1.0到最新的iReport1.3.0,首先必须在报表输出Servlet中设置参数exporter.setParameter(JRHtmlExporterParameter.IS_OUTPUT_IMAGES_TO_DIR,Boolean.TRUE),还必须设置“IMAGES_DIR_NAME”、“IMAGES_URI”参数,输出报表时才能在上述参数指定的目录下生成临时图片文件,用户在浏览器上才能看到图片。但是问题产生了,当多用户以不同参数使用同一报表的情况下,临时文件名一般是一样的,用户看到的报表数据是正确的,但插图有可能是别人生成的临时图片。
经过深入研究,笔者发现问题出在输出设置上,目前几乎所有资料在输出HTML格式文件时,都沿用与输出PDF格式文件相同的设置,可通过以下设置实现:
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM,outputStream);
最后动作是将jprint文件直接输出到Servlet的输出流中,而根据分析,PDF图片是在二进制输出流中输出,而HTML输出流中对图片只是一个URL引用。图片虽已作为独立文件生成,以二进制方式在outputStream输出HTML文件时,浏览器不能正确掌握引用图片的时机。为了正确输出图片,根据HTML是文本文件的特性,先将HTML文件输出到一个字符缓冲区当中,再调用outputStream.println()方法以字符流方式打印HTML文件,println()函数以字符方式打印HTML文件,浏览器接受到输出Servlet以println()发来的字符行形式的HTML文件时,可以正确地对已生成的临时图片文件进行引用,从而为用户显示出正确插图的HTML文档。