- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
打印主报告中的子报告时。
我正在使用 Jasper API 创建主报告并将编译后的子报告添加到主报告中。主要报告编译良好。但图表重复了数据源中的数据数量。
如果数据源(我的数据源是 JRBeanCollectionDataSource)有 6 个,则它会打印 2 组 2 个重叠图和其下方的 2 个图
我正在从报告的组部分调用子报告设计类主报告
public class JasperDesignForTemplate {
public JasperDesign design() throws Exception {
// set basic design for main report
JasperDesign jasperDesign = new JasperDesign();
jasperDesign.setName("simpleReport");
jasperDesign.setPageWidth(595);
jasperDesign.setPageHeight(842);
jasperDesign.setColumnWidth(270);
jasperDesign.setColumnSpacing(15);
jasperDesign.setLeftMargin(20);
jasperDesign.setRightMargin(20);
jasperDesign.setTopMargin(30);
jasperDesign.setBottomMargin(30);
//Parameters
// field
JRDesignField bar = new JRDesignField();
bar.setName("bar");
bar.setValueClass(java.util.List.class);
jasperDesign.addField(bar);
JRDesignField time = new JRDesignField();
time.setName("time");
time.setValueClass(java.util.List.class);
jasperDesign.addField(time);
JRDesignBand band = new JRDesignBand();
//Group
JRDesignGroup group = new JRDesignGroup();
group.setName("Chart group");
band = new JRDesignBand();
band.setHeight(250);
band.setSplitType(SplitTypeEnum.STRETCH);
JRDesignSubreport jSubreport = new JRDesignSubreport(jasperDesign);
jSubreport.setUsingCache(false);
jSubreport.setRemoveLineWhenBlank(true);
jSubreport.setPrintRepeatedValues(false);
JRDesignExpression expression = new JRDesignExpression();
expression.setText("new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{time})");
jSubreport.setDataSourceExpression(expression);
expression = new JRDesignExpression();
expression.setText("\"/path/to/TimeSeriesChartSubReport.jasper\"");
jSubreport.setExpression(expression);
band.addElement(jSubreport);
((JRDesignSection)group.getGroupHeaderSection()).addBand(band);
jasperDesign.addGroup(group);
JRDesignGroup Chartgroup = new JRDesignGroup();
Chartgroup.setName("Chart group Chart");
JRDesignBand chartband = new JRDesignBand();
chartband.setHeight(250);
chartband.setSplitType(SplitTypeEnum.STRETCH);
JRDesignSubreport jSubreportChart = new JRDesignSubreport(jasperDesign);
jSubreportChart.setUsingCache(false);
jSubreportChart.setRemoveLineWhenBlank(true);
JRDesignExpression expressionChart = new JRDesignExpression();
expressionChart.setText("new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{bar})");
jSubreportChart.setDataSourceExpression(expressionChart);
expressionChart = new JRDesignExpression();
expressionChart.setText("\"/path/to/BarCharSubReport.jasper\"");
jSubreportChart.setExpression(expressionChart);
chartband.addElement(jSubreportChart);
((JRDesignSection)Chartgroup.getGroupHeaderSection()).addBand(chartband);
jasperDesign.addGroup(Chartgroup);
// title band
band = new JRDesignBand();
band.setHeight(20);
band.setSplitType(SplitTypeEnum.STRETCH);
JRDesignStaticText staticText = new JRDesignStaticText();
staticText.setX(0);
staticText.setY(0);
staticText.setHeight(20);
staticText.setWidth(550);
staticText.setText("Report Name");
staticText.setHorizontalAlignment(HorizontalAlignEnum.CENTER);
staticText.setFontSize(15);
band.addElement(staticText);
jasperDesign.setTitle(band);
// end of title band
// page header band
band = new JRDesignBand();
band.setHeight(50);
band.setSplitType(SplitTypeEnum.STRETCH);
jasperDesign.setPageHeader(band);
// end of page header band
// column header band
band = new JRDesignBand();
band.setHeight(50);
band.setSplitType(SplitTypeEnum.STRETCH);
jasperDesign.setColumnHeader(band);
// end of column header band
//detail band
band = new JRDesignBand();
band.setHeight(20);
((JRDesignSection) jasperDesign.getDetailSection()).addBand(band);
// end of detail band
// column footer band
band = new JRDesignBand();
band.setHeight(20);
jasperDesign.setColumnFooter(band);
// end of column footer band
// page footer band
band = new JRDesignBand();
band.setHeight(20);
jasperDesign.setPageFooter(band);
// end of page footer band
// summary band
band = new JRDesignBand();
band.setHeight(20);
jasperDesign.setSummary(band);
// end of summary band
return jasperDesign;
}
}
编译子报告并填充并生成PDF的类
public class DynamicJasper {
protected JasperPrint jp;
protected JasperReport jr;
protected Map params = new HashMap();
private static String inputjrxml = "/path/to/Report.jrxml";
private static String outputjasper = "/path/to/Report.jasper";
private static String pdffile = "/path/to/Report.pdf";
public static void main(String args[]) throws Exception{
String inputTimeSubreport = "/path/to/TimeSeriesChartSubReport.jrxml";
String outputTimeSubreport = "/path/to/TimeSeriesChartSubReport.jasper";
String inputBarSubreport = "/path/to/BarCharSubReport.jrxml";
String outputBarSubreport = "/path/to/BarCharSubReport.jasper";
JasperCompileManager.compileReportToFile(inputTimeSubreport, outputTimeSubreport);
JasperCompileManager.compileReportToFile(inputBarSubreport, outputBarSubreport);
JasperDesignForTemplate templace = new JasperDesignForTemplate();
JasperDesign design = templace.design();
Collection<JRValidationFault> faults = JasperCompileManager.verifyDesign(design);
JasperCompileManager.compileReportToFile(design, outputjasper);
HashMap<String, Object> params = new HashMap<String, Object>();
EventData data = new EventData();
JRBeanCollectionDataSource beanList = new JRBeanCollectionDataSource(data.getEventData());
JasperPrint jasperPrint = JasperFillManager.fillReport(outputjasper, params, beanList);
JasperExportManager.exportReportToPdfStream(jasperPrint, new FileOutputStream(pdffile));
}
}
列出数据提供者 Bean
public class EventBean {
private String field;
private String count;
private String pastcount;
private List<TimeSeriesBean> time = new ArrayList<TimeSeriesBean>();
public EventBean(){
}
public EventBean(String name, String count, String pastCount, List<TimeSeriesBean> time){
this.field = name;
this.count = count;
this.time = time;
this.pastcount = pastCount;
}
public String getField() {
return field;
}
public void setName(String name) {
this.field = name;
}
public String getCount() {
return count;
}
public void setCount(String count) {
this.count = count;
}
public List<TimeSeriesBean> getTime() {
return time;
}
public void setTime(List<TimeSeriesBean> time) {
this.time = time;
}
public void setField(String field) {
this.field = field;
}
public String getPastcount() {
return pastcount;
}
public void setPastcount(String pastcount) {
this.pastcount = pastcount;
}
}
public class TimeSeriesBean {
private String count;
private String timeStamp;
public TimeSeriesBean(String count, String timeStamp) {
this.count = count;
this.timeStamp = timeStamp;
}
public TimeSeriesBean() {
}
public String getCount() {
return count;
}
public void setCount(String count) {
this.count = count;
}
public String getTimeStamp() {
return timeStamp;
}
public void setTimeStamp(String timeStamp) {
this.timeStamp = timeStamp;
}
}
public class EventData {
private List<EventBean> bar;
private List<TimeSeriesBean> time;
public List<EventBean> getBar() {
return bar;
}
public void setBar(List<EventBean> bar) {
this.bar = bar;
}
public List<TimeSeriesBean> getTime() {
return time;
}
public void setTime(List<TimeSeriesBean> time) {
this.time = time;
}
public List<EventData> getEventData(){
ArrayList<EventData> dataArr = new ArrayList<EventData>();
EventData data = new EventData();
EventNameList dataList = new EventNameList();
data.setBar(dataList.getDataBeanList());
data.setTime(dataList.getSingleDataBeanList().get(0).getTime());
dataArr.add(data);
return dataArr;
}
}
public class EventNameList {
public ArrayList<EventBean> getSingleDataBeanList() {
ArrayList<EventBean> list = new ArrayList<EventBean>();
ArrayList<TimeSeriesBean> listTime = new ArrayList<TimeSeriesBean>();
TimeSeriesBean tbean = new TimeSeriesBean("413","1375951800");
TimeSeriesBean tbean1 = new TimeSeriesBean("425","1375952100");
TimeSeriesBean tbean2 = new TimeSeriesBean("396","1375952820");
TimeSeriesBean tbean3 = new TimeSeriesBean("400","1375953540");
TimeSeriesBean tbean4 = new TimeSeriesBean("200","1375953440");
TimeSeriesBean tbean5 = new TimeSeriesBean("1400","1375953999");
listTime.add(tbean);
listTime.add(tbean1);
listTime.add(tbean2);
listTime.add(tbean3);
listTime.add(tbean4);
listTime.add(tbean5);
list.add(generate("Flow", "100", "800", listTime));
return list;
}
public ArrayList<EventBean> getDataBeanList() {
ArrayList<EventBean> list = new ArrayList<EventBean>();
ArrayList<TimeSeriesBean> listTime = new ArrayList<TimeSeriesBean>();
TimeSeriesBean tbean = new TimeSeriesBean("413","1375951800");
TimeSeriesBean tbean1 = new TimeSeriesBean("425","1375952100");
TimeSeriesBean tbean2 = new TimeSeriesBean("396","1375952820");
TimeSeriesBean tbean3 = new TimeSeriesBean("400","1375953540");
TimeSeriesBean tbean4 = new TimeSeriesBean("400","1375953440");
TimeSeriesBean tbean5 = new TimeSeriesBean("400","1375953999");
listTime.add(tbean);
listTime.add(tbean1);
listTime.add(tbean2);
listTime.add(tbean3);
listTime.add(tbean4);
listTime.add(tbean5);
list.add(generate("Flow", "100", "800", null));
list.add(generate("Non flow", "200", "50", null));
list.add(generate("Allow", "600", "400", null));
list.add(generate("Deny", "50", "200", null));
list.add(generate("Block", "150", "1200", null));
list.add(generate("Access", "10", "0", null));
return list;
}
private EventBean generate(String name, String country, String pastCount, List<TimeSeriesBean> time) {
EventBean bean = new EventBean();
bean.setName(name);
bean.setCount(country);
bean.setPastcount(pastCount);
bean.setTime(time);
return bean;
}
}
时间序列图的子报告 JRXML
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="ProductReport" columnCount="2" pageWidth="325" pageHeight="842" whenNoDataType="NoDataSection" columnWidth="160" columnSpacing="5" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0">
<field name="count" class="java.lang.String"/>
<field name="timeStamp" class="java.lang.String"/>
<group name="TimeSeriesGroup">
<groupExpression><![CDATA[$F{count}]]></groupExpression>
<groupHeader>
<band height="250">
<timeSeriesChart>
<chart evaluationTime="Report">
<reportElement x="0" y="25" width="550" height="175"/>
<chartTitle/>
<chartSubtitle/>
<chartLegend/>
</chart>
<timeSeriesDataset timePeriod="Minute">
<dataset incrementType="None"/>
<timeSeries>
<seriesExpression><![CDATA["Count"]]></seriesExpression>
<timePeriodExpression><![CDATA[new Date(Long.valueOf($F{timeStamp})*1000)]]></timePeriodExpression>
<valueExpression><![CDATA[Integer.valueOf($F{count})]]></valueExpression>
</timeSeries>
</timeSeriesDataset>
<timeSeriesPlot isShowLines="true" isShowShapes="false">
<plot/>
<timeAxisFormat>
<axisFormat>
<labelFont/>
<tickLabelFont/>
</axisFormat>
</timeAxisFormat>
<valueAxisFormat>
<axisFormat>
<labelFont/>
<tickLabelFont/>
</axisFormat>
</valueAxisFormat>
</timeSeriesPlot>
</timeSeriesChart>
</band>
</groupHeader>
<groupFooter>
<band/>
</groupFooter>
</group>
</jasperReport>
条形图的子报告 JRXML
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="ProductReport" columnCount="2" pageWidth="325" pageHeight="842" whenNoDataType="NoDataSection" columnWidth="160" columnSpacing="5" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0">
<field name="count" class="java.lang.String"/>
<field name="field" class="java.lang.String"/>
<field name="pastcount" class="java.lang.String"/>
<group name="BarChartGroup">
<groupExpression><![CDATA[$F{count}]]></groupExpression>
<groupHeader>
<band height="250">
<bar3DChart>
<chart evaluationTime="Report">
<reportElement x="0" y="0" width="555" height="233" isRemoveLineWhenBlank="true"/>
<chartTitle/>
<chartSubtitle/>
<chartLegend position="Right"/>
</chart>
<categoryDataset>
<dataset incrementType="None"/>
<categorySeries>
<seriesExpression><![CDATA["This month"]]></seriesExpression>
<categoryExpression><![CDATA[$F{field}]]></categoryExpression>
<valueExpression><![CDATA[Integer.valueOf($F{count})]]></valueExpression>
</categorySeries>
<categorySeries>
<seriesExpression><![CDATA["Last month"]]></seriesExpression>
<categoryExpression><![CDATA[$F{field}]]></categoryExpression>
<valueExpression><![CDATA[Integer.valueOf($F{pastcount})]]></valueExpression>
</categorySeries>
</categoryDataset>
<bar3DPlot>
<plot/>
<itemLabel/>
<categoryAxisFormat>
<axisFormat/>
</categoryAxisFormat>
<valueAxisFormat>
<axisFormat/>
</valueAxisFormat>
</bar3DPlot>
</bar3DChart>
</band>
</groupHeader>
<groupFooter>
<band/>
</groupFooter>
</group>
</jasperReport>
生成的报告第 1 页 2 组重叠时间序列图 生成的报告 2 个单独时间序列图的第 2 页 生成报告 2 的第 3 页一组重叠条形图 生成的报告第 4 页 2 组单独的条形图
最佳答案
从
中删除组表达式 $F{count}<groupExpression><![CDATA[$F{count}]]></groupExpression>
如果这不起作用,则从主报表和子报表中删除整个组表达式行。
关于java - 子报告中的多个图表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23561049/
我正在编写一个具有以下签名的 Java 方法。 void Logger(Method method, Object[] args); 如果一个方法(例如 ABC() )调用此方法 Logger,它应该
我是 Java 新手。 我的问题是我的 Java 程序找不到我试图用作的图像文件一个 JButton。 (目前这段代码什么也没做,因为我只是得到了想要的外观第一的)。这是我的主课 代码: packag
好的,今天我在接受采访,我已经编写 Java 代码多年了。采访中说“Java 垃圾收集是一个棘手的问题,我有几个 friend 一直在努力弄清楚。你在这方面做得怎么样?”。她是想骗我吗?还是我的一生都
我的 friend 给了我一个谜语让我解开。它是这样的: There are 100 people. Each one of them, in his turn, does the following
如果我将使用 Java 5 代码的应用程序编译成字节码,生成的 .class 文件是否能够在 Java 1.4 下运行? 如果后者可以工作并且我正在尝试在我的 Java 1.4 应用程序中使用 Jav
有关于why Java doesn't support unsigned types的问题以及一些关于处理无符号类型的问题。我做了一些搜索,似乎 Scala 也不支持无符号数据类型。限制是Java和S
我只是想知道在一个 java 版本中生成的字节码是否可以在其他 java 版本上运行 最佳答案 通常,字节码无需修改即可在 较新 版本的 Java 上运行。它不会在旧版本上运行,除非您使用特殊参数 (
我有一个关于在命令提示符下执行 java 程序的基本问题。 在某些机器上我们需要指定 -cp 。 (类路径)同时执行java程序 (test为java文件名与.class文件存在于同一目录下) jav
我已经阅读 StackOverflow 有一段时间了,现在我才鼓起勇气提出问题。我今年 20 岁,目前在我的家乡(罗马尼亚克卢日-纳波卡)就读 IT 大学。足以介绍:D。 基本上,我有一家提供簿记应用
我有 public JSONObject parseXML(String xml) { JSONObject jsonObject = XML.toJSONObject(xml); r
我已经在 Java 中实现了带有动态类型的简单解释语言。不幸的是我遇到了以下问题。测试时如下代码: def main() { def ks = Map[[1, 2]].keySet()
一直提示输入 1 到 10 的数字 - 结果应将 st、rd、th 和 nd 添加到数字中。编写一个程序,提示用户输入 1 到 10 之间的任意整数,然后以序数形式显示该整数并附加后缀。 public
我有这个 DownloadFile.java 并按预期下载该文件: import java.io.*; import java.net.URL; public class DownloadFile {
我想在 GUI 上添加延迟。我放置了 2 个 for 循环,然后重新绘制了一个标签,但这 2 个 for 循环一个接一个地执行,并且标签被重新绘制到最后一个。 我能做什么? for(int i=0;
我正在对对象 Student 的列表项进行一些测试,但是我更喜欢在 java 类对象中创建硬编码列表,然后从那里提取数据,而不是连接到数据库并在结果集中选择记录。然而,自从我这样做以来已经很长时间了,
我知道对象创建分为三个部分: 声明 实例化 初始化 classA{} classB extends classA{} classA obj = new classB(1,1); 实例化 它必须使用
我有兴趣使用 GPRS 构建车辆跟踪系统。但是,我有一些问题要问以前做过此操作的人: GPRS 是最好的技术吗?人们意识到任何问题吗? 我计划使用 Java/Java EE - 有更好的技术吗? 如果
我可以通过递归方法反转数组,例如:数组={1,2,3,4,5} 数组结果={5,4,3,2,1}但我的结果是相同的数组,我不知道为什么,请帮助我。 public class Recursion { p
有这样的标准方式吗? 包括 Java源代码-测试代码- Ant 或 Maven联合单元持续集成(可能是巡航控制)ClearCase 版本控制工具部署到应用服务器 最后我希望有一个自动构建和集成环境。
我什至不知道这是否可能,我非常怀疑它是否可能,但如果可以,您能告诉我怎么做吗?我只是想知道如何从打印机打印一些文本。 有什么想法吗? 最佳答案 这里有更简单的事情。 import javax.swin
我是一名优秀的程序员,十分优秀!