Search code examples
javajasper-reportsalignmenttextfielddynamic-jasper

Dynamic Alignment based on cell value (Content) in Jasper Reports


I am using DynamicJasper (3.0.13) API for generating PDF.

Is it possible to keep field value alignment center if value is "-" otherwise horizontal. My current jrxml field is as given follow.

<textField>
    <reportElement uuid="105ab8ed-5b63" x="0" y="0" width="200" height="20"/>
        <textElement>
            <font size="15"/>
        </textElement>
        <textFieldExpression>
            <![CDATA[$F{firstName}]]>
        </textFieldExpression>
</textField>

Solution

  • finally I got answer as per my structure for creating dynamic jasper template.

    /**----------START------setting up conditional style and adding it in jasper design---------------*/
    String expressionText = "$F{firstName}.trim().equals("-")";
    JRDesignExpression cellExpression = new JRDesignExpression();
    cellExpression.setText(expressionText);
    
    JRDesignConditionalStyle conditionalCellStyle = new JRDesignConditionalStyle();
    JRDesignStyle baseStyle = new JRDesignStyle();
    
    
    conditionalCellStyle.setParentStyle(baseStyle);
    conditionalCellStyle.setConditionExpression(cellExpression);
    conditionalCellStyle.setHorizontalAlignment(HorizontalAlignEnum.CENTER);
    
    baseStyle.setName("CONDITIONAL_STYLE");
    baseStyle.setHorizontalAlignment(HorizontalAlignEnum.LEFT);
    baseStyle.setBold(Boolean.FALSE);
    baseStyle.setItalic(Boolean.FALSE);
    baseStyle.setStrikeThrough(Boolean.FALSE);
    baseStyle.setUnderline(Boolean.FALSE);
    baseStyle.addConditionalStyle(conditionalCellStyle);
    
    getJasperDesign().addStyle(baseStyle); //(here getJasperDesign() is a object of JasperDesign)
    /**---------END-------setting up conditional style and adding it in jasper design---------------*/
    
    
    /**----------START------setting up my text field---------------*/
    JRDesignTextField cellTextField = new JRDesignTextField();
    /**---------------------setting all other properties of textField--------------------*/
    cellTextField.setStyle(getJasperDesign().getStylesMap().get("CONDITIONAL_STYLE")); //(here getJasperDesign() is a object of JasperDesign)
    /**----------END------setting up my text field---------------*/