Для получения данных, по которым будет строиться отчет, необходимо создать SQLзапрос.
Далее рассмотрим создание запроса и заполнение формы отчета.
Описание инструмента |
Нажимаем пиктограмму . Пиктограмма расположена на вкладке Design(см. рисунок 2.3.5). Получаем диалог для создания запроса (DatasetandQueryDialog). (Рис. 2.4.1.1).
Рис. 2.4.1.1. Окно для создания запроса.
Сначала определяем, какая информация будет попадать в отчет. Для этого создаем запрос:
Select type, subject, complect, id from f_dp_rkkbase. |
С помощью этого запроса выбираем поля type, subject, complect, id изт аблицы f_dp_rkkbase.
Нажимаем кнопку ReadFields. В нижней части окна увидим отобранные поля. С помощью кнопок Up и Down можно менять порядок полей.
Таблица f_dp_rkkbase содержит следующие поля:
Рис. 2.4.1.2. Запрос и поля, отобранные с помощью запроса.
Рис. 2.4.1.3. Поля, отобранные с помощью запроса.
Если на вкладке DataPreview (рис2.4.1.3) , нажать на кнопку RefreshPreviewData, то можно увидеть документы, которые будут попадать в отчет по запросу. (Рис. 2.4.1.4)
Рис 2.4.1.4. Документы, отобранные с помощью запроса.
Меняем порядок полей с помощь кнопок UP и DOWN
Рис. 2.4.1.5. Изменённый порядок полей.
Можно выбрать поля, по которым будет производиться сортировка информации в отчете. В данном примере показано, как выбрать сортировку по полю id. Для этого на вкладке Outlineвыбираем SortFields. (рис. 2.4.2.1)
Появляется диалог NewSortFieldWizard, где выбираем поле idи нажимаем кнопку Finish(рис. 3_2).
Рис. 2.4.2.1. Определение полей для сортировки.
После того, как мы выбрали сортировку по полю id, предварительный просмотр будет выглядеть так, как показано на рис. 2.4.2.2.
Рис. 2.4.2.2.Вид информации после сортировки
Рис. 2.4.3.1.1. Вкладка "Properties/Appearance" (Свойства/Внешний вид) текстового поля
Поле - это выражение (содержимое поля) и параметры поля. При выделении текстового поля появляется вкладка Properties (которая по умолчанию находится в правом нижнем углу интерфейса Jaspersoft Studio). В свою очередь на ней есть несколько вкладок:
Категория \ Свойство | Выпадающее меню | Описание |
Location (Position Type – определяет то, как себя будет вести себя поле в случае расширения Группы вертикально) | ||
x,y | Kоординаты расположения верхнего левого угла в группе в пикселях | |
Position Type | Float | Обозначает, что поле будет «плавающим», то есть оно будет сдвигаться относительно других элементов |
Fix Relative To Top | Обозначает, что верхняя граница поля будет прикреплена к верхней границе группы | |
Fix Relative To Bottom | Обозначает, что нижняя граница поля будет прикреплена к нижней границе группы | |
Size (StretchType–тип растяжения поля вертикально) | ||
w, h | w,h – определяет размер поля в пикселях (width, height). | |
Stretch Type | No Stretch | Не растягивать. Используется в случае, если текстовое поле должно оставаться оригинального размера. |
Relative To Tallest Object | Растягивается относительно самого высокого объекта. Используется в большинстве случаев, подстраиваясь относительно своих соседей | |
Relative To Band Height | Растягивается относительно высоты группы. Используется в случае, если размер объектов должен занимать определенный % высоты группы. | |
Color | ||
Forecolor | Диалог для выбора цвета | Задает цвет текста |
Backcolor | Диалог для выбора цвета | Задает цвет ячейки (не важен, если установлена галка Transparent) |
Transparent | Ячейка прозрачная, backcolor не используется | |
Style and Print Details (задает поведение текстового поля относительно стиля и настроек.) | ||
Key | Нет опыта использования | |
Style | Список стилей | Стили можно создать в Outline |
Print Repeated Values | Не печатает, если значения этого поля повторяются (например если полю сказано печатать список значений и некоторые в них повторяются) | |
Remove Line When Blank | Схлопывает неиспользуемое собой пространство, если в поле ничего не печатается и в той же горизонтальной плоскости нет других печатающихся полей | |
Print in First Whole Band | В случае, если элемент будет разбит на 2 части новой страницей, он не разбивается и целиком печатается на новой странице. В некоторых случаях используется, если имеются проблемы с переносом полей. | |
Print When (определяются условия печати элемента) | ||
Detail Overflows | Элемент будет печататься, если он разбивается новой страницей | |
Group Changes | Если группа изменилась, тогда печатать. | |
Print when Expression | java операнд, возвращающий Boolean. Если True – печатаем, False – не печатаем. |
Для справки:
Рис. 2.4.3.1.2. Вкладка "Properties/Borders" (Свойства/Границы) текстового поля
Padding (отступы) – определяет расстояние текста в пикселях от границ текстового поля.
Borders (границы) – определяет цвет, тип и толщину границы текстового поля.
Можно выбрать границы в левой части и модифицировать их отдельно справа.
Рис. 2.4.3.1.3. Вкладка "Properties/Text Field" (Свойства/Текстовое поле) текстового поля
Категория \ Свойство | Выпадающее меню | Описание |
Expression | Выражение для текстового поля. | |
Evaluation Time | Now | Определяет в какое время будет вычислено значение выражения. Например, если в заголовке есть счетчик количества строк отчета, например «Количество документов», то будет значение 0. |
Report | Значение вычисляется после вывода всех строк данного отчета, то есть будет выведено количество документов по окончанию построения отчета. | |
Page | Значение вычисляется – по окончанию данной страницы | |
Blank When NULL |
| Должно выводиться пустое текстовое поле, если в нем содержится null. Но по каким-то причинам не работает как ожидается. Приходится использовать обработку внутри Expression, например таким образом: |
Stretch With Overflow |
| Очень важное значение. Определяет, будет ли поле расширяться вертикально, если текст не умещается в заданных по умолчанию размерах. |
Pattern | Шаблон для форматирования содержимого поля
| Определяется форматирование возвращаемого значения. На практике обычно используется форматирование всех значений в поле Expression. |
Pattern Expression |
| Как и Pattern, только позволяет задать строку expression с помощью Java выражения, применив тернарные операторы и т.д. На практике редко используется. |
Text Alignment |
| Горизонтальная и вертикальная ориентация текста. |
Rotation |
| Поворот текста. Удобно для создания узких колонок с сохранением описания. Обычно выбирается снизу вверх, если это необходимо. |
Font | ||
Задается тип шрифта, размер, полужирный, курсив, подчеркнутый, перечеркнутый и т.д. | ||
Markup | none | Язык разметки не выбирается. Используется наиболее часто. |
styled | Styled требует создания пользовательского util.MarkupProcessorFactory (более подробно в официальной документации) | |
html | Используются html теги форматирования. | |
rtf | Используются rtf теги форматирования. | |
Paragraph | ||
Line Spacing | Выбирается количество интервалов между строками текста в параграфе. По умолчанию 1. | |
Line Spacing Size | Размер интервала между строками текста внутри параграфа | |
First Line Indent | Табуляция отступа первой строки параграфа | |
Left Indent | Отступ слева. | |
Right Indent | Отступ справа. | |
Spacing Before | Расстояние до первой строки параграфа сверху | |
SpacingAfter | Расстояние после последней строки параграфа снизу | |
Tab Stop Width | Максимальная ширина табуляции |
Рис. 2.4.3.1.4. Вкладка "Properties/Inheritance " (Свойства/Наследование) текстового поля
Рис. 2.4.3.1.5. Вкладка "Properties/Hyperlink " (Свойства/Гиперссылки) текстового поля
Структура меню меняется в зависимости от выбранного Типа Ссылки (LinkType). Ссылка (Reference) открывает новое поле HyperlinkReferenceExpression, которое может содержать java операнд. Можно также вписать жесткую ссылку.
HyperlinkWhenExpression – операнд, ожидается Boolean. Если true – тогда сделать текстовое поле ссылкой. Если false – текстовое поле не превращается в ссылку.
HyperlinkTooltipExpression–операнд возвращающий текст. Этот текст выводится при наведении на ссылку.
Рис. 2.4.3.1.6. Вкладка "Properties/Advanced " (Свойства/Дополнительно) текстового поля
Существует особенность формирования отчетов в формате PDF и содержащих кириллические символы. Для корректного отображения текста на русском языке необходимо в свойствах полей отчета указать следующие параметры
Статический текстовый элемент используется, чтобы показать не динамический текст в отчетах. Единственный параметр, который отличает этот элемент от универсального текстового элемента - это свойство LabelStatic Text вместоText Field, в котором указывается текст для просмотра: это обычный текст, а не выражение.
Как было сказано выше, отчет состоит из секций. Для данного примера мы удалим некоторые секции. Это можно сделать следующим образом:
Щелкаем мышкой по секции, которую необходимо удалить. Слева появляется выделение секции. При нажатии на правую клавишу, появляется меню. Нажимаем Delete. Удаляем все секции, которые нам не нужны для данного примера.
Рис.2.4.3.2.1. Удаление ненужных секций.
Оставляем секции Title, Column Header и Detail1.
Для вывода информации в отчет в данном примере используются два основных компонента: Text Field (динамическое поле)и Static Text (статический текст). Динамическое поле используется для вывода значений параметров или полей источника данных, а статическое - для вывода постоянного текста.
Используем Static Text для формирования заголовка отчета. Для этого на вкладке Palette выбираем Static Text и мышкой перетаскиваем в секцию отчета Title (Рис. 2.4.3.2.2)
Рис. 2.4.3.2.2. Элемент Static Textдля создания заголовка отчета.
Двойным щелчком мышки открываем поле и вписываем текст «Заголовок простого отчета» (Рис. 2.4.3.2.3)
Рис. 2.4.3.2.3. Заполнение заголовка отчета.
Далее открываем вкладку Properties для данного текста (Рис. 2.4.3.2.4). Выбираем Appearance и устанавливаем координаты области размещения текста в секции Title.
Рис. 2.4.3.2.4. Форматирование заголовка отчета.
В секции Location Position Type указываем координатыxи yобласти, где будет размещаться текстпо отношению к верхней границе секции Title (Fix Relative To Top).
В секции Size определяем размер области размещения: W- ширина области, h- высота области. Единица измерения - пиксель (px). Размер области — фиксированный: Stretch Type -No Stretch .
Для форматирования текста открываем секцию label Static Text (Рис. 2.4.3.2.5)
Рис. 2.4.3.2.5. Форматирование текста.
Выбираем шрифт текста, выравнивание и т.д.
Далее необходимо заполнить секции Column Header и Detail1. Это можно сделать разными способами. Сначала разместим поле idна форме отчета в секции Detail1 следующим образом:
Рис. 2.4.3.2.6. Текстовое поле в секции Detail 1.
Двойным щелчком мышки открываем Text Field. В открывшемся диалоге в Expression Editorвместо текста помещаем (двойным щелчком мыши) поле id - $F{id}.$F – обозначает поле.
Рис. 2.4.3.2.7. Размещение поля id .
Также, как и для статического текста определяем область размещения поля на форме отчета (Рис. 2.4.3.2.8).
Рис. 2.4.3.2.8. Размещение поля на шаблоне отчета.
Затем выбираем Text Field (для статического текста выбирали Static Text) и форматируем текст (Рис. 2.4.3.2.9 )
Рис. Рис. 2.4.3.2.9. Форматирование текста в текстовом поле.
При таком способе заполнения формы заголовок столбца необходимо заполнять дополнительно. Это можно сделать путем создания статического текста в секции Column Header.
Рассмотрим ещё один способ заполнения формы. Создадим столбец с заголовком «БД» и содержащим в секции Detail1 поле «complect». Для этого на вкладке «Outline» выбираем в секции Fieldsполе complectи перетаскиваем его в секцию Detail1 (Рис. 2.4.3.2.10)
Рис. 2.4.3.2.10. Перетаскивание поля с закладки Outline на шаблон.
Далее форматируем заголовок столбца (Рис. 2.4.3.2.11) и его содержимое (Рис. 2.4.3.2.12).
Рис. 2.4.3.2.11. Форматирование заголовка столбца.
Рис. 2.4.3.2.12. Форматирование текста столбца.
Заполняем таким же образом столбцы «Тип документа» и «Заголовок» (Рис. 2.4.3.2.13).
Рис. 2.4.3.2.13. Шаблон отчета (без заполнения границ).
Выбираем вкладку Preview и смотрим сформированный отчет (Рис. 2.4.3.2.14).
Рис. 2.4.3.2.14. Сформированный отчёт
Чтобы создать границы строк и столбцов, необходимо создать границы ячеек. Для этого выделяем нужную ячейку и в свойствах ячейки (Properties) выбираем « Borders» и настраиваем границы (Рис. 2.4.3.2.15).
Рис. 2.4.3.2.15. Настройка границ ячеек.
Настраиваем границы для всех ячеек (Рис. 2.4.3.2.16).
Рис. 2.4.3.2.16. Настроены границы всех ячеек.
На вкладке «Preview» смотрим результат (Рис. 2.4.3.2.17).
Рис. 2.4.3.2.17. Отчет с настроенными границами ячеек.
На вкладке Sourceможно увидеть код XMLотчета.
Для отчета в этом примере он будет выглядеть так, как показано ниже.
<?xml version="1.0" encoding="UTF-8"?> <!-- Created with Jaspersoft Studio version 6.0.4.final using JasperReports Library version 6.0.4 --> <!-- 2015-08-09T07:26:52 --> <jasperReportxmlns="http://jasperreports.sourceforge.net/jasperreports"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd"name="Example1"pageWidth="595"pageHeight="842"columnWidth="555"leftMargin="20"rightMargin="20"topMargin="20"bottomMargin="20"uuid="4c68dd92-6073-4492-a024-c0af5108344f"> <propertyname="com.jaspersoft.studio.data.defaultdataadapter"value=" Cm Sochi JDBC on localhost"/> <queryStringlanguage="SQL"> <![CDATA[Select type, subject, complect, id from f_dp_rkkbase]]> </queryString> <fieldname="id"class="java.lang.Long"/> <fieldname="type"class="java.lang.String"/> <fieldname="subject"class="java.lang.String"/> <fieldname="complect"class="java.lang.String"/> <sortFieldname="id"/> <background> <bandsplitType="Stretch"/> </background> <title> <bandheight="49"splitType="Stretch"> <textField> <reportElementx="117"y="5"width="300"height="40"uuid="db72abba-b8f3-4702-88fa-9353e41e723d"> <propertyname="local_mesure_unitheight"value="pixel"/> <propertyname="com.jaspersoft.studio.unit.height"value="px"/> <propertyname="local_mesure_unitwidth"value="pixel"/> <propertyname="com.jaspersoft.studio.unit.width"value="px"/> </reportElement> <textElementtextAlignment="Center"verticalAlignment="Middle"> <fontfontName="Times New Roman"size="14"isBold="true"/> </textElement> <textFieldExpression><![CDATA["Заголовок простого отчета"]]></textFieldExpression> </textField> </band> </title> <columnHeader> <bandheight="42"splitType="Stretch"> <staticText> <reportElementx="60"y="0"width="110"height="40"uuid="fd40d18b-aaac-4c07-a301-67494fe4bab3"/> <boxpadding="3"topPadding="1"leftPadding="1"bottomPadding="1"rightPadding="1"> <topPenlineWidth="0.6"/> <leftPenlineWidth="0.6"/> <bottomPenlineWidth="0.6"/> <rightPenlineWidth="0.6"/> </box> <textElementtextAlignment="Center"verticalAlignment="Middle"/> <text><![CDATA[БД]]></text> </staticText> <staticText> <reportElementx="170"y="0"width="146"height="40"uuid="21ca3a0d-6c34-41f6-b353-c9dba5b315cc"/> <boxpadding="3"> <topPenlineWidth="0.6"/> <leftPenlineWidth="0.6"/> <bottomPenlineWidth="0.6"/> <rightPenlineWidth="0.6"/> </box> <textElementtextAlignment="Center"verticalAlignment="Middle"> <fontfontName="Times New Roman"size="12"/> </textElement> <text><![CDATA[Тип документа]]></text> </staticText> <staticText> <reportElementx="316"y="0"width="234"height="40"uuid="d562e6a7-bac9-4a1f-b6dc-4b6aeacaef5b"/> <box> <topPenlineWidth="0.6"/> <leftPenlineWidth="0.6"/> <bottomPenlineWidth="0.6"/> <rightPenlineWidth="0.6"/> </box> <textElementtextAlignment="Center"verticalAlignment="Middle"> <fontfontName="Times New Roman"size="12"/> </textElement> <text><![CDATA[Заголовок]]></text> </staticText> <staticText> <reportElementx="20"y="0"width="40"height="40"uuid="13d2281f-e5d5-4291-9833-bb1971ddbd67"/> <boxtopPadding="3"leftPadding="3"bottomPadding="3"rightPadding="3"> <topPenlineWidth="0.6"/> <leftPenlineWidth="0.6"/> <bottomPenlineWidth="0.6"/> <rightPenlineWidth="0.6"/> </box> <textElementtextAlignment="Center"verticalAlignment="Middle"> <fontsize="12"/> </textElement> <text><![CDATA[id]]></text> </staticText> </band> </columnHeader> <detail> <bandheight="40"splitType="Stretch"> <textField> <reportElementx="20"y="0"width="40"height="40"uuid="6f2a3a63-d240-4844-8d67-7a553a5da3ac"> <propertyname="local_mesure_unitheight"value="pixel"/> <propertyname="com.jaspersoft.studio.unit.height"value="px"/> <propertyname="local_mesure_unitwidth"value="pixel"/> <propertyname="com.jaspersoft.studio.unit.width"value="px"/> </reportElement> <boxtopPadding="3"leftPadding="3"bottomPadding="3"rightPadding="3"> <topPenlineWidth="0.6"/> <leftPenlineWidth="0.6"/> <bottomPenlineWidth="0.6"/> <rightPenlineWidth="0.6"/> </box> <textElementtextAlignment="Center"verticalAlignment="Middle"> <fontfontName="Traditional Arabic"size="12"/> </textElement> <textFieldExpression><![CDATA[$F{id}]]></textFieldExpression> </textField> <textField> <reportElementx="60"y="0"width="110"height="40"uuid="caff384d-e033-4e38-be01-969d93dacad7"/> <boxtopPadding="3"leftPadding="3"bottomPadding="3"rightPadding="3"> <topPenlineWidth="0.6"/> <leftPenlineWidth="0.6"/> <bottomPenlineWidth="0.6"/> <rightPenlineWidth="0.6"/> </box> <textElementtextAlignment="Left"verticalAlignment="Middle"> <fontfontName="Times New Roman"size="12"/> </textElement> <textFieldExpression><![CDATA[$F{complect}]]></textFieldExpression> </textField> <textField> <reportElementx="170"y="0"width="146"height="40"uuid="b4a80027-8dfd-4987-890d-c616644894eb"/> <boxtopPadding="3"leftPadding="3"bottomPadding="3"rightPadding="3"> <topPenlineWidth="0.6"/> <leftPenlineWidth="0.6"/> <bottomPenlineWidth="0.6"/> <rightPenlineWidth="0.6"/> </box> <textElementverticalAlignment="Middle"> <fontfontName="Times New Roman"size="12"/> </textElement> <textFieldExpression><![CDATA[$F{type}]]></textFieldExpression> </textField> <textField> <reportElementx="316"y="0"width="234"height="40"uuid="438487e5-c811-46fc-add4-1d43fd0d96b1"/> <boxtopPadding="3"leftPadding="3"bottomPadding="3"rightPadding="3"> <topPenlineWidth="0.6"/> <leftPenlineWidth="0.6"/> <bottomPenlineWidth="0.6"/> <rightPenlineWidth="0.6"/> </box> <textElementverticalAlignment="Middle"> <fontfontName="Times New Roman"size="12"/> </textElement> <textFieldExpression><![CDATA[$F{subject}]]></textFieldExpression> </textField> </band> </detail> </jasperReport> |
Рис. 2.4.3.2.18. JRXML файл отчета Example1.