Я пытаюсь использовать BIRT 2.5.0 для создания pdf-файла. BIRT вызывается из pHp (это делается благодаря JavaBridge и серверу Tomcat).Включая динамические изображения в PDF с BIRT
И я просто пытаюсь создать флажок, проверенный при определенных условиях. Я немного посмотрел в Интернете и нашел 2 разных способа сделать это.
Первый способ играть с Visibility, если поле «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
NB: Во-первых, я хотел, чтобы мои изображения были встроены в документ (это то, что я использую в первом решении), но поскольку это не сработало, я использовал изображения, размещенные на http://my.server.com ...
Привет, Марк, спасибо за ваш ответ. Это неплохая идея. Я добавил строку '<свойство Name = "FontFamily"> Wingdings' моей части ... и мой код выглядит как что: если (dataSetRow [ "idclassebillet"] == 1) Строка .fromCharCode ('0xFD'); else String.fromCharCode ('0xFE'); Но это только печатает символ «ý» ... Любая идея? (nb: [link] (http://en.wikipedia.org/wiki/Checkbox) Я также пробовал другие символы вроде U + 2610, но ничего не печатал.) – PiroXXI
@PiroXXI: Эти три символа ' ¨', 'ý' и' þ' соответственно в «нормальных» шрифтах (Arial, Times и т. Д.), Но должны отображаться как пустой флажок, перекрестный флажок и отмеченный флажок соответственно в Wingdings.Кажется, что шрифт не отображается правильно; вы пробовали просмотреть его на своей собственной машине? –
Он отлично работает на моей машине (в окнах), но я не могу заставить его работать нормально на сервере linux. :/(Я установил шрифт, но это как BIRT, не найти его). Добавление и удаление символа ' Wingdings " 'имеет эффект, поскольку шрифт отличается после. Но он не похож на шрифт Windings, который у меня есть на моих окнах ... –
PiroXXI