Вопрос по java, jasper-reports, ireport – Jasper Reports: отображение изображений динамически в зависимости от значений поля

1

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

И.Е. С двумя изображениями: IMAGE1 и IMAGE2, связанных с Field_ONE и Field_TWO.

If Field_ONE is != null then i whould like to show IMAGE1 and the fields inside the image in the document;

If Field_TWO is != null and Field_ONE is equal to null then i want to show IMAGE2 in the place where previously showed IMAGE1

If Field_TWO is != null and Field_ONE != null then i want to show IMAGE1 and IMAGE2 side by side.

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

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

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

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

Field_Two only

Field one and two

Ваш Ответ

1   ответ
2

Layers (Static) Solution

Divide the problem into cases. For example, case 1 show image 1, case 2 show images 2 and 3, case 3 show image 4 etc... Create all the elements for case i. Add a new layer, Layer i. Go to Window > Layers if the Layers window is hidden. Select the elements added, right click and Send to layer. Choose layer i. Right click on the layer in the Layers window and update the Print When Expression. For example, $F{Field_ONE} != null Repeat. FYI, you can click on the eye on the layer (in the Layers window) to hide the applicable elements to hide the clutter. Done, each design you made for each case will only appear when the Layer's print when expression yields true.

Subreport (dynamic) Solution

Create a report, lets call it subreport. Set the width and height of the page to be the height and width of your image section for a given record. Set the all of the page margins to 0 Change the column of the report to the number of images you'd like to have in a single row. Change the print order to 'Horizontal' Add N parameters for the N field that needs to be associated with an image. Remove all the bands in the page except for the detail band. Write a dummy query that will return an image name depending on whether a given field is null or not. For example, select 'Ascent.jpg' as image from dual where $P{FIELD_1} is not null. You need to do this for each field and union all the select statements. In the detail section, add an Image element and set the value to be the path to your picture using the image field from the query above. For example, "C:/WINDOWS/Web/Wallpaper/"+$F{IMAGE}. Go to your original report and add the subreport to your detail section. Link the fields in the original report to the parameters, created in #2, in the subreport.

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

Sample Generated Report, using WinXP wallpapers as images

Тем не менее, я заметил, что если у вас есть куча полей, количество случаев будет довольно большим.
Что ж, для решения, которое я показал, важно, чтобы вы знали все случаи и применимые элементы (текстовые поля и изображения) при разработке отчета. Это потому, что вы можете добавить любое количество элементов к слоям. Однако если после разработки отчета может быть добавлено больше изображений для данного случая, сообщите мне об этом, и я предложу другое решение.
Я забыл сказать кое-что об изображениях: у меня могло быть больше чем одно изображение одного поля. Представьте, что у меня есть 3 объекта одного типа, тогда он будет показывать 3 изображения, одно за другим. Вот почему я хотел бы реализовать это как List в Java, если это возможно. Мне нужно добавлять изображения динамически, когда я создаю отчет с реальными данными. Спасибо R5498

Похожие вопросы