我想使用BIRT 2.5.0生成PDF文件生成PDF的动态图像。 BIRT是从pHp调用的(这要归功于JavaBridge和Tomcat服务器)。包括与BIRT
而且我只是想创建一个复选框,在一定条件下进行检查。 我在网上看了一下,发现了两种不同的方式来做到这一点。
第一种方式是与能见度玩如果字段“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”字段的值(即,如何访问此字段?)。
我希望你明白我要做的。如果你有一个更好的解决方案(如果可能的工作代码示例),请不要犹豫,分享^^ :)
非常感谢,
拉斐尔POITTEVIN
注意:首先,我如果您的目标是要显示一个未经检查的文件(这是我在第一个解决方案中使用的内容),但由于此操作无效,我使用了托管在http://my.server.com上的图像...
嗨马克,谢谢你的回答。这是一个不错的主意。我增加了行'<属性名= “fontFamily中”>宋体'到我部分...和我的代码看起来有点像: 如果(dataSetRow [ “idclassebillet”] == 1) 字符串.fromCharCode( '0xFD'); 别的 使用String.fromCharCode( '0xFE的'); 但这只是打印了“Y”字...... 任何想法? (nb:[link](http://en.wikipedia.org/wiki/Checkbox)我也尝试过其他字符,例如U + 2610,但它没有打印任何内容。) – PiroXXI 2012-04-04 09:32:53
@PiroXXI:这三个字符是' 'A','Times'等字体中分别显示为'','ý'和'þ',但在Wingdings中应分别显示为空白复选框,交叉复选框和复选框。听起来好像字体没有正确显示;你有没有尝试在自己的机器上预览它? – 2012-04-04 10:35:07
它在我自己的机器(一个Windows)上工作得很好,但我无法在Linux服务器上正常工作。 :/(我安装了字体,但它就像BIRT没有找到它)。 添加并删除' Wingdings “'有一个效果,因为后面的字体不一样,但它看起来不像我的窗户上的Windings字体... –
PiroXXI
2012-04-05 08:14:57