Java JasperReportBuilder HTML行高

Java JasperReportBuilder HTML行高,java,html,dynamic-reports,Java,Html,Dynamic Reports,我正在使用JasperReportBuilder从JDBC数据源构建一个报告,然后通过调用带有JasperHtmlExporterBuilder对象参数的toHtml方法将其导出为HTML。我一直在努力消除我的每一行、列标题行甚至标题中文本上方存在的额外空间。我已经尝试了我能想到的一切,但一直在网上搜索都没有结果 似乎大多数人都有相反的问题:他们需要增加行数以适应文本。我想强制我的行是其内容的高度。如果这不可能,我会很高兴限制我的行的高度 HTML导出器似乎通过插入图像并设置其高度来控制“我的行

我正在使用JasperReportBuilder从JDBC数据源构建一个报告,然后通过调用带有JasperHtmlExporterBuilder对象参数的toHtml方法将其导出为HTML。我一直在努力消除我的每一行、列标题行甚至标题中文本上方存在的额外空间。我已经尝试了我能想到的一切,但一直在网上搜索都没有结果

似乎大多数人都有相反的问题:他们需要增加行数以适应文本。我想强制我的行是其内容的高度。如果这不可能,我会很高兴限制我的行的高度

HTML导出器似乎通过插入图像并设置其高度来控制“我的行”的高度

任何帮助都将不胜感激。谢谢

编辑:这是我的代码

String imageServletUrl = "images?image=";

StringWriter writer = new StringWriter();

JasperHtmlExporterBuilder htmlExporter = Exporters.htmlExporter(writer);
htmlExporter.setImagesURI(imageServletUrl);

SqlRowSet rowSet = getData(databaseIpAddr, portNumber, databaseName, databaseUser, databasePassword);

JRDataSource ds = createDataSource(rowSet);

JasperReportBuilder builder = DynamicReports.report();

IntegerType intType = DynamicReports.type.integerType();
DateType dateType = DynamicReports.type.dateType();

int rowHeightPx = 20;

TextColumnBuilder<Integer> col1 = col
   .column(COL_TITLE_RESULT_NUM, RESULTS_COL_TITLE_RESULT_NUM, intType)
   .setWidth(35)
   .setFixedHeight(rowHeightPx)
   .setStretchWithOverflow(true);   

... create other eight columns ...

StyleBuilder titleStyle = stl.style()
   .bold()
   .setFontSize(22)
   .setHorizontalAlignment(HorizontalAlignment.CENTER);

StyleBuilder columnTitleStyle = stl.style()
   .bold()
   .setAlignment(HorizontalAlignment.CENTER, VerticalAlignment.MIDDLE)
   .setBorder(stl.pen1Point());

StyleBuilder columnStyle = stl.style()
   .setAlignment(HorizontalAlignment.CENTER, VerticalAlignment.MIDDLE)
   .setLineSpacing(LineSpacing.SINGLE)
   .setBorder(stl.pen1Point());

TextFieldBuilder<String> titleBuilder = DynamicReports.cmp
   .text(selectedAgency)
   .setStyle(titleStyle)
   .setFixedHeight(20);

TextFieldBuilder<String> subtitleBuilder = DynamicReports.cmp
   .text("Start Time: " + startDate + " " + getStartTime() + ", End Time: " + endDate + " " + getEndTime())
   .setFixedHeight(20);

TextFieldBuilder<String> noDataMsgBuilder = DynamicReports.cmp
   .text(NO_DATA_MSG)
   .setStyle(columnStyle);

builder
   .title(titleBuilder)
   .addPageHeader(subtitleBuilder)
   .setColumnTitleStyle(columnTitleStyle)
   .columns(col1, col2, col3, col4, col5, col6, col7, col8, col9)
   .setColumnStyle(columnStyle)
   .highlightDetailOddRows()
   .noData(titleBuilder, subtitleBuilder, noDataMsgBuilder)
   .setWhenNoDataType(WhenNoDataType.NO_DATA_SECTION);

String reportHtml;
try {
   // this seems to be required to get to the DynamicReports images
   getContext().getRequest().getSession().setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, builder.toJasperPrint());

   builder.toHtml(htmlExporter);

   reportHtml = writer.toString();
}
catch (DRException e) 
{
   e.printStackTrace();
   reportHtml = "There was an error generating the report";
}
String imageServletUrl=“images?image=”;
StringWriter编写器=新的StringWriter();
JasperHtmlexPorterBuilderHtmlexPorter=Exporters.htmlxPorter(writer);
setImagesURI(imageServletUrl);
SqlRowSet rowSet=getData(databaseIpAddr、portNumber、databaseName、databaseUser、databasePassword);
JRDataSource ds=createDataSource(行集);
JasperReportBuilder=DynamicReports.report();
IntegerType intType=DynamicReports.type.IntegerType();
DateType DateType=DynamicReports.type.DateType();
int rowHeightPx=20;
TextColumnBuilder col1=col
.列(列标题结果编号、结果列标题结果编号、intType)
.setWidth(35)
.设置固定高度(行高px)
.setStretchWithOverflow(真);
... 创建其他八列。。。
StyleBuilder标题样式=stl.style()
.bold()
.setFontSize(22)
.setHorizontalAlignment(HorizontalAlignment.CENTER);
StyleBuilder columnTitleStyle=stl.style()
.bold()
.设置对齐(水平对齐.中心对齐,垂直对齐.中间对齐)
.setboorder(stl.pen1Point());
StyleBuilder columnStyle=stl.style()
.设置对齐(水平对齐.中心对齐,垂直对齐.中间对齐)
.setLineSpacing(行间距.单个)
.setboorder(stl.pen1Point());
TextFieldBuilder titleBuilder=DynamicReports.cmp
.文本(所选代理)
.setStyle(标题样式)
.设置固定高度(20);
TextFieldBuilder subtitleBuilder=DynamicReports.cmp
.text(“开始时间:“+startDate+”+getStartTime()+”,结束时间:“+endDate+”+getEndTime())
.设置固定高度(20);
TextFieldBuilder noDataMsgBuilder=DynamicReports.cmp
.text(无数据消息)
.setStyle(列样式);
建设者
.标题(标题生成器)
.addPageHeader(字幕生成器)
.setColumnTitleStyle(columnTitleStyle)
.列(col1、col2、col3、col4、col5、col6、col7、col8、col9)
.setColumnStyle(columnStyle)
.highlightDetailOddRows()
.noData(标题生成器、副标题生成器、noDataMsgBuilder)
.SetWhenNodeType(WhenNodeType.NO\u数据\u节);
字符串报告HTML;
试一试{
//这似乎是访问DynamicReports图像所必需的
getContext().getRequest().getSession().setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE,builder.toJasperPrint());
toHtml(htmlExporter);
reportHtml=writer.toString();
}
捕获(D例外e)
{
e、 printStackTrace();
reportHtml=“生成报告时出错”;
}

编辑:以下解决方案仅适用于DynamicAsper库,而非DynamicReports。我相信DR API中肯定也有类似的操作(虽然不确定-我接触DR的范围非常有限:())

DynamicReportBuilder::setHeaderHeight(..)、setDetailHeight(..)和JRHtmlExporterParameter的组合。是否必须使用图像来对齐参数设置

// build dynamicreport instance
DynamicReportBuilder dynamicReportBuilder = new DynamicReportBuilder();

dynamicReportBuilder.setHeaderHeight(50); //sets the column header height
dynamicReportBuilder.setDetailHeight(50); //sets the detail band rows height

DynamicReport dynamicReport = dynamicReportBuilder.build();

// build jasperprint..
JasperPrint jasperPrint = DynamicJasperHelper.generateJasperPrint(
    dynamicReport, new ClassicLayoutManager(), dataSource, new HashMap<String, Object>());

// export as html
JRExporter exporter = new JRHtmlExporter();

// tell jasper not to use images for aligning
exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, Boolean.FALSE);

exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, targetFile);

exporter.exportReport();
//构建dynamicreport实例
DynamicReportBuilder DynamicReportBuilder=新的DynamicReportBuilder();
dynamicReportBuilder.setHeaderHeight(50);//设置列标题高度
dynamicReportBuilder.setDetailHeight(50);//设置详图标注栏行高度
DynamicReport DynamicReport=dynamicReportBuilder.build();
//制作茉莉花印花。。
JasperPrint JasperPrint=DynamicJasperHelper.generateJasperPrint(
dynamicReport、新ClassClayOutManager()、数据源、新HashMap());
//导出为html
jreporter exporter=新的JRHtmlExporter();
//告诉jasper不要使用图像进行对齐
exporter.setParameter(JRHtmlExporterParameter.IS_使用_-IMAGES_-TO_-ALIGN,Boolean.FALSE);
exporter.setParameter(jreporterParameter.JASPER_PRINT,jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME,targetFile);
出口商。出口报告();

根据每个波段的行高调整报告波段高度,确保行与行之间没有任何emty空格。如果要使用“emty row”创建一个带有相应条带宽度的emty文本字段。将报告视为网格。

是否愿意分享一些代码?谢谢您的建议。如何调整报告的条带高度?这取决于条带类型和条带是否可以拉伸。基本上将报告设计为网格。基本上将报告设计为网格。例如,如果您将页面标题设为两行(一行为报告名称,第二行为日期或其他任何内容)。创建一个带有报告标题的“单元格”。然后将“单元格”宽度扩展到标注栏的宽度,或添加其他填充剩余空间的单元格。然后放置另一个“单元格”在创建的第1行下方,根据需要调整行高的大小,然后设置标注栏haig(如果您使用的是ireport,它在band properties下,或者您可以在witThanks下使用,那么我最终选择了您的方法,因此我将把它作为我的解决方案进行检查,除非其他人为JasperReportBuilder提供解决方案。实际上,我已经生成了一个DynamicReport对象,以支持报告的PDF导出选项。因此,我重新使用编辑该代码,并使用JRHtmlExporter导出为HTML,而不是导出为PDF。