ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java-DynamicJasper:如何在空白时删除行

2019-12-10 01:02:15  阅读:282  来源: 互联网

标签:jasper-reports dynamic-jasper java


我正在使用DynamicJasper生成报告,当行为空白时,我想删除报告行.我知道如何在JasperReports中进行操作.

但是谁能建议我如何使用Java代码通过DynamicJasper删除空白行.

解决方法:

我还没有找到在DynamicJasper API的帮助下解决此问题的简单方法.

但是可以在DJ帮助下解决.

这是用于生成报告的主类的源代码.

public class BasicReportTest {

    private JasperPrint m_jasperPrint;
    private JasperReport m_jasperReport;
    private Map m_params = new HashMap();
    private DynamicReport m_dynamicReport;

    public DynamicReport buildReport() throws Exception {
        Style detailStyle = new Style();
        detailStyle.setBorder(Border.THIN);
        detailStyle.setBlankWhenNull(true);

        Style headerStyle = new Style();
        headerStyle.setFont(Font.COURIER_NEW_BIG_BOLD);
        headerStyle.setBorder(Border.THIN);
        headerStyle.setHorizontalAlign(HorizontalAlign.CENTER);
        headerStyle.setVerticalAlign(VerticalAlign.MIDDLE);
        headerStyle.setFont(Font.ARIAL_BIG);

        FastReportBuilder drb = new FastReportBuilder();
        drb.addColumn("State", "state", String.class.getName(), 30, detailStyle, headerStyle)
                .addColumn("Branch", "branch", String.class.getName(), 30, detailStyle, headerStyle)
                .addColumn("Item", "item", String.class.getName(), 50, detailStyle, headerStyle)
                .addColumn("Amount", "amount", Float.class.getName(), 60, detailStyle, headerStyle)
                .setTitle("The report with empty rows")
                .setUseFullPageWidth(true);

        DynamicReport dr = drb.build();
        return dr;
    }

    public void testReport() throws Exception {
        m_dynamicReport = buildReport();

        JRDataSource dataSource = getDataSource();

        m_jasperReport = DynamicJasperHelper.generateJasperReport(m_dynamicReport, 
                getLayoutManager(), m_params);

        m_jasperPrint = JasperFillManager.fillReport(m_jasperReport, m_params, dataSource);

        exportReport();
    }

    protected LayoutManager getLayoutManager() {
        return new CustomLayoutManager();
    }

    /*... Some code ... */

    public static void main(String[] args) throws Exception {
        BasicReportTest test = new BasicReportTest();
        test.testReport();
    }
}

此代码字符串detailStyle.setBlankWhenNull(true);使我们能够在文本字段中将空值显示为空白.就像我们将使用表达式

<textField isBlankWhenNull="true">

在jrxml文件中.

但是我们还需要像这样“生成” xml代码:

<textField isBlankWhenNull="true">
    <reportElement ... isRemoveLineWhenBlank="true"/>

如前所述,DJ不包含任何用于调用JRElement.setRemoveLineWhenBlank(boolean isRemoveLineWhenBlank)方法的公共方法(包装器).

这就是为什么我使用定制的LayoutManager类的原因-在我的示例中,它是CustomLayoutManager类.

这是它的源代码:

public class CustomLayoutManager extends ClassicLayoutManager {

    @Override
    protected void transformDetailBandTextField(AbstractColumn column, JRDesignTextField textField) {
        super.transformDetailBandTextField(column, textField);
        if (column.getStyle().isBlankWhenNull()) {
            textField.setRemoveLineWhenBlank(true);
        }
    }
}

我已经覆盖了DJ引擎用于构建Detail区域的方法transformDetailBandTextField.

标签:jasper-reports,dynamic-jasper,java
来源: https://codeday.me/bug/20191210/2098158.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有