我想使用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