有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JasperReportBuilder HTML行高

我正在使用JDBC数据源中的JasperReportBuilder构建一个报告,然后使用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";
}

共 (2) 个答案

  1. # 1 楼答案

    调整报告波段高度以适应每个波段的行高,确保行与行之间没有任何emty空格。如果您想让“emty行”创建一个具有相应频带宽度的emty文本字段。将报告视为网格

  2. # 2 楼答案

    编辑:下面的解决方案仅适用于dynamicjapper库,而不是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();