iReport 无数据源多页PDF模板怎么做? 10
重点是不能配置数据源。1、可以做到TITLE区域能正常显示,但如果做到TITLE区域就不能做成多页。2、如果做到DETAIL区域,分页没有问题,但是在WEB项目里面。PD...
重点是不能配置数据源。
1、可以做到TITLE区域能正常显示,但如果做到TITLE区域就不能做成多页。
2、如果做到DETAIL区域,分页没有问题,但是在WEB项目里面。PDF显示为空白且只有一页。
3、字体、when no data 这些已设置。
求指教!!! 展开
1、可以做到TITLE区域能正常显示,但如果做到TITLE区域就不能做成多页。
2、如果做到DETAIL区域,分页没有问题,但是在WEB项目里面。PDF显示为空白且只有一页。
3、字体、when no data 这些已设置。
求指教!!! 展开
1个回答
2017-01-05
展开全部
1、输入数据源名称,选择 JDBC Driver,在输入 JDBC URL 时,可以点击"Wizard"按钮,它会根据你选的 JDBC Driver 配置好你的 URL,不过得修改 IP 地址以及 DatabaseName,输入数据库名、用户名、密码。点击"Test"按钮,确定连接情况,然后保存。
$F{} 是用来标明这是数据库字段。$F{WINDOWS_NAME}、$F{NUMBER}、$F{vname}、$F{SP_NAME} 和 $F{SP_TYPE} 是数据库里的字段,也是我要在模板里用到的字段。对于 $F{NUMBER}、$F{vname}、$F{SP_NAME} 和 $F{SP_TYPE} 这四个字段,虽然放在其他域也可以显示出结果,比如:pageHeader 域、columnHeader 域、columnFooter 域等等,但是因为会有多列的数据要显示,所以必须放到"detail"域中。
2、配置模板的查询语句,以及字段、变量和参数。
首先输入查询语句,如"select * from v_baseinfo_statbanjiereport",点击"Read fields"按钮,会查询出该表的所有字段名
如果您要有条件的查询,那么就在后面添加 Where 语句,如"select * from v_baseinfo_statbanjiereport where DEPT_NAME=$P{orgname} and END_SP_DAY=$P{etime}",点击"Save query to report"按钮保存。
这里要注意的是,您可以直接把参数写入 Where 语句中,象这样"where DEPT_NAME='中国' and END_SP_DAY='2004-11-23'";但是从 java 程序或者 jsp 页面传过来的参数是中文字符的话,您就必须做编码转换或者用英文字符、数字来代替;还有像日期参数"2004-11-23",jasperreports 好象解析不了,如果你把 SQL 语句改成" select * from v_baseinfo_statbanjiereport where DEPT_NAME='$P{orgname}' and END_SP_DAY='$P{etime}'",那么又会抛出异常,因为 Jasperreport 会先把 SQL 语句设置成预编译语句"select * from v_baseinfo_statbanjiereport where DEPT_NAME= ? and END_SP_DAY= ?",所以 SQL 语句中用到参数的时候,除了其特定的"$P{}"符号外,不能有别的标点符号,传进去的参数值也尽量不要带标点符号,所以日期格式得改成"20041123"。
当这些全部做完后,点击"Save"按钮,就会生成一个 XML 文件,再点击"Compile"按钮,就会生成一个后缀名为 jasper 的文件。
现在可以预览一下模板的效果,先选择菜单项"Build"的子菜单项"PDF preview"、"HTML preview"、"JAVA 2D preview"、"Excel preview"、"CSV preview"和"JRViewer preview"中的一项(对这些项显示工具的配置在菜单项 Tools\Options.. 下的 External programs), 再点击"Execute report";如果你想带数据预览,还得先激活一下刚配置的数据源,选中菜单栏"Build"下的子菜单栏"Set active connection",会弹出一编辑框,选中一个数据源名称,点击"OK"。
此时我们就要引入一个 jsp 页面,假设是 pdf.jsp,那么下面就是 pdf.jsp 的代码:
<%@ page import="dori.jasper.engine.*" %>
<%@ page import="java.util.*" %>
<%@ page import="java.io.*" %>
<%@ page import="java.sql.*" %>
<%
File reportFile
= new File(application.getRealPath("/reports/ribanjietongji.jasper"));
Map parameters = new HashMap();
parameters.put("orgname", "zhongguo");
parameters.put("etime", "20041123");
Connection conn=null
// 以下忽略得到数据库连接过程
// ……
byte[] bytes =
JasperRunManager.runReportToPdf(
reportFile.getPath(),
parameters,
conn
);
response.setContentType("application/pdf");
response.setContentLength(bytes.length);
ServletOutputStream ouputStream = response.getOutputStream();
ouputStream.write(bytes, 0, bytes.length);
ouputStream.flush();
ouputStream.close();
%>
程序里面要和大家说明的就是,"/reports/test.jasper"这个路径是相对于你这个 jsp 页面的,比如你的 jsp 页面保存在 D:\\..\ROOT\ 目录下,那么你就必须在这个目录下建一个 report 目录,然后把你做好的报表模板文件放到该目录下来。
Map parameters = new HashMap();
parameters.put("orgname", "zhongguo");
parameters.put("etime", "20041123");
"orgname"和"etime"必须和模板时定义的参数名称一致。
$F{} 是用来标明这是数据库字段。$F{WINDOWS_NAME}、$F{NUMBER}、$F{vname}、$F{SP_NAME} 和 $F{SP_TYPE} 是数据库里的字段,也是我要在模板里用到的字段。对于 $F{NUMBER}、$F{vname}、$F{SP_NAME} 和 $F{SP_TYPE} 这四个字段,虽然放在其他域也可以显示出结果,比如:pageHeader 域、columnHeader 域、columnFooter 域等等,但是因为会有多列的数据要显示,所以必须放到"detail"域中。
2、配置模板的查询语句,以及字段、变量和参数。
首先输入查询语句,如"select * from v_baseinfo_statbanjiereport",点击"Read fields"按钮,会查询出该表的所有字段名
如果您要有条件的查询,那么就在后面添加 Where 语句,如"select * from v_baseinfo_statbanjiereport where DEPT_NAME=$P{orgname} and END_SP_DAY=$P{etime}",点击"Save query to report"按钮保存。
这里要注意的是,您可以直接把参数写入 Where 语句中,象这样"where DEPT_NAME='中国' and END_SP_DAY='2004-11-23'";但是从 java 程序或者 jsp 页面传过来的参数是中文字符的话,您就必须做编码转换或者用英文字符、数字来代替;还有像日期参数"2004-11-23",jasperreports 好象解析不了,如果你把 SQL 语句改成" select * from v_baseinfo_statbanjiereport where DEPT_NAME='$P{orgname}' and END_SP_DAY='$P{etime}'",那么又会抛出异常,因为 Jasperreport 会先把 SQL 语句设置成预编译语句"select * from v_baseinfo_statbanjiereport where DEPT_NAME= ? and END_SP_DAY= ?",所以 SQL 语句中用到参数的时候,除了其特定的"$P{}"符号外,不能有别的标点符号,传进去的参数值也尽量不要带标点符号,所以日期格式得改成"20041123"。
当这些全部做完后,点击"Save"按钮,就会生成一个 XML 文件,再点击"Compile"按钮,就会生成一个后缀名为 jasper 的文件。
现在可以预览一下模板的效果,先选择菜单项"Build"的子菜单项"PDF preview"、"HTML preview"、"JAVA 2D preview"、"Excel preview"、"CSV preview"和"JRViewer preview"中的一项(对这些项显示工具的配置在菜单项 Tools\Options.. 下的 External programs), 再点击"Execute report";如果你想带数据预览,还得先激活一下刚配置的数据源,选中菜单栏"Build"下的子菜单栏"Set active connection",会弹出一编辑框,选中一个数据源名称,点击"OK"。
此时我们就要引入一个 jsp 页面,假设是 pdf.jsp,那么下面就是 pdf.jsp 的代码:
<%@ page import="dori.jasper.engine.*" %>
<%@ page import="java.util.*" %>
<%@ page import="java.io.*" %>
<%@ page import="java.sql.*" %>
<%
File reportFile
= new File(application.getRealPath("/reports/ribanjietongji.jasper"));
Map parameters = new HashMap();
parameters.put("orgname", "zhongguo");
parameters.put("etime", "20041123");
Connection conn=null
// 以下忽略得到数据库连接过程
// ……
byte[] bytes =
JasperRunManager.runReportToPdf(
reportFile.getPath(),
parameters,
conn
);
response.setContentType("application/pdf");
response.setContentLength(bytes.length);
ServletOutputStream ouputStream = response.getOutputStream();
ouputStream.write(bytes, 0, bytes.length);
ouputStream.flush();
ouputStream.close();
%>
程序里面要和大家说明的就是,"/reports/test.jasper"这个路径是相对于你这个 jsp 页面的,比如你的 jsp 页面保存在 D:\\..\ROOT\ 目录下,那么你就必须在这个目录下建一个 report 目录,然后把你做好的报表模板文件放到该目录下来。
Map parameters = new HashMap();
parameters.put("orgname", "zhongguo");
parameters.put("etime", "20041123");
"orgname"和"etime"必须和模板时定义的参数名称一致。
追问
感谢您的帮助!
你这是从数据库取数据的。我现在的问题是不需要从数据库里面取数据。全部通过map传值!
如果只显示在TITLE区,是没有问题的!但是TITLE区不能多页。
如果在detail区的话,在iReport里面预览是正常的,但是在WEB项目什么都没有,一片空白,连模板上的静态标签都没有。
博思aippt
2024-07-20 广告
2024-07-20 广告
作为深圳市博思云创科技有限公司的工作人员,对于Word文档生成PPT的操作,我们有以下建议:1. 使用另存为功能:在Word中编辑完文档后,点击文件->另存为,选择PowerPoint演示文稿(*.pptx)格式,即可将文档内容转换为PPT...
点击进入详情页
本回答由博思aippt提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询