2012-06-13 4 views
1

Я использую отчеты Jasper и iReport для создания отчетов моего приложения. Мне нужно показывать изображения в моем отчете в зависимости от запроса в моей базе данных. Изображения являются планами и имеют другие поля внутри представляющих измерений и т. Д.Отчеты Jasper: отображение изображений динамически в зависимости от значений поля.

I.E. С двумя изображениями: IMAGE1 и IMAGE2 связаны с Field_ONE и Field_TWO.

  • Если Field_ONE is! = Null, то мне бы хотелось показать IMAGE1 и поля внутри изображения в документе;

  • Если Field_TWO есть! = Утратившим Field_ONE равен нулю, то я хочу, чтобы показать IMAGE2 в том месте, где ранее показал IMAGE1

  • Если Field_TWO есть! = Утратившим Field_ONE! = NULL, то я хочу покажите IMAGE1 и IMAGE2 бок о бок.

Обратите внимание, что у меня могло бы быть 5 или 6 изображений, поэтому было бы очень сложно охватить все возможности, не оставляя пустых промежутков между ними только с помощью тега.

Вкратце: мне нужно что-то вроде макета в Android, где я могу динамически добавлять планы в зависимости от полей и генерировать изображения и связанные с ними поля в том порядке, в котором я добавил планы.

Надеюсь, вы можете помочь, спасибо!

Примечание: Я мог бы иметь более одного изображения одного и того же типа, в зависимости от результата отчета, так что это почти невозможно покрыть ее слоями

Field_Two only

Field one and two

ответ

2

Слои (Статическое) Решение

  1. Разделите проблему на корпусах. Так, например, случай 1 показать изображение 1, корпус 2 показаны изображения, 2 и 3, корпус 3 показать изображение 4 и т.д. ...
  2. Для я до п (для п случаев)
    • Создать все элементы для случая я ,
    • Добавьте новый слой, слой i. Перейдите в Window> Layers, если окно Layers скрыто.
    • Выберите добавленные элементы, щелкните правой кнопкой мыши и введите Send to layer. Выберите слой i.
    • Щелкните правой кнопкой мыши по слою в окне «Слои» и обновите Print When Expression. Например, $F{Field_ONE} != null
    • Повторите. FYI, вы можете щелкнуть по глазу на слое (в окне «Слои»), чтобы скрыть соответствующие элементы, чтобы скрыть беспорядок.
  3. Выполнено, каждый дизайн, созданный для каждого случая, будет отображаться только тогда, когда печать слоя будет иметь значение true.

подотчета (динамический) Решение

  1. Создание отчета, позволяет назвать его SubReport.
    • Установите ширину и высоту страницы как высоту и ширину участка изображения для данной записи.
    • Установите для всех полей страницы значение 0
    • Измените столбец отчета на количество изображений, которое вы хотели бы иметь в одной строке.
    • Изменить порядок печати добавить параметры N «горизонтальным»
  2. для поля N, который должен быть связан с изображением.
  3. Удалите все полосы на странице, за исключением диапазона деталей.
  4. Напишите фиктивный запрос, который вернет имя изображения в зависимости от того, является ли данное поле нулевым или нет. Например, select 'Ascent.jpg' as image from dual where $P{FIELD_1} is not null. Вы должны сделать это для каждого поля и union all операторы select.
  5. В разделе подробностей добавьте элемент изображения и установите для него значение, соответствующее пути к вашему изображению, используя поле image из указанного выше запроса. Например, "C:/WINDOWS/Web/Wallpaper/"+$F{IMAGE}.
  6. Перейдите к исходному отчету и добавьте вложенный отчет в свой раздел сведений.
    • Связать поля в исходном отчете с параметрами, созданными в # 2, в подзаголовке.

Я не хочу, чтобы отправить это решение, пока я не проверял. Я могу опубликовать свой образец, который имеет много строк, если есть что-то непонятное. Причина, по которой вам потребуется подчиненный отчет, состоит в том, что ваш основной отчет имеет 1 столбец и заполняется вертикально, но вам нужно, чтобы изображения заполнялись горизонтально через несколько столбцов. Для каждого поля, которое не является нулевым, запрос подрепортажа возвращает запись в заказе инструкции. Затем запись будет заполнена через столбцы.

Sample Generated Report, using WinXP wallpapers as images

+0

Я забыл сказать что-то об изображениях: Я мог бы иметь более одного изображения одного и того же поля. Представьте, что у меня есть 3 объекта одного типа, тогда он будет показывать 3 изображения друг другу. Вот почему я хотел бы реализовать это, как это возможно, в списке на Java. Мне нужно добавить изображения динамически, когда я создаю отчет с реальными данными. Спасибо – R5498

+0

Ну, для решения, которое я показал, важно то, что вы знаете все случаи и применимые элементы (текстовые поля и изображения), когда вы разрабатываете отчет. Это связано с тем, что вы можете добавить любое количество элементов в слои. Если, однако, после создания отчета может быть добавлено больше изображений для данного случая, сообщите мне, и я предложу другое решение. – user845279

+0

Однако я заметил, что если у вас есть куча полей, количество дел будет довольно большим. – user845279

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