2012-04-04 120 views
2

我想使用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上的图像...

回答

1

如果您的目标是显示未选中/ checked复选框,你有没有考虑使用字符为0xA8和0xFD或0xFE的Wingdings字体?

+0

嗨马克,谢谢你的回答。这是一个不错的主意。我增加了行'<属性名= “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

+0

@PiroXXI:这三个字符是' 'A','Times'等字体中分别显示为'','ý'和'þ',但在Wingdings中应分别显示为空白复选框,交叉复选框和复选框。听起来好像字体没有正确显示;你有没有尝试在自己的机器上预览它? – 2012-04-04 10:35:07

+0

它在我自己的机器(一个Windows)上工作得很好,但我无法在Linux服务器上正常工作。 :/(我安装了字体,但它就像BIRT没有找到它)。 添加并删除' Wingdings“'有一个效果,因为后面的字体不一样,但它看起来不像我的窗户上的Windings字体... – PiroXXI 2012-04-05 08:14:57