2012-04-04 3 views
2

Я пытаюсь использовать 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 ...

ответ

1

Если ваша цель - отобразить непроверенную/checked, вы рассмотрели использование шрифта Wingdings с символами 0xA8 и 0xFD или 0xFE?

+0

Привет, Марк, спасибо за ваш ответ. Это неплохая идея. Я добавил строку '<свойство Name = "FontFamily"> Wingdings' моей части ... и мой код выглядит как что: если (dataSetRow [ "idclassebillet"] == 1) Строка .fromCharCode ('0xFD'); else String.fromCharCode ('0xFE'); Но это только печатает символ «ý» ... Любая идея? (nb: [link] (http://en.wikipedia.org/wiki/Checkbox) Я также пробовал другие символы вроде U + 2610, но ничего не печатал.) – PiroXXI

+0

@PiroXXI: Эти три символа ' ¨', 'ý' и' þ' соответственно в «нормальных» шрифтах (Arial, Times и т. Д.), Но должны отображаться как пустой флажок, перекрестный флажок и отмеченный флажок соответственно в Wingdings.Кажется, что шрифт не отображается правильно; вы пробовали просмотреть его на своей собственной машине? –

+0

Он отлично работает на моей машине (в окнах), но я не могу заставить его работать нормально на сервере linux. :/(Я установил шрифт, но это как BIRT, не найти его). Добавление и удаление символа ' Wingdings" 'имеет эффект, поскольку шрифт отличается после. Но он не похож на шрифт Windings, который у меня есть на моих окнах ... – PiroXXI

 Смежные вопросы

  • Нет связанных вопросов^_^