Включение динамических изображений в PDF с BIRT
Я пытаюсь использовать BIRT 2.5.0 для создания PDF-файла. BIRT вызывается из pHp (это делается благодаря JavaBridge и серверу Tomcat).
И я просто пытаюсь создать флажок, проверенный при определенных условиях. Я посмотрел немного в Интернете и нашел 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" (т.е. как я могу получить доступ к этому полю?).
Я надеюсь, что вы понимаете, что я пытаюсь сделать. Если у вас есть лучшее решение (и, если возможно, пример рабочего кода), не стесняйтесь поделиться ^^:)
Большое спасибо,
Рафаэль ПОИТТЕВИН
NB. Сначала я хотел, чтобы мои изображения были встроены в документ (это то, что я использую в первом решении), но так как это не сработало, я использовал изображения, размещенные на http://my.server.com/...
1 ответ
Если ваша цель состоит в том, чтобы отобразить не отмеченный / отмеченный флажок, рассматривали ли вы вопрос об использовании шрифта Wingdings с символами 0xA8 и 0xFD или 0xFE?