我正在尝试使用 BIRT 2.5.0 生成 pdf 文件。BIRT 是从 pHp 调用的(这要归功于 JavaBridge 和 Tomcat 服务器)。
我只是想创建一个复选框,在某些条件下进行检查。我在互联网上看了一点,发现了两种不同的方法。
第一种方法是如果字段“idclassebillet”(我在其上进行测试)的值为1,则使用可见性。我是这样做的:
<image id="9010">
    <list-property name="visibility">
        <structure>
            <property name="format">all</property>
            <expression name="valueExpr" type="javascript">row["classEq1"]</expression>
        </structure>
    </list-property>
    <list-property name="boundDataColumns">
        <structure>
            <property name="name">classEq1</property>
            <text-property name="displayName">classEq1</text-property>
            <expression name="expression" type="javascript">dataSetRow["idclassebillet"] == 1</expression>
            <property name="dataType">boolean</property>
        </structure>
    </list-property>
    <property name="source">embed</property>
    <property name="imageName">checkbox_unchecked.png</property>
</image>
但这不起作用。
所以我发现的第二个解决方案是使用一个简单的 URL。这个解决方案更方便,但也不起作用。这看起来像那样。
<image id="9018">
    <property name="source">url</property>
    <list-property name="boundDataColumns">
        <structure>
            <property name="name">classEq1</property>
                <text-property name="displayName">classEq1</text-property>
                <expression name="expression" type="javascript">dataSetRow["idclassebillet"]</expression>
            <property name="dataType">integer</property>
        </structure>
    </list-property>
    <expression name="uri" type="javascript">
        if(row["classEq1"] == 1)
            "http://my.server.com/checkbox_checked.png"+row["classEq1"];
        else
            "http://my.server.com/checkbox_unchecked.png"+row["classEq1"];
    </expression>
</image>
在这两种情况下,我都像这样声明字段“dataSetRow[“idfield”]”:
<data-sets>
    <oda-data-set extensionID="org.eclipse.birt.report.data.oda.jdbc.JdbcSelectDataSet" name="infoBordereau" id="178">
        <structure name="cachedMetaData">
            <list-property name="resultSet">
            ...
                <structure>
                    <property name="position">9</property>
                    <property name="name">idclassebillet</property>
                    <property name="dataType">integer</property>
                </structure>
            ...
        </structure>
        <property name="dataSource">GestionBillet</property>
        <list-property name="resultSet">
            ...
            <structure>
                <property name="position">8</property>
                <property name="name">idclassebillet</property>
                <property name="nativeName">idclassebillet</property>
                <property name="dataType">integer</property>
            </structure>
            ...
        </list-property>
    ....
    </oda-data-set>
</data-sets>
我检查了我是否可以访问“idclassebillet”的内容。如果我只是以这种方式打印它,它可以正常工作:
<data id="90060001">
    <property name="whiteSpace">nowrap</property>
    <property name="dataSet">infoBordereau</property>
    <list-property name="boundDataColumns">
        <structure>
            <property name="name">classEq1</property>
            <text-property name="displayName">classEq1</text-property>
            <expression name="expression" type="javascript">dataSetRow["idclassebillet"]</expression>
            <property name="dataType">integer</property>
        </structure>
    </list-property>
    <property name="resultSetColumn">classEq1</property>
</data>
无论我选择哪种解决方案来获取我的“动态”图像,我总是得到相同的图像,无论“dataSetRow [”idclassebillet“]”的值是什么。我没有问题访问和打印图像。问题更多的是“测试”“idclassebillet”字段的值(即我如何访问该字段?)。
我希望你明白我想要做什么。如果您有更好的解决方案(如果可能,还有工作代码示例),请不要犹豫分享^^ :)
非常感谢,
拉斐尔·波伊特文
注意:起初,我希望将我的图像嵌入到文档中(这是我在第一个解决方案中使用的),但由于这不起作用,我使用了托管在http://my.server.com上的图像。 ..