#java #reporting #jasper-reports
#java #создание отчетов #jasper-отчеты
Вопрос:
Новичок в JasperReports и пытается либо: (a) manually write a JRXML
либо (b) manually program a JasperDesign myself (not using a template)
. Насколько я понимаю, и XML, и объект Java представляют одну и ту же концепцию: пустую «оболочку» отчета без каких-либо данных в нем.
Я пытаюсь выяснить, какие компоненты JR будут соответствовать моим потребностям, и ссылка, образцы, а также множество поисковых запросов в Интернете не вернули ничего определенного. Большая часть документации JR кажется, по крайней мере новичку, написанной с точки зрения «предполагаемых знаний».
В чем разница между следующими «компонентами» (не совсем уверен, как их еще назвать) и в соответствующих вариантах использования:
- Текст
- Текстовое поле
- TextElement
- StaticText
Этот пример изображений здесь показывает, что большинство этих элементов используются, казалось бы, волей-неволей в не столь очевидном формате.
Суть моего вопроса заключается в том, что я хочу отобразить два типа текстовой информации; один я называю «полями» (не путать с полями JR), а другой я называю «текстовыми блоками», состоящими из заголовка и тела. Я бы хотел, чтобы эти поля / текстовые блоки отображались следующим образом:
«Поле»:
Name: John Smith
Age: 42
Summary: This is an example of a field
И «текстовый блок»:
Name:
John Smith
Age:
42
Summary:
This is an example of a text block. "Summary:" is the head, and this is the body.
Та же информация, просто представленная по-другому. Я считаю, что один / несколько из перечисленных выше компонентов JR — это те, которые мне нужно использовать, но, похоже, я не могу найти никакой документации, подтверждающей / отвергающей это.
У кого-нибудь есть какие-либо идеи по этому поводу? Заранее спасибо!
Ответ №1:
Вы правы в том, что .jrxml
и JasperDesign
объект аналогичны и представляют собой пустой дизайн отчета. Затем этот дизайн может быть скомпилирован в .jasper
файл или JasperReport
объект, который затем заполняется данными для создания фактического отчета.
Из четырех перечисленных вами «компонентов» только TextField
и StaticText
действительно являются компонентами отчета. Остальные просто содержат свойства родительского элемента.
StaticText
содержит текст, который никогда не меняется. Это задано в проекте, и все.TextField
Имеет выражение, которое выполняется при заполнении отчета. Это элементы, которые вы будете использовать для размещения данных в вашем отчете.Text
это тег, который содержит фактическое текстовое содержимоеStaticText
элемента. Это единственное место, где он появится.TextElement
объявляет свойства, которые специфичны для того, как отчет должен отображать текст. КаждыйTextField
илиStaticText
может включать этот тег. Свойства включают выравнивание текста, поворот, начертание, размер шрифта и т.д.
Чтобы решить вашу проблему, вам нужно будет использовать StaticText
компоненты для меток имени, возраста и сводки, поскольку они всегда будут одинаковыми; и TextField
компоненты для фактических данных отчета.
Как предлагали другие, я бы рекомендовал iReport. Я бы сделал большую часть дизайна, используя его, затем вручную внес бы изменения в JRXML (создаваемый им xml немного раздут). Конструктор скроется от вас Text
и TextElement
, и будет выглядеть так, как будто свойства устанавливаются для самих текстовых компонентов. Это не проблема, но если вы собираетесь изменять JRXML вручную, вы должны знать об этом, чтобы не добавлять атрибуты к неправильным тегам. Просмотр выходных данных iReport также является хорошим способом узнать допустимый JRXML, поскольку сообщения об ошибках, которые вы получаете для неправильного файла .jrxml, не всегда полезны.
Надеюсь, это поможет!
Ответ №2:
Если вы не хотите использовать iReport, вы можете попробовать создавать отчеты динамически с помощью DynamicJasper Java API или JasperReports Java API.
Мой вам совет: не пытайтесь изобретать велосипед. Попробуйте использовать iReport
designer, это действительно полезный инструмент для создания как простых, так и сложных отчетов.
Только один из вариантов использования iReport
: приложение JasperServer (готовое к использованию веб-приложение для развертывания, построения отчетов и экспорта данных в различные форматы) работает с jrxml
шаблонами.
iReport Ultimate Guide
и JasperReports Ultimate Guide
являются очень ценными книгами. Вы можете найти несколько руководств здесь.
Это фрагмент jrxml
шаблона, относящийся к вашему вопросу (я надеюсь). Он был написан с помощью iReport.
<detail>
<band height="60" splitType="Stretch">
<staticText>
<reportElement x="0" y="0" width="63" height="20"/>
<box leftPadding="10">
<topPen lineWidth="1.0"/>
<leftPen lineWidth="1.0"/>
</box>
<textElement/>
<text><![CDATA[Name:]]></text>
</staticText>
<staticText>
<reportElement x="0" y="20" width="63" height="20"/>
<box leftPadding="10">
<leftPen lineWidth="1.0"/>
</box>
<textElement/>
<text><![CDATA[Age:]]></text>
</staticText>
<staticText>
<reportElement x="0" y="40" width="63" height="20"/>
<box leftPadding="10">
<leftPen lineWidth="1.0"/>
<bottomPen lineWidth="1.0"/>
</box>
<textElement/>
<text><![CDATA[Summary:]]></text>
</staticText>
<textField>
<reportElement x="63" y="0" width="290" height="20"/>
<box leftPadding="10">
<topPen lineWidth="1.0"/>
<rightPen lineWidth="1.0"/>
</box>
<textElement/>
<textFieldExpression><![CDATA[$F{Name}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="63" y="20" width="290" height="20"/>
<box leftPadding="10">
<pen lineWidth="1.0"/>
<topPen lineWidth="0.0"/>
<leftPen lineWidth="0.0"/>
<bottomPen lineWidth="0.0"/>
<rightPen lineWidth="1.0"/>
</box>
<textElement/>
<textFieldExpression><![CDATA[$F{Age}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="63" y="40" width="290" height="20"/>
<box leftPadding="10">
<bottomPen lineWidth="1.0"/>
<rightPen lineWidth="1.0"/>
</box>
<textElement/>
<textFieldExpression><![CDATA[$F{Summary}]]></textFieldExpression>
</textField>
</band>
</detail>
Результатом будет:
Это занимает у меня всего 5 минут.
Комментарии:
1. Я поддерживаю это. Руководство JasperReports Ultimate неоценимо.