Ⅰ 求助+QQ13979496,ireport pdf windows下打印没问题,linux下中文显示问题
1.导入字体
IReport中先导入设计报表作需要的字体:【Tools->Options->IReport->Fonts】,选择【Install Font】,然后选择你的字体文件,如果是中文字体,则选择【PDF Encoding】为【Identity-H (Unicode with horizontal writing)】并勾选【Embed this font in PDF Document】
2.报表设计
把Pdf Font Name, PdfEncoding, PdfEmbedded三个设置都去掉。报表设计中使用的字体只能选择上面导入的字体列表中的字体。
Pdf Font Name:中易宋体18030
Pdf Embeded: 不选
Pdf encoding: Identity-H (Unicode with horizontal writing)
3.导出字体
在【Tools->Options->IReport->Fonts】中选择所有手动导入的字体(不包括内置的),然后选择【Export as extension】,把字体导出为一个Jar包。
4.添加字体JAR包
把字体JAR包添加在运行环境classpath中,或随项目发布。
如: /.../tomcat/lib/
重启tomcat
Ⅱ 使用iReport制作PDF 部署在linux上时吃字
软件的问题吧,换一个试试。“在window上能正确打印,在linux上会发生最后几行字消失了
”说明生成的PDF文件应该没问题,linux下总有一些小问题,例如选择文字时你会发现有的文字选中以后会乱码...
Ⅲ ireport不方便,有什么bi引擎推荐吗
superset,可视化很强大,不过需要安装Linux,对于非技术人员很不友好,毕竟现在的BI都主打自助式。第三个开源BI就是JasperReports了,这是程序员最受欢迎、最常用的开源报表工具,
Ⅳ jasperreport在Linux下导出PDF格式的时候不能出现中文
这个问题我知道!Acrobat中打开“文件”,“另存为”选项,为图片格式的转储。您也可以打开PDF文件,在PHOTOOSHOP公开赛已经成为一种图片格式。在线浏览图片,使用RGB颜色,如果你使用的是CMYK印刷图片。
Ⅳ 用iReport导出的txt文件中中文部分成了乱码,这是什么原因,如何解决
安装就不用说了,但是要理解Ireport和JasperReport的关系十分重要,Ireport是设计报表的图形界面,在Ireport里新建一个报表是以.jrxml的形式保存的,而最终要用到的是将.jrxml的文件编译为.jsper的文件。.jasper文件就是JaserReport需要调用的报表模版,JasperReport的强大功能就在于它能将.jasper转化为各种文件的格式,如xls,rtf,pdf等等最常用的文件格式。
要将.jsper文件应用在项目中,首先要做几样准备工作:
1.将安装好的Ireport,找到它下面的lib目录,再把jasperreports-1.3.0.jar这个包复制出来(这个包是JasperReport导出的关键),然后将这个包导入到需要应用的项目中,然后在eclipse中重新构建整个项目,这是最关键的第一步。
2.如果导出出现乱码的问题,需要引入iText亚洲语言包,可以在 http://www.lowagie.com/iText/ 查看关于iText的相关信息,包括源代码,文档.
3.设计好报表,将报表编译为.jsper文件,这些文件在iReport的安装路径下,很容易找到。
现在万事俱备,只欠东风了。我在开始写程序的的时候,在网上找了好些代码,而导出的过程中用到的类 JRRtfExporter 的源代码也踩过,并且发现了 http://www.koders.com 这个非常好的网站,这是开源项目的必备,在上面基本上很多类的源码也能查到。
接着自己封装了一个JasperReport类,而这个类可以实现导出各种格式的文件,代码如下:
packagecommon.ireport;
importnet.sf.jasperreports.engine.*;
importnet.sf.jasperreports.engine.export.*;
importnet.sf.jasperreports.engine.export.JRRtfExporter;
importjava.util.List;
importjava.io.*;
import com.log.Logger;
/**
*IReport+JasperReport导出报表类接口
*<p>Title:导出报表类</p>
*<p>Description:</p>
*<p>Copyright:Copyright(c)2007</p>
*<font class=companyfont>
*CES
*</font>
*@author 野谷子
*@version 1.0.2007.02.14
*/
publicclassJasperReport{
privateLogger logger= newLogger("common.ireport.JasperReport");
/**CreatesanewinstanceofMyReport*/
publicJasperReport(){
}
/*
* 导出单个报表为rtf或word
* @param JasperPrint,OutputStream
* @ 页面设置response.setContentType("application/msword");
* @ 页面设置response.setHeader("Content-disposition","attachment;filename=fileName.doc");
* @ 页面设置response.setContentLength(bytes.length);
*/
publicvoidexportReportToRTF(JasperPrint jasperPrint,OutputStreamout){
JRRtfExporter rtfExporter= newJRRtfExporter();
rtfExporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
rtfExporter.setParameter(JRExporterParameter.OUTPUT_STREAM, out);
try{
rtfExporter.exportReport();
logger.debug("Genertate the RTF report ok! :"+ out);
} catch(JRException e) {
e.printStackTrace();
logger.error("Generate the RTF report file ERROR!");
}
}
/*
* 导出多个报表为rtf或word
* @param List,OutputStream
* @ 页面设置response.setContentType("application/msword");
* @ 页面设置response.setHeader("Content-disposition","attachment;filename=fileName.doc");
* @ 页面设置response.setContentLength(bytes.length);
*/
(List jasperPrints,OutputStream out){
JRRtfExporter rtfExporter= newJRRtfExporter();
rtfExporter.setParameter(JRExporterParameter.JASPER_PRINT_LIST, jasperPrints);
rtfExporter.setParameter(JRExporterParameter.OUTPUT_STREAM, out);
try{
rtfExporter.exportReport();
logger.debug("Genertate the mutiply RTF report ok! :"+ out);
} catch(JRException e) {
e.printStackTrace();
logger.error("Generate the mutiply RTF report file ERROR!");
}
}
/*
* 导出单个报表为PDF
* @param JasperPrint,OutputStream
* @ 页面设置response.setContentType("application/pdf");
* @ 页面设置response.setHeader("Content-disposition","attachment;filename=fileName.pdf");
* @ 页面设置response.setContentLength(bytes.length);
*/
publicvoidexportReportToPDF(JasperPrint jasperPrint,OutputStreamout){
JRPdfExporter pdfExporter = newJRPdfExporter();
pdfExporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
pdfExporter.setParameter(JRExporterParameter.OUTPUT_STREAM, out);
try{
pdfExporter.exportReport();
logger.debug("Genertate the PDF report ok! :"+ out);
} catch(JRException e) {
e.printStackTrace();
logger.error("Generate the PDF report file ERROR!");
}
}
/*
* 导出单个报表为XLS
* @param JasperPrint,OutputStream
* @ 页面设置response.setContentType("application/vnd.ms-excel");
* @ 页面设置response.setHeader("Content-disposition","attachment;filename=fileName.xls");
* @ 页面设置response.setContentLength(bytes.length);
*/
publicvoidexportReportToXLS(JasperPrint jasperPrint,OutputStreamout){
JRXlsExporter xlsExporter= newJRXlsExporter();
xlsExporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
xlsExporter.setParameter(JRExporterParameter.OUTPUT_STREAM, out);
xlsExporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.TRUE);
try{
xlsExporter.exportReport();
logger.debug("Genertate the XLS report ok! :"+ out);
} catch(JRException e) {
e.printStackTrace();
logger.error("Generate the XLS report file ERROR!");
}
}
/*
* 导出单个报表为HTML
* @param JasperPrint,OutputStream
* @ 页面设置response.setContentType("text/html");
* @ 页面设置response.setHeader("Content-disposition","attachment;filename=fileName.html");
* @ 页面设置response.setContentLength(bytes.length);
*/
publicvoidexportReportToHTML(JasperPrint jasperPrint,OutputStreamout){
JRHtmlExporter htmlExporter = newJRHtmlExporter();
htmlExporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
htmlExporter.setParameter(JRExporterParameter.OUTPUT_STREAM, out);
htmlExporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, Boolean.FALSE);
htmlExporter.setParameter(JRHtmlExporterParameter.IS_OUTPUT_IMAGES_TO_DIR, Boolean.FALSE);
try{
htmlExporter.exportReport();
logger.debug("Genertate the HTML report ok! :"+ out);
} catch(JRException e) {
e.printStackTrace();
logger.error("Generate the HTML report file ERROR!");
}
}
/*
* 导出单个报表为CSV
* @param JasperPrint,OutputStream
*/
publicvoidexportReportToCSV(JasperPrint jasperPrint,OutputStreamout){
JRCsvExporter csvExporter = newJRCsvExporter();
csvExporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
csvExporter.setParameter(JRExporterParameter.OUTPUT_STREAM, out);
try{
csvExporter.exportReport();
logger.debug("Genertate the CSV report ok! :"+ out);
} catch(JRException e) {
e.printStackTrace();
logger.error("Generate the CSV report file ERROR!");
}
}
/*
* 导出单个报表为TXT
* @param JasperPrint,OutputStream
* @ 页面设置response.setContentType("text/html");
* @ 页面设置response.setHeader("Content-disposition","attachment;filename=fileName.txt");
* @ 页面设置response.setContentLength(bytes.length);
*/
publicvoidexportReportToTXT(JasperPrint jasperPrint,OutputStreamout){
JRTextExporter txtExporter = newJRTextExporter();
txtExporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
txtExporter.setParameter(JRExporterParameter.OUTPUT_STREAM, out);
txtExporter.setParameter(JRTextExporterParameter.CHARACTER_WIDTH, newInteger(80));
txtExporter.setParameter(JRTextExporterParameter.CHARACTER_HEIGHT, newInteger(25));
try{
txtExporter.exportReport();
logger.debug("Genertate the TXT report ok! :"+ out);
} catch(JRException e) {
e.printStackTrace();
logger.error("Generate the TXT report file ERROR!");
}
}
/*
* 导出单个报表为XML
* @param JasperPrint,OutputStream
*/
publicvoidexportReportToXML(JasperPrint jasperPrint,OutputStreamout){
try{
JasperExportManager.exportReportToXmlStream(jasperPrint, out);
logger.debug("Genertate the XML report ok! :"+ out);
} catch(JRException e) {
e.printStackTrace();
logger.error("Generate the XML report file ERROR!");
}
}
}
然后写了一个Control类用于封装.jasper文件,并获取其对象,代码如下:
packagecommon.ireport;
importnet.sf.jasperreports.engine.*;
importnet.sf.jasperreports.engine.export.*;
importnet.sf.jasperreports.engine.export.JRRtfExporter;
importnet.sf.jasperreports.engine.util.*;
importnet.sf.jasperreports.view.*;
importjava.util.*;
importjava.util.List;
importjava.sql.*;
importjava.io.*;
import java.net.URL;
/**
*导出报表控制类*<p>Title:导出报表控制类</p>
*<p>Description:</p>
*<p>Copyright:Copyright(c)2007</p>
*<font class=companyfont>
*CES
*</font>
*@author 野谷子
*@version 1.0.2007.02.14
*/
publicclassJsperReportControl {
privateLogger logger= newLogger("common.ireport.JsperReportControl");
privateQuery query= newQuery();
//定义报表模版路径
privateString PREFIX="/ireportFile/";
//定义后缀名
privateString SUFFIX=".jasper";
publicJsperReportControl(){
}
/*
* 取得报表模版的对象
* 单个参数的情况
* @param 报表名称:strFileName
* @param 参数名称:strParamName
* @param 参数值:strParamValue
* @return JasperPrint
*/
publicJasperPrint getJsperPrint(String strFileName,String strParamName,String strParamValue) throwsSQLException{
JasperPrint jasperPrint = null;
String strJasper= this.getClassPath() + PREFIX + strFileName + SUFFIX ;
Map params = newHashMap();
params.put(strParamName,strParamValue);
//定义数据源连接对象
Connection conn = null;
query.createConnection(CommonManage.CONN);
conn = query.getConnection();
try{
//用JasperFillManager类导入.jasper文件,参数和数据源
jasperPrint = JasperFillManager.fillReport(strJasper, params, conn);
try{
if(conn==null){
conn.close();
}
}catch(SQLException sqle){
logger.error("关闭数据库连接错误"+sqle);
}
}catch(Exception e){
logger.error("getJsperPrint(String strFileName,String strParamName,String strParamValue) Error"+e);
}
returnjasperPrint;
}
/**
*在类中取得当前文件所在的相对路径与绝对路径
*
*@return String
*/
publicStringgetClassPath(){
StringstrClassName=getClass().getName();
StringstrPackageName="";
StringstrURL= "";
if(getClass().getPackage()!=null)
{
strPackageName=getClass().getPackage().getName();
}
//System.out.println("ClassName:"+strClassName);
//System.out.println("PackageName:"+strPackageName);
StringstrClassFileName="";
if(!"".equals(strPackageName))
{
strClassFileName=strClassName.substring(strPackageName.length()+1,strClassName.length());
}
else
{
strClassFileName=strClassName;
}
//System.out.println("ClassFileName:"+strClassFileName);
String strTempName = strClassFileName+".class";
try
{
URLurl=null;
url=getClass().getResource(strClassFileName+".class");
strURL=url.toString();
System.out.println(strURL);
logger.info("strURL="+strURL);
}
catch(Exceptionex)
{
ex.printStackTrace();
}
//取.jasper文件的绝对路径
strURL= strURL.substring("file:".length(),strURL.length()-strTempName.length());
System.out.println("strURL="+strURL);
returnstrURL;
}
}
期间在取绝对路径时出现了问题,在本机测试可以通过,但放在服务器上报错,原因是本机是windows系统,而服务器是linux系统,到现在我觉得最大的原因是getClass().getResource()这个方法在linux系统上取不到资源的位置而报错。
最后就是所写的 jsp 页面了 , 代码如下:
<%@ page import="java.util.Vector"%>
<%@ page import="java.io.*" %>
<%@ page import="java.io.OutputStream" %>
<%@ page import="java.util.List"%>
<%@ page import="net.sf.jasperreports.engine.*" %>
<%@ page import="common.ireport.JsperReportControl"%>
<%@ page import="common.ireport.JasperReport"%>
<%
String strMode = WebUtil.getParam(request,"mode").equals("")?"":WebUtil.getParam(request,"mode");
JsperReportControl jsperReportControl = newJsperReportControl();
JasperReport jasperReport = newJasperReport();
strFileName1 ="quanlitySupervise_page1";
strFileName2 ="quanlitySupervise_page2";
strFileName3 ="quanlitySupervise_page3";
strFileName4 ="quanlitySupervise_page4";
strFileName5 ="quanlitySupervise_page5";
strFileName6 ="quanlitySupervise_page6";
strFileName7 ="quanlitySupervise_page7";
strFileName8 ="quanlitySupervise_page8";
String strParamName="ID";
String strParamValue=strProjectID;
ByteArrayOutputStream baos = newByteArrayOutputStream();
String strQueryConditionTmp="projectName="+strProjectName;
QueryCtrl queryCtrl = newQueryCtrl();
String str="";
if(strMode.equals("out")){
JasperPrint jasperPrint1= jsperReportControl.getJsperPrint(strFileName1,strParamName,strParamValue);
JasperPrint jasperPrint2= jsperReportControl.getJsperPrint(strFileName2,strParamName,strParamValue);
JasperPrint jasperPrint3= jsperReportControl.getJsperPrint(strFileName3,strParamName,strParamValue);
JasperPrint jasperPrint4= jsperReportControl.getJsperPrint(strFileName4,strParamName,strParamValue);
JasperPrint jasperPrint5= jsperReportControl.getJsperPrint(strFileName5,strParamName,strParamValue);
JasperPrint jasperPrint6= jsperReportControl.getJsperPrint(strFileName6,strParamName,strParamValue);
JasperPrint jasperPrint7= jsperReportControl.getJsperPrint(strFileName7,strParamName,strParamValue);
JasperPrint jasperPrint8= jsperReportControl.getJsperPrint(strFileName8,strParamName,strParamValue);
List reportlist = (List)newjava.util.ArrayList();
reportlist.add(jasperPrint1);
reportlist.add(jasperPrint2);
reportlist.add(jasperPrint3);
reportlist.add(jasperPrint4);
reportlist.add(jasperPrint5);
reportlist.add(jasperPrint6);
reportlist.add(jasperPrint7);
reportlist.add(jasperPrint8);
//导出单页测试用
//jasperReport.exportReportToRTF(jasperPrint1,baos);
//整合多页导出
jasperReport.exportReportListToRTF(reportlist,baos);
byte[] bytes;
bytes = baos.toByteArray();
response.setContentType("application/ms_word");
String strDocName ="attachment;filename="+strProjectID+".doc";
response.setHeader("Content-disposition",strDocName);
response.setContentLength(bytes.length);
ServletOutputStream ouputStream = response.getOutputStream();
ouputStream.write(bytes, 0, bytes.length);
ouputStream.flush();
ouputStream.close();
}
}
%>
结尾:在本机测试通过了,但放于服务器出现了错误: Can't connect to X11 window server using':0.0' as the value of the DISPLAY
而在 windows 系统中却能正确运行,原因是程序调用了图形界面的功能,而 windows 很好的支持图形界面, linux 却不能很好的支持,需要修改 linux 中的 DISPLAY 的变量:
下面有几种方法:
1. 对于 tomcat 服务器:找到脚本: catalina.sh ,
在 /usr/local/tomcat/bin/catalina.sh 中修改为
JAVA_OPTS="-Djava.awt.headless=true" 或者 CATALINA_OPTS="-Djava.awt.headless=true"
echo "Using CATALINA_BASE:$CATALINA_BASE"
echo "Using CATALINA_HOME:$CATALINA_HOME"
echo "Using CATALINA_TMPDIR:$CATALINA_TMPDIR"
echo "Using RUNJAVA:$_RUNJAVA"
echo "Using JAVA_OPTS:$JAVA_OPTS"
2 .对于服务器中 oracle 自带的 JSP server ,找到 jserv.properties 这个配置文件,在上面添加:
wrapper.env=DISPLAY=<SERVERNAME>:0
3 .或者用root身份执行一下xhost +命令,
第一种情况:DISPLAY在远程数据库中没有正确定义,需要:
set DISPLAY=localComputer:0
export DISPLAY(取决于shell的不同而命令不同)
第二种情况:图形界面的功能不能在远程登陆的用户中定义和使用,需要:
使用oracle用户登录xwindow:应用xhost +命令
哥们你看我说的对你有帮助嘛我就知道那么多了
Ⅵ ireport导出word文档在linux环境下换行时显示不全
Ⅶ java后台如何向jrxml的paramter传值,jrxml如何接收和使用
你在这里因为你有,有一个文件扩展名结尾的文件 .jrxml. 文件与文件扩展名 .jrxml 只能通过特定的应用程序推出。这有可能是 .jrxml 文件是数据文件,而不是文件或媒体,这意味着他们并不是在所有观看。
什么是一 .JRXML 文件?
JasperReports的是一种非常流行的报表引擎,允许用户创建报告。本申请生产的各种文件,并且这些文件中的一个是JRXML文件。这些文件被称为包含保存在报表设计定义JasperReports的布局文件的XML格式。这些文件包括信息为设计元素,文本字段,图表,变量,报表布局,图像和参数。 JRXML文件和文件JASPER也可以以创建报表合并。 JRXML文件还有助于方便,快捷的报表创建的用户,因为它们包含所需的报表创建数据。包括JasperSoft iReport的是用于打开JRXML文件以及应用程序。这被称为一个开源的报表设计器JasperReports的,因为它们被用来创建布局,使创建更复杂的报表,因为它们包含图表,图像,图形等,它还可以运行在Windows,Mac和Linux操作系统。
如何打开 .JRXML 文件?
推出 .jrxml 文件,或者你的电脑上的任何其他文件,双击它。如果你的文件关联的设置是否正确,这意味着应用程序来打开你的 .jrxml 文件将其打开。这是可能的,你可能需要下载或购买正确的应用程序。这也有可能是你有正确的应用程序在PC上,但 .jrxml 文件还没有与它相关联。在这种情况下,当您尝试打开一个 .jrxml 文件,你可以告诉Windows的应用程序是正确的该文件。从这时起,打开 .jrxml 文件将打开正确的应用程序。
Ⅷ 应聘java软件开发工程师该怎样介绍自己
下面是一个示例,可以看着改改。
教育经历
2007/09—至今 xxxx大学信息学院计算机科学与技术
将于2011年6月获工科学士学位
项目经验
项目名称:xxxx有限公司生产管理信息系统
开发环境:struts2+hibernate+spring
开发工具:sql server 2000,MyEclipse、ireport、tomcat
项目描述:公司内部软件,实现了整个化工厂的生产流程操作、员工的管理、报表的导出、文件的上传下载、用户权限控制,提高了工作效率。
责任描述:参与部分模块的设计、报表设计、编码工作和用户手册的编写
1.工艺员模块:实现了增删查改等功能和文件上传、下载、报表导出
2.下游客户模块:实现了增删查改、报表导出等功能
3.对外函件汇总:实现了增删查改等功能和文件上传、下载、报表导出
4.设备管理:实现了配件储备定额一览表中的增删查改、报表导出
5.质检管理:实现了中控分析报告单中的增删查改、报表导出
6.还有就是其他模块中的一些后期修改
项目总结:通过这个项目的开发,对S2SH有了更深一层的认识。同时也学习了部分Ajax的应用,增强了团队意识和协调能力。也认识到学习的重要性,软件行业技术更新的很快,每天都要去努力的学习新知识。
批注:最好能细化到你具体做了哪一部分的工作,现在看我不知道描述的各个模块的功能是你自己完成的部分还是团队工作成果。
个人技能
IT技能
熟练掌握JAVA面向对象编程语言,有良好的编码习惯;
熟练使用HTML,并了解Ajax
熟练使用jsp、servlet、JavaBean进行web应用开发;
熟练掌握Struts2、Hibernate、Spring等开源框架技术,并能够用Struts2.0+Hibernate+Spring进行大型项目的开发;
熟练操作MS SQL SERVER、MySQL数据库,了解Oracle数据库,熟悉SQL语句;
能够熟练运用Eclipse和myEclipse等开发工具
英语技能四级2008.12通过六级2009.06通过
批注:
1.专业技能中最好能按照你熟练的程度降序排列,把你最擅长的放到最前面,这样方面HR了解你的技能方向,与职位要求做对比。
2.英语技能中通过了六级就不需要说明四级了。
获奖情况
获得2007-2008学年国家励志奖学金
获得2007-2008学年学校优秀学生三等奖学金姬讥灌客弑九鬼循邯末
社会实践
2009学年-至今 作为09届计科2班班主任助理,帮助班主任与班级学生交流。
2008-2009学年 担任班长,帮助班主任与班级同学交流,组织了班里同学东海岛的出游和北海的出游,个人组织能力、团队意识和沟通能力得到很大提升。
2008-2009学年 在学生处助学信贷科勤工俭学,负责学生贷款材料和申请奖助学金材料的核查,整理分析数据和分发材料,有责任心和吃苦耐劳精神。
2008-2009学年 组队参加了xxxx大学第一届编程大赛,并进入决赛。
END
注意事项
java软件工程师简历批注:
1.“个人经历”就不是简历中一个合适的模块名称,因为简历其实就是个人经历的一个另外说法,怎么会在简历中再存在一个个人经历呢?应该是“社会实践”之类的名称更合适。
2.第一、二条中“帮助班主任与班级学生交流”“组织了班里同学东海岛的出游和北海的出游”语法存在错误,“帮助……交流”本身就不是一个正确的搭配,第二句也有不通顺的地方,简历中语言虽然不需要华丽,但是也不能有明显语法错误,毕竟是母语简历,这样有些说不过去。
Ⅸ IREPORT +jasperreport 做报表时 对于 $F{xxxx}传值很长的情况下,怎么让它自动换行呢
最近刚刚学习jasperreport报表使用,做了几个例子,但在实现动态添加元素(列名,循环数据)上出现了问题,没办法解决.
但是出现这种异常,感觉自己没什么错,查了很久的资料还找不到答案,各位帮下忙.
net.sf.jasperreports.engine.design.JRValidationException: Report design not valid :
1. Field not found : Field1
这是设计
[img=http://f18.yahoofs.com/users/4806be90z2166bf67/86a5/__sr_/52b4.jpg?phA0C.IBEdd4GMmG][/img]
保存设计,名domeDynamic.jrxml.
代码
int randomNum = new Random().nextInt(20);
String jrxmlPath = this.getServletContext().getRealPath("/jasper");
jrxmlPath = jrxmlPath + "\\domeDynamic.jrxml";
JasperDesign jasperDesign= JRXmlLoader.load(jrxmlPath);//因为还是添加元素进去,所以还只是jrxml文件
JRDesignBand columnHeaderBand = (JRDesignBand )jasperDesign.getColumnHeader();//获取ColumnHeader拦
JRDesignBand detailBand = (JRDesignBand )jasperDesign.getDetail();//获取Detail拦
JRDesignTextField detailField= (JRDesignTextField )detailBand.getElementByKey("textField-2");
JRDesignStaticText columnHeaderField = (JRDesignStaticText)columnHeaderBand.getElementByKey("staticText-3");
Map map = new HashMap();
List list = new ArrayList(); 数据集 list.add(map);
map.put("Field1","1");
map.put("Field2","2");
//根据随即生成的数进行动态添加列
for(int i=0,y=3;i<=randomNum;i++,y++){
String detailFieldKey = "Field-"+y;
//String columnHeaderFieldKey = "staticText-"+y+1;
map.put(detailFieldKey,y);
//map.put(columnHeaderFieldKey,"列"+y);
detailField= (JRDesignTextField)detailField.clone();
detailField.setX(detailField.getX()+detailField.getWidth());
JRDesignExpression expression = new JRDesignExpression();
expression.setText("$F{"+detailFieldKey+"}");
System.out.println("$F{"+detailFieldKey+"}");
expression.setValueClass(java.lang.String.class);
detailField.setExpression(expression);
detailBand.addElement(detailField);
columnHeaderField = (JRDesignStaticText)columnHeaderField.clone();
columnHeaderField.setX(columnHeaderField.getX()+columnHeaderField.getWidth());
columnHeaderField.setText("列"+y);
columnHeaderBand.addElement(columnHeaderField);
}
list.add(map);
System.out.println(list);
JRDataSource jRDataSource = new JRMapCollectionDataSource(list); //用这个应该可以
JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);//编译jrxml文件,异常也出在这一行.
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport,null,jRDataSource); //填充打印
OutputStream outputStream = response.getOutputStream();
response.setContentType("application/pdf");
response.setCharacterEncoding("GB2312");
response.setHeader("Content-Disposition","attachment; filename="+URLEncoder.encode("PDF报表","GB2312")+".pdf");
JRPdfExporter exporter = new JRPdfExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT,jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM,outputStream);
exporter.exportReport();
outputStream.close();
out.clear();
out = pageContext.pushBody();
异常:
net.sf.jasperreports.engine.design.JRValidationException: Report design not valid :
1. Field not found : Field1
2. Field not found : Field2
3. Field not found : Field-3
4. Field not found : Field-4
5. Field not found : Field-5
6. Field not found : Field-6
7. Field not found : Field-7
8. Field not found : Field-8
at net.sf.jasperreports.engine.design.JRAbstractCompiler.verifyDesign(JRAbstractCompiler.java:260)
at net.sf.jasperreports.engine.design.JRAbstractCompiler.compileReport(JRAbstractCompiler.java:144)
at net.sf.jasperreports.engine.JasperCompileManager.compileReport(JasperCompileManager.java:219)
at org.apache.jsp.domeDynamic_jsp._jspService(domeDynamic_jsp.java:138)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:334)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:595)
碰到过这问题的帮忙解决下! 谢谢呀。
顺便问一下 如果一个报表要使用多个数据源. 也就是多个Detail的情况下要怎么做?
Ⅹ 求推荐现在有什么好用的web报表工具
思迈特软件Smartbi的报表工具就挺好用的,思迈特软件Smartbi在大数据审计分析中的应用重点包括跨库查询、高性能存储、疑点生成、自助分析、数据报送、财务分析、专题分析、自动取证单、大屏报送等。思迈特软件Smartbi是一款基于轻量级Web报表工具,采用拖拽式设计模式,不需任何服务器和组件支持,即可在 Mac、Linux 和 Windows 操作系统中,设计多种类型的报表。