开发者

JRXML - Display a checkbox in a table

I can't manage开发者_高级运维 to display a checkbox in a table in jrxml.

Here is a sample of my code:

<detail>
    <band height="45" splitType="Stretch">
        <textField isBlankWhenNull="true">
            <reportElement style="MyCustomStyle" stretchType="RelativeToTallestObject" x="650" y="0" width="80" height="35"/>
            <textElement textAlignment="Center"/>
            <textFieldExpression class="java.lang.Boolean"><![CDATA[$F{myBooleanVariable}]]>
            </textFieldExpression>
        </textField>
    </band>
</detail>

The column just displays true or false. I supposed that specifying class="java.lang.Boolean" in the textFieldExpression element would convert the value to a checkbox but apparently, I need more than that.

Any idea of what I'm doing wrong?


I just added some unicode to the solution you already made:

<textFieldExpression><![CDATA[$F{myBooleanVairiable}? "\u2713":"\u2717"]]></textFieldExpression>

u2713 translates to a tick mark and u2717 to a cross

Remember to make sure you're encoding statement at the top of your xml page is set to UTF8:


Simple, do this, on the tag ->imageExpression<-

        <componentElement>
            <reportElement x="196" y="109" width="46" height="39"/>
            <jr:list xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd" printOrder="Vertical">
                <datasetRun subDataset="dataset3">
                    <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{fisicos})]]></dataSourceExpression>
                </datasetRun>
                <jr:listContents height="39" width="46">
                    <image>
                        <reportElement x="12" y="0" width="17" height="21"/>
                        <imageExpression><![CDATA[$F{_THIS} == true ? $P{checkboxFisicoOK} : $P{checkboxFisicoNOK}]]></imageExpression>
                    </image>
                </jr:listContents>
            </jr:list>
        </componentElement>

JRXML - Display a checkbox in a table

  • checkboxFisicoOK: is a parameter of the image path.

    <parameter name="checkboxFisicoOK" class="java.lang.String" isForPrompting="false">
        <defaultValueExpression><![CDATA[new java.lang.String("/Users/ccamol/onprocess/checkboxOK.jpg")]]></defaultValueExpression>
    </parameter>
    


Checkbox in the the jasper HTML report can be as follows

<textFieldExpression><![CDATA[$F{myBooleanVairiable}? "\u2713":"\u2717"]]></textFieldExpression>

Note: Have to use the font which supports the unicode

In PDF above code cannot be used. Either we have to use font extension or by drawing lines as follows

<frame>
<reportElement x="161" y="73" width="12" height="12"/>
<box topPadding="0" leftPadding="0" bottomPadding="0" rightPadding="0">
    <pen lineWidth="1.0"/>
    <topPen lineWidth="1.0"/>
    <leftPen lineWidth="1.0"/>
    <bottomPen lineWidth="1.0"/>
    <rightPen lineWidth="1.0"/>
</box>
<line>
    <reportElement x="2" y="7" width="2" height="2">
        <printWhenExpression><![CDATA[Boolean Exprssion]></printWhenExpression>
    </reportElement>
</line>
<line direction="BottomUp">
    <reportElement x="4" y="3" width="6" height="6">
        <printWhenExpression><![CDATA[Boolean Exprssion]]]></printWhenExpression>
    </reportElement>
</line>


Al right so apparently it's not possible to add a checkbox in a table with that language !

So now I just display YES/NO:

<textFieldExpression class="java.lang.String"><![CDATA[$F{myBooleanVariable}?"YES":"NO"]]></textFieldExpression>

That's the best I could find !


For PDF this worked for me, explicitly setting the font to one that supports unicode:

<textField>
    <textElement>
        <font fontName="DejaVu Sans" size="16"/>
    </textElement>
    <textFieldExpression><![CDATA[$F{myBooleanVariable}?"\u2611" : "\u2610"]]></textFieldExpression>
</textField>


Supplement to Olezt's answer, "DejaVu Sans" font, or "Segoe UI Symbol" works for ticked checkbox, including export to pdf through Jasper Studio

To make it works for JaserReport Server, need to Add the font to both Jasper Studio and Jasper Server.

  1. Get the ttf file of the font, either from Windows\font or from Internet.
  2. In Jasper Studio, Window->Preference->Jaspersoft Studio->Fonts
  3. Click Add
  4. Input the Family Name of the font (e.g. Segoe UI Symbol 1)
  5. In TrueType (.ttf), Browse the ttf get in step (1) above
  6. Tick "Embed this font in PDF document"
  7. Select "Identity-H (Unicode with horizontal writing)" in PDF Encoding.
  8. Click "Next" (Don't click Finish)
  9. Add "html", "rtf", "xhtml" Font Mapping. The Font Name should be that in step (4) above.
  10. Click Finish
  11. The new added font is shown in the "Preferences" window. Select it and click "Export" to get the jar. This is to put to Jasper Server
  12. Put the jar to "C:\Jaspersoft\jasperreports-server-cp-6.3.0\apache-tomcat\webapps\jasperserver\WEB-INF\lib" of your jasper server and restart server.
  13. To add checkbox, find the "html entity" first. e.g. ☑ for Ballotbox with check, and ☐ for unchecked. https://www.compart.com/en/unicode/U+2611
  14. Back to the Jaspersoft Studio, in the "Text Field" showing the checkbox, select the newly added font, and select "html" for Markup.
  15. Generate, test, deploy, and enjoy.

Ref: https://community.jaspersoft.com/jasperreports-library/issues/13056

Ref: https://community.jaspersoft.com/wiki/custom-font-font-extension#Publish_the_Font_to_the_Server

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜