http://www.blogjava.net/heis/archive/2009/02/16/254978.html
xml编码问题
field变量的描述信息一定要填
使用XML作为数据源的例子
private static void printXMLSource()
{
String jrxml = "D:\\jasper_xml.jrxml";
String jasperPath = "D:\\temp\\iReport-1.3.3\\jasper_xml.jasper";
try
{
JasperCompileManager.compileReportToFile(jrxml);
JasperReport jasperReport = (JasperReport) JRLoader.loadObject(jasperPath);
Map parameters = new HashMap();
parameters.put(JRXPathQueryExecuterFactory.XML_DATE_PATTERN, "yyyy-MM-dd");
parameters.put(JRXPathQueryExecuterFactory.XML_NUMBER_PATTERN, "#,##0.##");
parameters.put(JRXPathQueryExecuterFactory.XML_LOCALE, Locale.CHINESE);
parameters.put(JRParameter.REPORT_LOCALE, Locale.CHINA);
parameters.put("SUBREPORT_DIR", "D:\\temp\\iReport-1.3.3\");只表路径
Document document = readStringDocument(readFile("D:\\person2.xml"));
parameters.put(JRXPathQueryExecuterFactory.PARAMETER_XML_DATA_DOCUMENT, document);
JasperFillManager.fillReportToFile(jasperPath, parameters);
JasperPrint print = JasperFillManager.fillReport(jasperReport, parameters);
//使用JRPdfExproter导出器导出pdf
JRPdfExporter exporter = new JRPdfExporter();
// 设置JasperPrintList
exporter.setParameter(JRPdfExporterParameter.JASPER_PRINT, print);
FileOutputStream fos = new FileOutputStream("D:\\jasper_xml2.pdf");
// 设置导出流
exporter.setParameter(JRPdfExporterParameter.OUTPUT_STREAM, fos);
// 开始导出
exporter.exportReport();
fos.flush();
fos.close();
fos = null;
} catch (Throwable e)
{
e.printStackTrace();
System.out.println("==============" + e.toString());
}
}
读取XML文件,在IMB系统中要用这种方法读取才行
public static String readFile(String filepath)
{
String result = "";
StringBuffer sBuffer;
try
{
sBuffer = new StringBuffer();
FileInputStream fis=new FileInputStream(filepath);
BufferedInputStream bis=new BufferedInputStream(fis);
String tempStr;
byte[] b = new byte[1024];
int i = 0;
while ((i = bis.read(b)) > 0)
{
tempStr=new String(b,0,i,"utf-8");指定当前数据的编码
sBuffer.append(tempStr);
}
result = sBuffer.toString();
} catch (FileNotFoundException e)
{
e.printStackTrace();
} catch (IOException e)
{
e.printStackTrace();
}
return result;
}
Parameter作为数据源
private static void printFirst()
{
String jrxml = "D:\\passwordEnvelope_first.jrxml";
String jasperPath = "D:\\passwordEnvelop_first.jasper";
try
{
JasperCompileManager.compileReportToFile(jrxml);
System.out.println("===== jasper create finished ===contractName=");
JasperReport jasperReport = (JasperReport) JRLoader.loadObject(jasperPath);
Map parameters = new HashMap();
parameters.put("head_img","D:\\headsh.jpg");
parameters.put("contractCode","12344****6中午");
parameters.put("password","111****1116我测试");
parameters.put("company","上海南京路");
parameters.put("line_img","D:\\project\\AIA_ETA\\line.jpg");
parameters.put("contractName","中华世纪旅行社");
JasperPrint print = JasperFillManager.fillReport(jasperReport, parameters, new JREmptyDataSource());
//使用JRPdfExproter导出器导出pdf
JRPdfExporter exporter = new JRPdfExporter();
// 设置JasperPrintList
exporter.setParameter(JRPdfExporterParameter.JASPER_PRINT, print);
FileOutputStream fos = new FileOutputStream("D:\\passwordEnvelope_first.pdf");
// 设置导出流
exporter.setParameter(JRPdfExporterParameter.OUTPUT_STREAM, fos);
// 开始导出
exporter.exportReport();
fos.flush();
fos.close();
fos = null;
} catch (Throwable e)
{
e.printStackTrace();
System.out.println("==============" + e.toString());
}
}
如果你还不知道jasperreport和ireport,那你可以参考我的上一篇文章,或者谷歌百度一下。好了,废话少说,Let’s start,Go!
我的环境是iReport3.0+JDK6.0。
先看看效果。
1) 准备数据源,这里使用XML文件(使用UTF8编码)作为数据源。
1