ireport固定子表循环次数

ireport怎么设置子表行数,固定子表行数6行,数据少于6行,其余行显示空白,数据不会超过6行
ireport5.6版本

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/743149
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:iReport下载安装配置及编译
  • 除此之外, 这篇博客: IReport常见问题及处理方法中的 二、常见问题及处理方法 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 1、IReport制作报表pageheader只在第一页出现的解决办法

    解决方法:只要打开ireport,pageheader的属性,在print when expression设置$V{PAGE_NUMBER}.equals(1);

    2、IReport如何实现变量字段$F{propertyName}赋值为一个NULL对象时不显示”null”, 而显示为空白?

    解决方法:选中动态单元格,右键选择属性,在弹出对话框TextField选项卡中选中Blank when null。

    思考:以往我们为IReport中变量字段赋值时会在程序或报表Textfield expression中用三目符号去判空,用IReport此功能既可以提高准确度,又可以减少工作量。

    3、 IReport中如果动态单元格中$F{propertyName}显示的字过长,如何换行?

    解决方法:选中动态单元格,右键选择属性,在弹出对话框TextField选项卡中将选中StretchWith Overflow。

    思考:有很多bug都是因为动态文字($F{propertyName})显示不全而造成的,而且这些bug的修改方式也不是根本解决办法,因为就算拉长单元格对于动态字过多时也会出现同样的问题,而且现场也会出现同样的问题。有了“动态长度超过文本框长度会自动换行”这个功能就会解决此问题。

    4、iReport中一个单元格由于内容太多而换行了,而其它没换行那么其显示高度肯定不一致了,如何解决换行导致的单元格对不齐问题?

    解决方法:把同行所有单元格的属性Stretch Type="RelativeToBbandHheight "。选择同一行所有单元格,点击右键选择属性,在弹出对话框Common选项卡中选中将Stretch Type属性设为"RelativeToBbandHheight"。

    思考:有了此功能,我们使打印格式显示得更加整齐,就像一个表格框着每个单元格一样。

    5、iReport中当单元格中的文字出现换行跨页的情况,如何保证换行的字段能够正常显示,并且保证换行后同行的高度保持一致?

    解决方法:选择同行所有单元格,点击右键选择属性,在弹出对话框Common选项卡中选中Print when detail over。

    思考:以前出现翻页打印时常出现打印内容缺失、打印格式不对齐的bug。此功能可以解决上诉问题。

    6、iReport中的子报表如何实现根据其上部是否有打印数据而变打印位置?

    解决方法:选中子报表,右键选择属性,在Common选项卡中将Position type属性置为Float,将Stretch Type属性置为RelativeToTallestObject。

    思考:当第一页打印基本信息在上部,子报表在下部,子报表数据很多需要翻页,并且翻页后需要顶页打印子报表的内容,这时利用此功能最恰当不过了。如果动态文本框因为换行而出现文字重叠也同样可以选择“FLOAT”解决此问题。

    7、打印时经常遇到翻页打印,而且每一页打印的内容不一致,iReport如何实现此功能?

    解决方案:创建多个Frame,每个Frame上可以有不同的打印布局,通过控制Frame的显示页数来控制翻页后不同的显示内容。具体操作:选择Frame,右键选择属性,在Common选项卡中的Print When excepression文本框中输入控制代码,如“new Boolean($V{PAGE_NUMBER}.intValue()>1)”表示超过一页时才显示此Frame上的内容。

    思考:此功能可以更灵活地满足翻页打印不同内容的需求

    8、以往一些需要打印变量的格式化工作往往在程序实现,实际上最好在模板中去进行格式化(代码复用、去除耦合),那么iReport为能够提供哪些格式化规则呢,我们又怎样能利用它们呢?

    解决方法:IReport的每个变量单元格都有许多为格式化规则可以选择(如下图),而且我们也可以增加自己的格式化规则,具体步骤:选中单元格,右键选择属性,在Text Field选项卡中点击Create按钮为变量添加格式化规则(变量类型要与格式化规则对应)。每一项格式化规则这里就不再赘述了。

    思考:打印需求变化最大就是格式了,我们往往因为格式的变化而增加重复代码或者打印项,而模板是客户化的,在模板上格式化可以最大程度上避免这个问题,例如,日期可以格式化各种形式来显示,货币符号用那种、千分位是否分割都可以通过此功能实现。

    9、IReport中大小写问题:

    1、parameter中如果小写,引用也小写

    2、$F{},一般都大写

    3、子报表中引用父报表中查询出来的值时,只需要小写即可,即在子报表的parameter中只需要小写

    10、设置共几页,第几页

    $V{PAGE_NUMBER} 表示当前是第几页 ,在text field 的 选项evaluation time选report是共几页,now表是当前页。页码可在IReport里直接设置。 

    11、多份报告灵活组合在一起输出,伪代码如下:

    Map<String, Object> map = new HashMap<String, Object>();
    ResultSet rs = stmt.executeQuery(sql);// 执行query语句得到结果
    JRDataSource jrDataSource = new JRResultSetDataSource(rs);
    JasperPrint jasperPrintone = JasperFillManager.fillReport(fileName1, map, jrDataSource);
    ResultSet rstwo = stmt.executeQuery(sqltwo);// 执行query语句得到结果
    JRDataSource jrDataSourcetwo = new JRResultSetDataSource(rstwo);
    JasperPrint jasperPrinttwo = JasperFillManager.fillReport(fileName2, map, jrDataSourcetwo);
    jasperPrintList.add(jasperPrinttwo);
    // 输出报告
    ServletOutputStream outputStream = response.getOutputStream();
    JRPdfExporter exporter = new JRPdfExporter();
    exporter.setParameter(JRExporterParameter.JASPER_PRINT_LIST, jasperPrintList);
    exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, outputStream);
    exporter.exportReport();
    outputStream.flush();
    outputStream.close();
    

    13.填充空白行怎么办?

    如果是resultSet数据源,可以通过union添加;如果是javabean数据源,可以给集合添加空对象

    12、案例如下图:

    以上这些内容都是我在开源字节低代码平台中实际应用ireport所总结出来的一些经验,有更好的解决方案大家可以积极交流,在下定当谦虚心接受。

    当然ireport远远不知这么些功能,希望大家可以一起分享我们的使用经验,以至于我们可以在实际开发的时候更高效的完成任务。

    如若转载,请注明出处:开源字节   https://sourcebyte.cn/article/208.html

     

  • 以下回答由chatgpt基于相关博客总结生成:

    ireport5.6版本中,可以通过以下步骤设置子表的固定行数为6行,即使数据少于6行时也显示空白行:

    1. 打开ireport5.6版本,并载入你要设置的报表文件。

    2. 选择子表,右键选择属性。

    3. 在属性对话框中,选择Common选项卡。

    4. 在Common选项卡中,找到Stretch Type属性,并将其设置为RelativeToTallestObject。这将确保子表的高度永远与页面上最高的对象对齐。

    5. 然后,在Same Height模块中,找到Print When Detail Over选项,并选中它。这将确保即使数据少于6行时,子表也会自动扩展到6行。

    6. 接下来,点击Preview按钮预览报表,并确认子表的行数是否已经成功设置为6行,即使数据少于6行时也显示空白行。

    以下是示例代码,演示如何使用JasperReports API生成ireport报表:

    import net.sf.jasperreports.engine.*;
    import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    public class IReportGeneration {
    
        public static void main(String[] args) {
    
            try {
                // 加载ireport报表文件
                JasperReport jasperReport = JasperCompileManager.compileReport("your_report_template.jrxml");
    
                // 准备数据源
                List<YourDataBean> dataList = new ArrayList<>();
                // 添加数据到数据源中
                // ...
    
                // 添加空对象到数据源,填充空白行
                int emptyRows = Math.max(6 - dataList.size(), 0);
                for (int i = 0; i < emptyRows; i++) {
                    dataList.add(new YourDataBean());
                }
    
                // 将数据源转换为JRBeanCollectionDataSource
                JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(dataList);
    
                // 准备参数
                Map<String, Object> parameters = new HashMap<>();
                // 添加其他参数到参数Map中
                // ...
    
                // 填充报表
                JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, dataSource);
    
                // 导出报表为PDF文件
                JasperExportManager.exportReportToPdfFile(jasperPrint, "output.pdf");
    
                System.out.println("报表生成成功!");
            } catch (JRException e) {
                e.printStackTrace();
                System.out.println("报表生成失败!");
            }
        }
    }
    

    请替换代码中的"your_report_template.jrxml"为你的ireport模板文件名,并在数据源中添加实际的数据对象。