(2)找不到报表文件
看一下你的物理路径中是否能找到那个test.jasper 文件,没有的话建立正确的目录把设计编译好的test.jasper 文件放进去就行了。
(3)运行后没有报错,什么反映也没有
安装一下Adobe acrobat reader 等PDF 阅读工具软件。
(4)可以运行,但出不了PDF 文件,只是在IE 中有一堆乱码
没有报错就说明程序没有问题,在你自己的客户端找找问题所在,可以试着换个Adobe acrobat reader 版本,同时如果是以Localhost 等域名的方法访问的话,换成IP 方式试一下。
(5)能运行,但出不来中文
请确认您的web-inf\\lib 目录中是否有iTextAsian.jar 文件,并且您已经在报表设计器中将字段的font 调成汉字类型了。
4.2 在Servlet 程序中的应用示例
在Servlet 中进行应用同样也需要对服务器进行配置,配置方法见4.1 小节。
import javax.servlet.*;
import javax.servlet.http.*; import dori.jasper.engine.*; import java.io.*; import java.util.*;
import java.sql.*;
public class TestReport extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Connection conn = null; try {
Class.forName(\conn
=DriverManager.getConnection(\eName=pubs;
user=sa;password=\
ServletContext servletContext =this.getServletContext();
File reportFile = new File(servletContext.getRealPath(\Map parameters = new HashMap();
String myname=new String(\裴贺先\parameters.put(\byte[]
=JasperRunManager.runReportToPdf(reportFile.getPath(),parameters,conn);
JasperReport 与iReport 的配置与使用 第27 页
response.setContentType(\response.setContentLength(bytes.length);
ServletOutputStream ouputStream = response.getOutputStream(); ouputStream.write(bytes, 0, bytes.length); ouputStream.flush();
bytes
ouputStream.close();
} catch (JRException jre) {
System.out.println(\} catch (Exception e) {
System.out.println(\} }
public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
4.3 动态SQL 的示例
在大多数的情况下,报表中要打印的数据不是固定的内容,我们常常需要通过SQL 语句来指定特定的某些记录出现在报表中。
要使用动态的SQL,我们可以定义一个String 类型的参数,如下图所示:
在SQL 查询器中使用这个参数,如下图所示:
注意:这里使用的是$P!{SQLSTR},与所有其他例子不同的是,这里使用$P!而不是$P,在程序中应用时只需要像传递其他参数一样应用就可以了。
4.4 怎样使某个字段中的数据在特定条件下才打印出来 通过设置字段的PrintWhenExpression,我们可以限定只有在某些特定的条件下字段值才会被打印出来,在PrintWhenExpression 中需要设置Boolean 型的表达式,如:new
java.lang.Boolean($F{type}.trim().equals(\4.5 如何将PDF 格式报表结果直接输出到打印机
注:这段代码只能应用在Java Application 中,同时需要系统中安装有Adobe Acroabat 或Adobe Acrobat Reader 软件。
public void print() throws UnsupportedFormatException {
save(\try {
String osName = System.getProperty(\//FOR WINDOWS 95 AND 98 USE COMMAND.COM
if (osName.equals(\{
Runtime.getRuntime().exec(\
}
//FOR WINDOWS NT/XP/2000 USE CMD.EXE else {
Runtime.getRuntime().exec(\} }
catch (IOException IOE) {
JOptionPane.showMessageDialog(null, IOE.getMessage(), \JOptionPane.ERROR_MESSAGE); } }
在控制JasperReport报表的格式问题的时候。如果有的字段值内容太长可能会比原先画好的如下图”$F{bz}”的动态字段值
框大,内容就会被挤到框子外边来或者内容会被截断,严重影响报表的美观。这个是数据没有显示全的原因。
你可以双击”$F{bz}”这个框,然后在TextField里面可以看到有Stretch with overflow和Blank when null, 选中Blank when null就是在用真实数据浏览的时候这个字段值如果遇到NULL值就显示为空白。否则的话,就显示NULL。 “Stretch with overflow “的作用就是让动态字段框随着内容的增大而增大。这个时候会遇到一些问题,如果框子下面有线,或者其他框子的时候,则会把内容压在上面,如下图,这个时
。
候就需要把线的格式设置一下,双击你所需要设置的线,弹出如下图对话框。
在Position type中选择“FixRelativeToBottom”这个时候你画的线也就会跟着你 的字段值框,而改变位置。如下图效果