用图片替换一些文本:如何在句子中绘制图像而不是单词

时间:2013-12-25 09:26:56

标签: jasper-reports

Datasoure

我使用了 csv 数据源( holidays.csv ):

name,date
New Year's Day,January 1st
Christmas Day,December 25th
Valentine's Day,February 14th

报告的设计

我已经放置了两个 textFields 来显示假期的名字和假期的日期。我已经在 textField 下放置 image 元素,用假日名称显示图片。

借助 printWhenExpression ,我会显示假期的名字或图片。

iReport 中的报告设计:

enter image description here

报告的模板

jrxml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="holidays" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="e0310045-780b-4af3-aa7b-ed7f5da1985f">
    <queryString>
        <![CDATA[]]>
    </queryString>
    <field name="name" class="java.lang.String"/>
    <field name="date" class="java.lang.String"/>
    <detail>
        <band height="66" splitType="Stretch">
            <image scaleImage="RealHeight">
                <reportElement uuid="e7738ed8-673e-49e9-8c14-060378cb6a79" x="0" y="0" width="263" height="66">
                    <printWhenExpression><![CDATA[$F{name}.equals("Christmas Day")]]></printWhenExpression>
                </reportElement>
                <imageExpression><![CDATA["mc.jpg"]]></imageExpression>
            </image>
            <textField>
                <reportElement uuid="167148f8-ad51-4c87-9faa-27bf18f2160e" x="0" y="0" width="263" height="66" forecolor="#FF6666">
                    <printWhenExpression><![CDATA[!$F{name}.equals("Christmas Day")]]></printWhenExpression>
                </reportElement>
                <textElement textAlignment="Center" verticalAlignment="Middle">
                    <font fontName="Forte" size="24" isItalic="true"/>
                </textElement>
                <textFieldExpression><![CDATA[$F{name}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement uuid="ad7c75b4-975b-478e-8a44-090a63c52896" x="263" y="0" width="263" height="66"/>
                <textElement textAlignment="Center" verticalAlignment="Middle">
                    <font fontName="Arial" size="24" isItalic="true"/>
                </textElement>
                <textFieldExpression><![CDATA[$F{date}]]></textFieldExpression>
            </textField>
        </band>
    </detail>
</jasperReport>

生成的输出

生成的报告将(通过 iReport 中的预览): enter image description here


我能在报告中做些什么来得到这样的结果(数据源也改为这是圣诞节):

enter image description here

1 个答案:

答案 0 :(得分:1)

第一个解决方案:textField元素后面的图像

Datasoure

我使用了 csv 数据源( log.csv ):

level,message,image
DEBUG,Some debug message. We are starting,
INFO,Some info. Parameter1 value: 20,info.jpg
WARN,Some warning message. Something going wrong: value is not set,warning.jpg
ERROR,Some error message. The error occurs: file is corrupted,
FATAL,Some fatal message. The disk is full. OutOfMemoryError take place,

报告的设计

我已经放置了两个 textFields 来显示消息级别和消息。我已经将 image 元素放在 textField 下显示图像,并带有消息级别的图标。

printWhenExpression 的帮助下,我显示了消息级别的图标或文本。如果未在数据源中定义图标(字段图像)或文本(字段级别),我将显示该图标。

imageExpression 是:

<imageExpression><![CDATA["d:\\path_to_icons\\" + $F{image}]]></imageExpression>

我们可以设置图像的完整路径(路径加上数据源的文件名)。

iReport 中的报告设计:

enter image description here

报告的模板

jrxml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="log_sample" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="a3c5b928-7218-48e8-9de5-7c9f328d3420">
    <import value="com.google.common.base.Strings"/>
    <queryString>
        <![CDATA[]]>
    </queryString>
    <field name="level" class="java.lang.String"/>
    <field name="message" class="java.lang.String"/>
    <field name="image" class="java.lang.String"/>
    <detail>
        <band height="20" splitType="Stretch">
            <image scaleImage="RetainShape">
                <reportElement x="61" y="0" width="61" height="20" uuid="cefb0c61-75f7-4b8c-a92c-72bc728ddb0b">
                    <printWhenExpression><![CDATA[!Strings.isNullOrEmpty($F{image})]]></printWhenExpression>
                </reportElement>
                <imageExpression><![CDATA["d:\\path_to_icons\\" + $F{image}]]></imageExpression>
            </image>
            <staticText>
                <reportElement x="0" y="0" width="61" height="20" uuid="2fb8ab6c-9253-4a8d-80ac-08a7c963f13e"/>
                <textElement markup="none"/>
                <text><![CDATA[The level is:]]></text>
            </staticText>
            <textField>
                <reportElement x="61" y="0" width="61" height="20" uuid="9795b7ef-a38c-43d3-8867-f5cd85b602cc">
                    <printWhenExpression><![CDATA[Strings.isNullOrEmpty($F{image})]]></printWhenExpression>
                </reportElement>
                <textFieldExpression><![CDATA[$F{level}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="122" y="0" width="433" height="20" uuid="841e0cfa-1ca5-4e6b-8e12-d5f2ff65a2e2"/>
                <textElement markup="styled"/>
                <textFieldExpression><![CDATA["The message is: <i>" + $F{message} + "</i>"]]></textFieldExpression>
            </textField>
        </band>
    </detail>
</jasperReport>

生成的输出

生成的报告将(通过 iReport 预览):

enter image description here

第二种解决方案:使用Html元素

Datasoure

我使用了 csv 数据源( text2replace.csv ):

text
This is a row with IMAGE
This is an another row IMAGE at the middle of the sentence
Another row. Just a text

报告的设计

我使用了 Html 元素。

hc:htmlContentExpression 属性的帮助下,我设置了html代码:我用html标签<img>替换了字符串“IMAGE”的出现次数绘制图像。

hc:htmlContentExpression 是:

<hc:htmlContentExpression><![CDATA["<div style='font-weight: bold; font-style: italic; height: 20px;'>" + $F{text}.replaceAll("IMAGE", "<img style='width: 20px; height: 20px;' src='file:///e:/path_to_file/image.jpg' alt='image'/>") + "</div>"]]></hc:htmlContentExpression>

iReport 中的报告设计:

enter image description here

报告的模板

jrxml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="replace_text" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="5e2b75e0-8b53-41b0-b90a-f36d1022c233">
    <queryString>
        <![CDATA[]]>
    </queryString>
    <field name="text" class="java.lang.String"/>
    <detail>
        <band height="20" splitType="Stretch">
            <componentElement>
                <reportElement x="0" y="0" width="555" height="20" uuid="06badd57-cfad-4909-b390-5a0747f4a297"/>
                <hc:html xmlns:hc="http://jasperreports.sourceforge.net/htmlcomponent" xsi:schemaLocation="http://jasperreports.sourceforge.net/htmlcomponent http://jasperreports.sourceforge.net/xsd/htmlcomponent.xsd" scaleType="RetainShape" horizontalAlign="Left" verticalAlign="Middle">
                    <hc:htmlContentExpression><![CDATA["<div style='font-weight: bold; font-style: italic; height: 20px;'>" + $F{text}.replaceAll("IMAGE", "<img style='width: 20px; height: 20px;' src='file:///e:/path_to_file/image.jpg' alt='image'/>") + "</div>"]]></hc:htmlContentExpression>
                </hc:html>
            </componentElement>
        </band>
    </detail>
</jasperReport>

生成的输出

生成的报告将(通过 iReport 预览):

enter image description here


<强> 备注