2012-04-04 165 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