需求是主报表中加入两个或者两个以上的table,也是刚刚发现table可以水平放置。主报表的数据源是json,table的是list<String>,这里没有用javabean所以当你有一组数据的时候,建议你建立一个size的List,这样才不会丢失数据,这里贴出代码,知道拷贝翟铁就可以出结果。
本文版权归__馋猫和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
先给出效果图,效果图如下↓
Java代码TableJsonTest.java如下↓
1 package a.test.xmlfile; 2 3 import java.io.BufferedReader; 4 import java.io.ByteArrayInputStream; 5 import java.io.FileInputStream; 6 import java.io.IOException; 7 import java.io.InputStream; 8 import java.io.InputStreamReader; 9 import java.util.ArrayList; 10 import java.util.HashMap; 11 import java.util.List; 12 import java.util.Locale; 13 14 import net.sf.jasperreports.engine.JRParameter; 15 import net.sf.jasperreports.engine.JasperCompileManager; 16 import net.sf.jasperreports.engine.JasperFillManager; 17 import net.sf.jasperreports.engine.JasperPrint; 18 import net.sf.jasperreports.engine.JasperReport; 19 import net.sf.jasperreports.engine.design.JasperDesign; 20 import net.sf.jasperreports.engine.query.JsonQueryExecuterFactory; 21 import net.sf.jasperreports.engine.xml.JRXmlLoader; 22 import net.sf.jasperreports.view.JasperViewer; 23 24 public class TableJsonTest { 25 public static String ReadFile(String Path) { 26 BufferedReader reader = null; 27 String laststr = ""; 28 try { 29 FileInputStream fileInputStream = new FileInputStream(Path); 30 InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "utf-8"); 31 reader = new BufferedReader(inputStreamReader); 32 String tempString = null; 33 while ((tempString = reader.readLine()) != null) { 34 laststr += tempString; 35 } 36 reader.close(); 37 } catch (IOException e) { 38 e.printStackTrace(); 39 } finally { 40 if (reader != null) { 41 try { 42 reader.close(); 43 } catch (IOException e) { 44 e.printStackTrace(); 45 } 46 } 47 } 48 return laststr; 49 } 50 51 public static void main(String[] args) { 52 53 List<String> nameList = new ArrayList<>(); 54 nameList.add("name1"); 55 nameList.add("name2"); 56 nameList.add("name3"); 57 nameList.add("name4"); 58 nameList.add("name5"); 59 60 List<String> ageList = new ArrayList<>(); 61 ageList.add("age1"); 62 ageList.add("age2"); 63 ageList.add("age3"); 64 ageList.add("age4"); 65 ageList.add("age5"); 66 67 List<String> codeList = new ArrayList<>(); 68 codeList.add("code1"); 69 codeList.add("code2"); 70 codeList.add("code3"); 71 codeList.add("code4"); 72 codeList.add("code5"); 73 codeList.add("code6"); 74 75 List<String> personList = new ArrayList<>(); 76 personList.add("person1"); 77 personList.add("person2"); 78 personList.add("person3"); 79 personList.add("person4"); 80 personList.add("person5"); 81 personList.add("person6"); 82 // 注意更改路径 83 String s = ReadFile("F:\\Users\\Desktop\\lib\\tianjin.json"); 84 JasperDesign design; 85 try { 86 // 注意更改路径 87 design = JRXmlLoader.load("F:\\reportTest\\tableTest.jrxml"); 88 HashMap<String, Object> paramsMap = new HashMap<String, Object>(); 89 // 第二种配置数据源的方式 InputStream 90 InputStream is = new ByteArrayInputStream(s.getBytes("UTF-8")); 91 paramsMap.put("JSON_INPUT_STREAM", is); 92 paramsMap.put("ageList", ageList); 93 paramsMap.put("nameList", nameList); 94 paramsMap.put("codeList", codeList); 95 paramsMap.put("personList", personList); 96 // 配置其他参数 97 paramsMap.put(JsonQueryExecuterFactory.JSON_LOCALE, Locale.ENGLISH); 98 paramsMap.put(JRParameter.REPORT_LOCALE, Locale.US); 99 // 加载模板 100 JasperReport report = JasperCompileManager.compileReport(design); 101 // 填充数据 102 JasperPrint print = JasperFillManager.fillReport(report, paramsMap); 103 // 预览显示 104 JasperViewer.viewReport(print); 105 106 } catch (Exception e) { 107 // TODO Auto-generated catch block 108 e.printStackTrace(); 109 } 110 } 111 112 }