如何将 HtmlComponent 添加到 JasperDesign
How to add the HtmlComponent to JasperDesign
我通过各种搜索设法将 HtmlComponent
添加到我的项目中。
我的下一个问题是我不知道如何将它添加到 JasperDesign
。
我根本找不到任何方法将我的 HtmlComponent
添加到 JasperDesign
(甚至不能通过组等)。
我使用 Jasper 5.6.1 并设法从 iReport 工具 (5.6.0) 中获取 HtmlComponent jar (5.0.1)。
我的最终目的是能够在我的报告中包含 HTML-table。我知道这是不可能的,但也许 HTML-component 是最有趣的事情。这样,table 的图像就会出现在我的报告中,这没问题。
这是我当前的代码
private JasperDesign getTable(String html, JasperDesign jasperDesign) {
HtmlComponent table = new HtmlComponent();
JRDesignExpression expression = new JRDesignExpression();
expression.setText(html.replace("\n", ""));
table.setHtmlContentExpression(expression);
JRDesignGroup group = new JRDesignGroup();
group.setName(TABLE_GROUP_PREFIX);
JRDesignBand groupHeader = new JRDesignBand();
groupHeader.setHeight(200);
groupHeader.setSplitType(SplitTypeEnum.IMMEDIATE);
groupHeader.addElement(table);
((JRDesignSection) group.getGroupHeaderSection()).addBand(groupHeader);
return jasperDesign;
}
第 groupHeader.addElement(table)
行失败,因为 HtmlComponent 不是元素,而是组件。
要将组件添加到 JRDesign
,您需要将其包装在 JRDesignComponentElement
中
JRDesignComponentElement ce = new JRDesignComponentElement(design);
ce.setComponentKey(new ComponentKey("http://jasperreports.sourceforge.net/htmlcomponent", "hc", "html"));
ce.setComponent(table);
完整示例
//Create the design
JasperDesign design = new JasperDesign();
design.setWhenNoDataType(WhenNoDataTypeEnum.ALL_SECTIONS_NO_DETAIL); //We will run with no data
design.setName("Html test");
//Add a title band
JRDesignBand title = new JRDesignBand();
title.setHeight(100);
design.setTitle(title);
//Create our component
HtmlComponent hc = new HtmlComponent();
JRDesignExpression expression = new JRDesignExpression();
expression.setText("\"<b>Hello</b> world\"");
hc.setHtmlContentExpression(expression);
//Wrap it in a design componenent
JRDesignComponentElement ce = new JRDesignComponentElement(design);
ce.setComponentKey(new ComponentKey("http://jasperreports.sourceforge.net/htmlcomponent", "hc", "html"));
ce.setComponent(hc);
ce.setHeight(100);
ce.setWidth(100);
title.addElement(ce);
//Compile the design
JasperReport report = JasperCompileManager.compileReport(design);
//Generate the print (passing no datasource, empty)
JasperPrint print = JasperFillManager.fillReport(report, new HashMap<String,Object>());
//Export to pdf
JRPdfExporter exporter = new JRPdfExporter();
exporter.setExporterInput(new SimpleExporterInput(print));
exporter.setExporterOutput(new SimpleOutputStreamExporterOutput("pdf/htmlComponent.pdf"));
SimplePdfExporterConfiguration configuration = new SimplePdfExporterConfiguration();
exporter.setConfiguration(configuration);
exporter.exportReport();
输出
Hello world 的代码很多,用 jrxml 做报告通常更快
我通过各种搜索设法将 HtmlComponent
添加到我的项目中。
我的下一个问题是我不知道如何将它添加到 JasperDesign
。
我根本找不到任何方法将我的 HtmlComponent
添加到 JasperDesign
(甚至不能通过组等)。
我使用 Jasper 5.6.1 并设法从 iReport 工具 (5.6.0) 中获取 HtmlComponent jar (5.0.1)。
我的最终目的是能够在我的报告中包含 HTML-table。我知道这是不可能的,但也许 HTML-component 是最有趣的事情。这样,table 的图像就会出现在我的报告中,这没问题。
这是我当前的代码
private JasperDesign getTable(String html, JasperDesign jasperDesign) {
HtmlComponent table = new HtmlComponent();
JRDesignExpression expression = new JRDesignExpression();
expression.setText(html.replace("\n", ""));
table.setHtmlContentExpression(expression);
JRDesignGroup group = new JRDesignGroup();
group.setName(TABLE_GROUP_PREFIX);
JRDesignBand groupHeader = new JRDesignBand();
groupHeader.setHeight(200);
groupHeader.setSplitType(SplitTypeEnum.IMMEDIATE);
groupHeader.addElement(table);
((JRDesignSection) group.getGroupHeaderSection()).addBand(groupHeader);
return jasperDesign;
}
第 groupHeader.addElement(table)
行失败,因为 HtmlComponent 不是元素,而是组件。
要将组件添加到 JRDesign
,您需要将其包装在 JRDesignComponentElement
JRDesignComponentElement ce = new JRDesignComponentElement(design);
ce.setComponentKey(new ComponentKey("http://jasperreports.sourceforge.net/htmlcomponent", "hc", "html"));
ce.setComponent(table);
完整示例
//Create the design
JasperDesign design = new JasperDesign();
design.setWhenNoDataType(WhenNoDataTypeEnum.ALL_SECTIONS_NO_DETAIL); //We will run with no data
design.setName("Html test");
//Add a title band
JRDesignBand title = new JRDesignBand();
title.setHeight(100);
design.setTitle(title);
//Create our component
HtmlComponent hc = new HtmlComponent();
JRDesignExpression expression = new JRDesignExpression();
expression.setText("\"<b>Hello</b> world\"");
hc.setHtmlContentExpression(expression);
//Wrap it in a design componenent
JRDesignComponentElement ce = new JRDesignComponentElement(design);
ce.setComponentKey(new ComponentKey("http://jasperreports.sourceforge.net/htmlcomponent", "hc", "html"));
ce.setComponent(hc);
ce.setHeight(100);
ce.setWidth(100);
title.addElement(ce);
//Compile the design
JasperReport report = JasperCompileManager.compileReport(design);
//Generate the print (passing no datasource, empty)
JasperPrint print = JasperFillManager.fillReport(report, new HashMap<String,Object>());
//Export to pdf
JRPdfExporter exporter = new JRPdfExporter();
exporter.setExporterInput(new SimpleExporterInput(print));
exporter.setExporterOutput(new SimpleOutputStreamExporterOutput("pdf/htmlComponent.pdf"));
SimplePdfExporterConfiguration configuration = new SimplePdfExporterConfiguration();
exporter.setConfiguration(configuration);
exporter.exportReport();
输出
Hello world 的代码很多,用 jrxml 做报告通常更快