Как нарисовать границу вокруг столбцов, нижнего колонтитула и секций деталей?

У меня есть требование иметь границу, которая будет инкапсулировать все детали + заголовок столбца в отчет, сделанный в JasperReports + iReport. Но если я попытаюсь нарисовать прямоугольник или кадр, который входит в заголовок столбцов, детали и колонтитул столбца, я получаю сообщение об ошибке, указывающее, что позиция элемента недействительна.

Я предполагаю, что одним из вариантов было бы использовать изображения (как и старые добрые HTML файлы без CSS...), но это будет PITA, поскольку, если переполнение поля или если кто-то изменит высоту или ширину раздела, изображение должно измениться...

Любые другие альтернативы?

Спасибо.

Ответ 1

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

<columnHeader>
    <band height="61" splitType="Stretch">
        <frame>
            <reportElement x="0" y="0" width="555" height="61"/>
            <box>
                <topPen lineWidth="2.0" lineStyle="Solid"/>
                <leftPen lineWidth="2.0" lineStyle="Solid"/>
                <rightPen lineWidth="2.0" lineStyle="Solid"/>
            </box>
        </frame>
    </band>
</columnHeader>
<detail>
    <band height="125" splitType="Stretch">
        <frame>
            <reportElement x="0" y="0" width="555" height="125"/>
            <box>
                <leftPen lineWidth="2.0" lineStyle="Solid"/>
                <rightPen lineWidth="2.0" lineStyle="Solid"/>
            </box>
        </frame>
    </band>
</detail>
<columnFooter>
    <band height="45" splitType="Stretch">
        <frame>
            <reportElement x="0" y="0" width="555" height="45"/>
            <box>
                <leftPen lineWidth="2.0" lineStyle="Solid"/>
                <bottomPen lineWidth="2.0" lineStyle="Solid"/>
                <rightPen lineWidth="2.0" lineStyle="Solid"/>
            </box>
        </frame>
    </band>
</columnFooter>

Результат должен выглядеть следующим образом: Screenshot from iReport

Ответ 2

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

Ответ 3

Использование фоновой полосы с рамкой или прямоугольником, по-видимому, лучше всего работает, хотя, если первая и последующие страницы имеют разные элементы заголовка, размер кадра/прямоугольника может быть немного сложным.

Один из способов заключается в том, чтобы добавить Frame/Rectangle в любые полосы заголовка, заголовка и нижнего колонтитула, который является непрозрачным/белым и отправляется обратно. Это закроет фоновое изображение.

Это означает, что он будет показан только для детализации, поэтому для рамки верхнего и нижнего колонтитула может понадобиться нижняя/верхняя граница в зависимости от того, что вы хотите.

(я обнаружил, что проблема с использованием кадра в разделе "Детали" с только боковыми границами не совсем работает, поскольку когда-то повторяющаяся полоса деталей не заполняет каждую страницу, поэтому пробелы остаются в границах по бокам)

Ответ 4

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