如何在Jaspersoft Studio中呈现HTML表
我在数据库中存储了一个html标记,如:如何在Jaspersoft Studio中呈现HTML表,html,html-table,jasper-reports,Html,Html Table,Jasper Reports,我在数据库中存储了一个html标记,如: 1 2 数据 数据 大体上,以下是解决此问题的方法: 将HTML表格转换为CSV格式。 这可以通过使用或来完成 一定要去掉任何格式 将每个CSV元素从HTML转换为标记。 这将用*1*替换
1
2
数据
数据
大体上,以下是解决此问题的方法:
- 这可以通过使用或来完成
- 一定要去掉任何格式
- 这将用
替换*1*
<1
- 使用高性能发动机,例如
- 这必须将
转换为*1*
,JasperReports可以对其进行解析1
- 如果JasperReports可以呈现标记,则不需要进行转换
- 如果列数已知,请像往常一样使用JasperReports
- 如果列数可能不同,请使用
另请参见:概括地说,以下是解决此问题的方法:
- 这可以通过使用或来完成
- 一定要去掉任何格式
- 这将用
替换*1*
<1
- 使用高性能发动机,例如
- 这必须将
转换为*1*
,JasperReports可以对其进行解析1
- 如果JasperReports可以呈现标记,则不需要进行转换
- 如果列数已知,请像往常一样使用JasperReports
- 如果列数可能不同,请使用
,但这将创建一个图像,您不仅会遇到缩放问题,还会遇到文本选择和搜索问题。此外,正如Dave Jarvis在其报告中所述,这通常不是向jasper reports传递数据的合适方式
但是谁会关心让你的html呈现出来的一切呢
公共类HtmlTableDataSource实现JRDasource{
私有列表行;
私有迭代器;
私营部门;
公共HtmlTableDataSource(字符串html){
超级();
init(html);
}
私有void init(字符串html){
this.rows=new ArrayList();
Document doc=Jsoup.parse(html);
元素表=文件选择(“表”);
if(tables==null | | tables.isEmpty()){
回来
}
//获取第一个表忽略其他表
元素表=表。获取(0);
//获取所有行
元素trs=表格。选择(“tr”);
用于(元素:trs){
//将所有列添加到列表中
this.rows.add(element.select(“td”));
}
this.iterator=this.rows.iterator();
}
@凌驾
公共对象getFieldValue(JRField字段)引发JRException{
如果(字段==null | |当前行==null){
返回null;
}
试一试{
int col=Integer.parseInt(field.getName());
if(col
这将实例化我们的数据源,jasper reports将在该数据源上循环调用next()
方法和getFieldValue(JRField字段)
来评估字段
后果
其他考虑
我对JRDataSource的实现既快速又有趣,当然可以大大改进
动态列,如果只有一个最大值,并且它们的大小是固定的,那么您可以使用类似于此的解决方案,如果不切换,则可以根据需要修改JRDataSource
是的,我将
更改为
这是另一个问题,在这种情况下,您可以
public class HtmlTableDataSource implements JRDataSource {
private List<Elements> rows;
private Iterator<Elements> iterator;
private Elements currentRow;
public HtmlTableDataSource(String html) {
super();
init(html);
}
private void init(String html) {
this.rows = new ArrayList<>();
Document doc = Jsoup.parse(html);
Elements tables = doc.select("table");
if (tables == null || tables.isEmpty()) {
return;
}
// Get first table ignore others
Element table = tables.get(0);
//Get all rows
Elements trs = table.select("tr");
for (Element element : trs) {
//add all of our columns to our list
this.rows.add(element.select("td"));
}
this.iterator = this.rows.iterator();
}
@Override
public Object getFieldValue(JRField field) throws JRException {
if (field==null||currentRow==null){
return null;
}
try {
int col = Integer.parseInt(field.getName());
if (col<currentRow.size()){
return currentRow.get(col).html();
}
} catch (NumberFormatException e) {
throw new JRException("Using the HTMLTableDataSource, the field name need to be numbers starting from 0");
}
return null;
}
@Override
public boolean next() throws JRException {
if (this.iterator == null || !this.iterator.hasNext()) {
return false;
}
this.currentRow = this.iterator.next();
return true;
}
}
<?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="htmlTable" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="597c0716-df6b-42ec-a7c8-863eb1b7174a">
<style name="Table_TD" mode="Opaque" backcolor="#FFFFFF">
<box>
<pen lineWidth="0.5" lineColor="#000000"/>
<topPen lineWidth="0.5" lineColor="#000000"/>
<leftPen lineWidth="0.5" lineColor="#000000"/>
<bottomPen lineWidth="0.5" lineColor="#000000"/>
<rightPen lineWidth="0.5" lineColor="#000000"/>
</box>
</style>
<subDataset name="TableDataset" uuid="998ba41a-db15-454b-a081-bc8613899c31">
<field name="0" class="java.lang.String"/>
<field name="1" class="java.lang.String"/>
</subDataset>
<summary>
<band height="30">
<componentElement>
<reportElement x="0" y="0" width="550" height="30" uuid="5d0d5bcb-a094-4446-a5e9-09de629cefc7"/>
<jr:table xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd">
<datasetRun subDataset="TableDataset" uuid="eac86c28-fad2-433a-a02e-0dd419d9e135">
<dataSourceExpression><![CDATA[new my.package.HtmlTableDataSource("<table style='border: 1px solid black'><tr><td style='border: 1px solid black'><b>1</b></td><td style='border: 1px solid black'><b>2</b></td></tr><tr><td style='border: 1px solid black'>Data</td><td style='border: 1px solid black'>Data</td></tr></table>")]]></dataSourceExpression>
</datasetRun>
<jr:column width="180" uuid="86ce5c9c-d285-4a51-bf84-30fa9c55579f">
<jr:detailCell style="Table_TD" height="30">
<textField>
<reportElement x="0" y="0" width="180" height="30" uuid="3acb437b-8b59-4e78-ac1b-4f096f960e89"/>
<textElement textAlignment="Center" verticalAlignment="Middle" markup="html"/>
<textFieldExpression><![CDATA[$F{0}]]></textFieldExpression>
</textField>
</jr:detailCell>
</jr:column>
<jr:column width="150" uuid="741517bf-5107-4b13-9d61-44209f266c6c">
<jr:detailCell style="Table_TD" height="30">
<textField>
<reportElement x="0" y="0" width="150" height="30" uuid="1174a60c-8b9e-441b-a9ef-4340b0cd7b68"/>
<textElement textAlignment="Center" verticalAlignment="Middle" markup="html"/>
<textFieldExpression><![CDATA[$F{1}]]></textFieldExpression>
</textField>
</jr:detailCell>
</jr:column>
</jr:table>
</componentElement>
</band>
</summary>
</jasperReport>