Jasper Reports
Contents
Jasper Reports#
Java библиотека для построения печатных отчетов. Позволяет строить:
Готовые к печати PDF-файлы в интерактивном динамическом HTML с навигацией внутри или за пределами отчета
Высококачественные документы PowerPoint, RTF, Word
Электронные таблицы или необработанные CSV, JSON или XML
Примечание
Данный раздел не является полным руководством к средству построения отчётов JasperReport. Документ содержит описания базовых принципов создания шаблонов и способов взаимодействия инфраструктуры Global 3 SE с построителем отчётов JasperReports.
Дистрибутив#
Скачать дистрибутив можно
с ftp по адресу
ftp://ftp.bitec.ru/pub/#Distrib/JasperStudio
Для разработки шаблонов отчётов доступны две IDE:
Jaspersoft® Studio
iReport Designer.
Примечание
Данный раздел касается только Jaspersoft Studio.
Jaspersoft Studio#
Программное обеспечение, которое позволяет создавать и редактировать шаблоны JasperReports. С помощью Jaspersoft Studio возможно:
Разрабатывать и запускать шаблоны отчетов
Создавать запросы к отчетам
Писать сложные выражения
Компоновать визуальные компоненты
Внимание
Перечень шрифтов в дизайнере Jaspersoft Studio может отличатся от перечня шрифтов на сервере приложения.
Используйте стандартные шрифты, к примеру Arial
Обучающее видео#
Виде выложено на Ftp по адресу ftp://ftp.bitec.ru/pub/#Global/Video/Обучение/Создание ПФ отчетов в Jasper
Документация JasperReports#
Руководство пользователя по адресу
ftp://ftp.bitec.ru/pub/#Distrib/JasperStudio
Для того чтобы открыть примеры Jaspersoft Studio:
Выполните
File > New > Project > JasperReports Samples
.
В выбранном рабочем каталоге будет создано множество примеров отчётов.
Пользовательский интерфейс#
Repository#
Содержит перечень подключений к разным базам данных. Подключения к базе данных необходимо настраивать для того чтобы была возможность тестировать отчеты из Jaspersoft Studio.
Outline#
Отображает структуру открытого отчета.
Properties#
Отображает свойства элемента выбранного в outline
.
Editor#
Отображает открытый отчет. Содержит следующие закладки:
Design
Source
Preview
Колонки#
Страницы отчета содержат банды(группы визуальных элементов), независимые от данных (например,
заголовок или нижние колонтитулы страницы), и банды, которые печатаются только при наличии одной или нескольких записей из данных для печати.
Банды с данными можно разделить на вертикальные столбцы, чтобы максимально
использовать доступное пространство на странице.
Количество колонок можно задать в диалоге разметки страницы(properties\reports\page format
для outline\{Report}
)
Bands#
Отчет делится на банды, в которые добавляются визуальные элементы. Список основных предопределенных бандов:
Title
Это первый видимый банд. Он создается только один раз и может быть распечатан на отдельной страницеPage Header
Позволяет определить заголовок страницыColumn Header
Печатается перед началом отрисовки колонки. Количество колонок на странице можно задать вColumn Footer
Печатается в конце каждой колонкиPage Footer
Появляется в конце каждой страницыSummary
Содержит итоги по отчету
Detail band#
Печатается для каждой записи данных отчета. Детальных бандов может быть несколько, поэтому по умолчанию создается детальный банд с именем „detail 1“
В детальной части можно расположить «Text Field» и задать для каждого выражения получения данных.
Настройка среды Jaspersoft Studio#
Запустите среду разработки отчётов Jaspersort Studio
Создание подключения к ДБ#
В окне «Repository Explorer» выполните операцию «Create Data Adapter»
В открывшемся диалоге выберите «Data base JDBC connectivity»
Укажите реквизиты подключения к базе Postgres
name=PGDEV
JDBC driver=org.postgresql.Driver
JDBC url=jdbc:postgresql://{host}/{db}
Username ={username}
Примечание
Подключение к БД необходимо для того чтобы тестировать отчет из студии
Проект отчета#
Проект отчета создается на группу печатных форм, на усмотрение аналитика.
Совет
Печатные формы проще создавать и редактировать в одном проекте если они не содержат скрипелтов.
Для создания проекта отчёта:
Выполните
File > New > Project …
Выберите
Jaspersoft Studio / JasperReports Project
Задайте имя отчёта в следующем диалоге.
По завершению на закладке Project Explorer
появится новый проект, пока ещё не
содержащий шаблонов отчёта.
Создание простой печатной формы#
Простейший отчёт, выводящий список на основе SQL-запроса.
В окне
Project Explorer
выберете требуемы проектСоздайте каталог для печатной формы
В контекстном меню выполните пунктNew > folder
Создайте отчет
В контекстном меню выполните пунктNew > Jasper Report
Задайте имя шаблона отчета
main.jrxml
Файл с этим именем будет искаться при построении отчёта из Global 3 SE.Нажмите кнопку
next
Выберете адаптер базы данных
Нажмите кнопку
next
Введите запрос
Нажмите кнопку
next
Добавьте требуемые поля в соответствующие банды
Нажмите кнопку
finish
Проверьте корректность отчета на закладке
Preview
в окнеEditor
Редактирование запроса с данными:
Откройте отчет
В окне outlet выберете корень
Нажмите кнопку
Edit query, filter and sort options
Кнопка находится в окне Properties по адресуReport \ DataSet
Так же запрос можно посмотреть в окне Properties на закладкеAdvanced
Двухуровневый отчёт (мастер-деталь)#
Создайте файл мастер-шаблона
main.jrxml
(имя обязательно)
Аналогично одноуровнему шаблону.Создайте файл детального-шаблона
subreport.jrxml
В данном шаблоне будут отображать детальные данные. Имя может быть любым.Добавьте в мастер
Subreport
Откройте мастер шаблон и в окне outlet в секциюDetail 1
добавьте элементSubreport
, в свойствах которого укажитеИмя файла детального шаблона
Expression="subreport.jrxml"
Подключение к БД
Connection Expression =$P{REPORT_CONNECTION}
Свяжите запросы двух шаблонов параметрами.
Создайте в детальном шаблоне параметр
ID_MASTER
Параметризуйте детальный запрос
Обращение к параметру в детальном запросе$P{ID_MASTER}
Свяжите параметр детального шаблона с мастером \
Зайдите в раздел «Subreport» свойств мастер-шаблона
Вызовите диалог редактирования свойства «Edit Parameters»
Задайте связь
Для этого создайте параметрID_MASTER
c выражением$F{id}
Совет
Для вывода актуальных данных в предпросмотре мастер отчета,
после редактирования детального отчета, следует вызвать перекомпиляцию.
Отчет книга (Report Book)#
Отчет книга – это .jrxml, который объединяет несколько отчетов в единый объект.
Создайте новый отчет-книгу
Кликните правой кнопкой мыши в
Project Explore
и выполните пунктNew > Jasper Report
В новом мастере создания отчета выберет
Report Books \ Empty Book
Укажите имя
main.jrxml
(имя обязательно)
Создайте отчет, который будет отображаться в книге.
Отчет может быть как одноуровневым, так и двухуровневым.В отчете-мастере вызовите контекстное меню и выполните пункт «Add new book part»
Добавьте отчет, созданный в пункте 2
Свяжите отчеты между собой Связь запросов двух отчетов параметрами происходит аналогично двухуровневому отчету
Внимание
Отображение номеров страниц в отчетах, отображаемых в книге
осуществляется через переменную $V{MASTER_CURRENT_PAGE}
, а общее
количество страниц – через $V{MASTER_TOTAL_PAGES}
. В настройках
текстового поля должно быть указано evaluationTime="Master"
Параметризация шаблонов#
Параметры отчета находятся в окне Outline
по адресу {Report} \ parameters
Параметры отчёта используются для следующих целей:
В SQL-запросах
Для ограничения данных по переданным из вне параметрамСвязи между частями шаблонов
Для связи между движком отчёта и внешним окружением.
Параметры могут быть любого java-типа.
Например:
REPORT_CONNECTION
типjava.sql.Connection
REPORT_PARAMETERS_MAP
типMap<String,Object>
Шаблон отчёта содержит множество служебных параметров. В дереве элементов шаблона они отображаются серыми. Их невозможно удалить, или изменить значение из дизайнера. Их значения могут быть переданы извне или изменены в коде.
Параметр имеет значение по умолчанию. Его удобно использовать при разработке и тестировании отчёта, заменяя передачу значения параметра извне.
Внимание
При задании строкового значения по умолчанию, его необходимо брать в двойные кавычки.
Флаг Is For Prompting
означает, что при тестовом построении отчёта из
среды Jaspersoft Studio будет запрошено значение параметра.
Внимание
Создавайте параметры с именами в верхнем регистре. Это связано с тем, что имена параметров, переданных извне, приводятся к верхнему регистру автоматом.
Передача параметров в отчёт#
В отчёт можно передать значение параметра с любым типом данных, в том числе служебных параметров. Так же, через параметры можно передать значения макросов фильтра, сортировки или весь запрос целиком.
@Oper(
caption = "Печать",
description = "Печать",
imageIndex =17,
order = 100
)
def printReport(): Unit = {
createReportEx(
getVar("sSystemName").asString(),
null,
PostBuildAction.print,
Map[String, Any](
"ParamTestLong" -> 100500.nl,
"ParamTestDouble" -> NNumber.fromAny(100500.100500D),
"ParamTestString" -> "Тестовая строка",
"ParamTestDate" -> NDate.now(),
"MacroTestFilter" -> "(1 = 1)"
)
)
}
Карта значений всех переданных извне параметров доступна в служебном
параметре REPORT_PARAMETERS_MAP
.
Значение можно получить выражением:
$P{REPORT_PARAMETERS_MAP}.get("ИМЯ_ПАРАМЕТРА")
Если в шаблоне создать параметр MY_PARAMETER
, имя которого в верхнем
регистре равно имени переданного в отчёт параметра, значение
MY_PARAMETER
будет проинициализировано переданным значением. Это
позволяет использовать переданные значения параметров в SQL-запросах.
Пример использования, в отчёте: Rpt_JasperSimpleQuery
Использование параметров в SQL-запросах#
Подстановка значения#
Подстановка значения параметра в запрос выполняется выражением $P{ИМЯ _ПАРАМЕТРА}. Следите за регистром имён параметров, в случае несовпадения будет ошибка компиляции.
select o.*, $P{MY_ORDER_ID} as idMy
from orders o
where order_id = $P{MY_ORDER_ID}
В данном случае будет выполнен sql запрос:
select o.*, ? as idMy from orders o where order_id = ?
Значение параметра отчёта будет передано как значение sql-параметра.
Подстановка выражения (макроса)#
Для подстановки в sql-запрос выражения (или полного текста sql-запроса)
необходимо использовать синтаксис $P!{ИМЯ _ПАРАМЕТРА}
.
select * from orders order by $P!{ИМЯ _ПАРАМЕТРА}
select * from orders where $P!{ИМЯ _ПАРАМЕТРА}
$P!{MY_QUERY}
Использование параметров, содержащих список значений#
В отчет можно передавать массив значений в одном параметре.
Для этого в REPORT_PARAMETERS_MAP
в значении параметра нужно передать массив
Array[java тип]()
.
Например:
"TEST" -> Array[Long](23553,23552)
Настройка параметра с множеством в Jasper Studio#
В Jasper Studio нужно выбрать тип для параметра, которому будет передаваться массив значений:
Перейдите к параметрам отчета
Откройте свойства параметра
Задайте «Class» значением
ArrayList
Задайте «Nested type name»
К примеруLong
илиString
Использование параметров с null#
Для использования в SQL параметров которые могут быть принимать значение null
необходимо использовать синтаксис $X{ИМЯ_ФУНКЦИИ, ИМЯ_КОЛОНКИ, ИМЯ_ПАРАМЕТРА}
.
Где ИМЯ_ФУНКЦИИ
EQUAL
NOTEQUAL
LESS
GREATER
и др.
Для запроса
select * from orders where $X{EQUAL, num_column, num_param}
Будут сгенерирован текст:
select * from orders where num_column = 1
Или если параметр null
select * from orders where num_column IS null
Управляющие параметры#
На процесс построения и экспорта отчёта могут влиять:
Служебные параметры отчёта
Свойства контекста построения отчёта
Служебные параметры отчёта.#
Имя |
Возможные значения |
Описание |
---|---|---|
REPORT_LOCALE |
Locale.forLanguageTag(«ru-RU») |
Устанавливает локаль, используемую при построении отчёта |
Свойства контекста построения отчёта.#
Имя свойства контекста построения отчета начинается с net.sf.jasperreports
Полный список можно найти в документации JasperReports
Значения по умолчанию определены в ресурсах JasperReports:
jasperreports-x.x.x.jar\default.jasperreports.properties
Значения могут быть переданы через параметры метода createReportEx()
или
определены с свойствах шаблона («Properties \ Advanced \ Misc \ Edit
Properties»)
Дополнительные управляющие параметры#
Параметры, передающиеся в отчет стандартной операцией печати:
idSrcObject
id объекта от которого создан отчетidSrcClass
id класса объекта от которого создан отчетidUser
id пользователяsignData_dz
json, подписи печатных бланков для отчетов
Пример значения:[ { "sFIO": "Калинин В.М.", "sPosition": "Транспортировщик", "idEmployee": 25712, "idDepartment": 101672, "sBasisDocument": " №036/426-06-2020-ОЛПС от 01.01.2020", "idBlankSignType": 95351, "gidBasisDocument": "139800/5433" } ]
Экспорт#
По умолчанию, отчёт экспортируется в pdf. Формат, в который будет
выполнен экспорт, определяется параметром FILENAME
.
На экспорт влияют параметры контекста построения, имена которых начинаются с
net.sf.jasperreports.export
.
Описание параметров:
FILENAME
Определяет имя и формат файла с результатом построения отчёта. Отчёт может быть экспортирован в следующие форматы: pdf, xls, docx, xlsx, pptx, xml, json, html, ods, odt, rtf, txt, jpg, jpeg, gif, png.
По умолчанию, экспортируется в pdf. Возможные значения c AS 1.18: \{name} | {name.} | {name.ext} | {.ext}
Возможные значения до AS 1.17: \
{name.ext} | {.ext} | {ext}
Растровые изображения#
Дополнительные параметры контекста, отсутствующие в списке стандартных свойств контекста JasperReports.
net.sf.jasperreports.export.graphics2d.page.index
типInteger
Номер экспортируемой страницы.net.sf.jasperreports.export.graphics2d.zoom.ratio
тип Float
Коэффициент увеличения. По умолчанию, страница формата A4 имеет размеры 842x595px, 72dpi. При экспорте в растровое изображение с такими параметрами, читаемость текста крайне низка. Параметр позволяет пропорционально увеличить размеры изображения без потери качества.net.sf.jasperreports.export.graphics2d.offset.x
типInteger
Сдвиг по оси Xnet.sf.jasperreports.export.graphics2d.offset.y
типInteger
Сдвиг по оси Y
GIF и PNG с прозрачностью#
Для экспорта страницы отчёта в gif или png с прозрачным фоном необходимо отключить заливку фона белым цветом. Параметр:
net.sf.jasperreports.export.graphics2d.white.page.background
типboolean
Управляет заливкой фона страниц отчёта белым цветом
Построение отчёта на основе JSON-данных#
Для построения отчёта на основе JSON-данных:
Создайте xxx.json файл содержащий данные в json формате
Файл должен находится в каталоге с шаблоном. Пример содержимого:{"Northwind": { "Customers": [ { "Phone": "030-0074321", // nonstandard unquoted field name "PostalCode": 12209, // nonstandard single-quoted field name "ContactName": "Maria Anders", // standard double-quoted field name "Fax": "030-0076545", "Address": "Obere Str. 57", "CustomerID": "ALFKI", "CompanyName": "Alfreds Futterkiste", "Country": "Germany", "City": "Berlin", "ContactTitle": "Sales Representative" } ] }}
В «Repository Explorer» создайте JSON-источник данных
Перейдите в свойства «Main DataSet \ Query» шаблона
Выберете созданный источник JSON-данных
Установите Language = JSON.
Заполните выражения запроса
Пример:Northwind.Customers(Country == $P{Country})
Более подробную информацию по синтаксису смотрите в вики.
Для автоматического формирования запроса кликните по требуемому узлу JSON дерева(слева от выражения запроса)Нажать «Read Fields» для создания полей на основе JSON-данных
Теперь к полям источника данных можно обращаться как к полям
SQL-запроса $F{ПОЛЕ}
.
Для передачи данных в функцию createReportEx()
используйте параметр
JSON_INPUT_STREAM
c типом java.io.InputStream
содержащим JSON-данные.
пример:
val json = """{json-данные}"""
createReportEx(
getVar("sSystemName").asString,
null,
PostBuildAction.print,
Map[String, Any](
"JSON_INPUT_STREAM" ->
IOUtils.toInputStream(json, "UTF-8")
)
)
Также доступны параметры:
JSON_LOCALE
JSON_TIME_ZONE
net.sf.jasperreports.json.date.pattern
net.sf.jasperreports.json.number.pattern
Скриптлет (Scriptlet)#
Скриптлет - это Java-класс, позволяющий кастомизировать обработку событий построения отчета а так же добавить вспомогательные функции
Дополнительная информация:
Скриптлет наследуется от одного из классов:
net.sf.jasperreports.engine. JRAbstractScriptlet
net.sf.jasperreports.engine.JRDefaultScriptlet
Экземпляр данного класса создаётся при заполнении отчёта, и его методы вызываются на различных этапах в качестве обработчиков. Так же скриптлет может содержать пользовательские методы, которые можно вызвать через выражения «Expression» полей, переменных и т.п.
Создание скриптлета#
Для создания скриптлетов необходимо иметь Java-проект, к которому подключена библиотека:
"net.sf.jasperreports" % "jasperreports" % "6.5.1"
Перечень действий:
Создайте Java-класс \
public class JRMyExampleScriptlet extends net.sf.jasperreports.engine.JRDefaultScriptlet { }
Переопределите необходимые методы-обработчики событий
Если требуется добавьте необходимые функции
Для создания и компиляции класса скриптлета, можно использовать проект
Application
. Для этого необходимо подключить к модулю, в котором будет
создан класс скритплета, библиотеку:
settings(
libraryDependencies ++= Seq(
"net.sf.jasperreports" % "jasperreports" % "6.5.1" %
"compile"
excludeAll(*ExclusionRule*("com.lowagie"),*ExclusionRule*("org.olap4j"))
)
)
При этом, если построение отчёта будет запущено из приложения отлаживаемого в IDEA, будет возможна отладка кода скриптлета.
Подключение скритплета к шаблону#
Соберите Jar, содержащий данный класс
Скопируйте полученный Jar в каталог проекта версии отчёта
Так же допустимо не создавая Jar, скопировать структуру каталогов с class-файлом скриптлета в каталог проекта отчётаПодключите скриплет к дизайнеру JasperReport Studio
Кликните правой кнопкой мыши на каталоге проекта и выберите «Buld path\ Configure Build Path»
Если нужно подключите jar
Для этого выполните «Add JARs» и выберете jar-файл из каталога проекта версии отчётаЕсли нужно подключите каталог
Для этого выполните «Add Class Folder…» и выберете каталог
Создайте новый скриплет в отчете
Новый скриплет создается из списка скриплетов отчета в окнеoutline
по адресу{Reports} \ Scriptlets
В свойствах скриплета укажите класс созданного скриплета
Теперь при выполнении компиляции и просмотра отчёта в JasperReports Studio будут вызываться методы созданного скриптлета.
Пример скриплета для реализации суммы прописью#
Rpt_JRScriptletNumberToStrSample
Сумма прописью реализована в библиотеке numbertostr: «ftp://ftp.bitec.ru/pub/%23Global/utils/NumberToStr/numbertostr-all-1.0-SNAPSHOT.jar»
Эта библиотека поставляется с сервером global
Для работы в Jasper Studio необходимо подключить эту библиотеку к проекту отчета.
скриплет – обертка#
Создание скриплета:
создайте в проекте файл скриплета Файл создается в проекте отчета в каталоге
src
import net.sf.jasperreports.engine.JRDefaultScriptlet; import net.sf.jasperreports.engine.JRScriptletException; import ru.bitec.numbertostr.MoneyToStr; import ru.bitec.numbertostr.settings.Currency; import ru.bitec.numbertostr.settings.PennyShowType; import ru.bitec.numbertostr.settings.Language; import java.math.BigDecimal; public class JRMoneyToStrScriptlet extends JRDefaultScriptlet { public String moneyToStrRu(BigDecimal npSum) throws JRScriptletException{ return MoneyToStr.spellout( npSum, Currency.RUR, Language.RUS, PennyShowType.TEXT ); } public String moneyToStrByCurrencyAndLanguageAndPennyShowType( BigDecimal npSum, String currency, String language, String pennyShowType ) throws JRScriptletException { return MoneyToStr.spellout( npSum, Currency.valueOf(currency), Language.valueOf(language), PennyShowType.valueOf(pennyShowType) ); } }
Добавляем новый скриплет в отчет \
Зайдите в свойства отчета
Для этого кликните правой кнопкой мыши по каталогу отчетаПерейдите в раздел «Java build path»
Перейдите на закладку «source»
Добавьте каталог
Нажмите «Add folder» и укажите каталокsrc
В свойствах сервлета укажите
Name =
JRMoneyToStrScriptlet
Class =
JRMoneyToStrScriptlet
После этого функции скриплета становятся доступными в expression editor в разделе Parameters
Пример выражения:
$P{JRMoneyToStrScriptlet_SCRIPTLET}.moneyToStrRu($F{nSum})
После завершения редактирования отчета необходимо собрать проекта.
При экспорте кроме *.jrxml
файлов надо экспортировать *.class
файлы скриптлетов.
Внимание
Именно файлы, а не папку bin, чтобы они оказались в корне архива, иначе jasper их не найдет при печати из глобал
Публикация отчётов в БД#
Для обеспечения доступа сервера Global 3 к шаблону отчёта, zip-архив с
шаблоном необходимо загрузить в базу данных через приложение «Настройка
системы»,
пункт меню Отчёты > Печатные формы > Версии печатной формы > Загрузить в базу
.
Шаблон JasperReports-отчёта может состоять из нескольких файлов
(мастер-деталь, несколько страниц) и содержать различные ресурсы
(картинки, скриптлеты). Поэтому, для сохранения в базу, шаблон
приходится архивировать в zip-архив. Файл main.jrxml
должен находиться
в корне архива, иначе он не будет найден. Остальные файлы могут быть
во вложенных каталогах, главное, что бы в шаблоне были указаны верные
относительные ссылки.
Архив не должен содержать бинарных *.jasper
файлов.
При построении, zip-архив будет разархивирован во временный каталог.
Ручная загрузка отчетов#
В
Project Explorer
выберите папку содержащую отчеты печатной формыВ контекстном меню выполните
Export
Выберите тип
Archive file
Выберете фалы для экспорта
Внимание
Допустимы только следующие расширения:
jrxml
class
jar
Укажите опцию
save in zip archive
Укажите файл куда сохранить шаблон
Откройте приложение
Настройки системы
Откройте печатные формы
Пункт менюОтчеты > Печатные формы
Создайте версию печатной формы
Загрузите шаблон печатной формы
Внимание
Убедитесь что файлы экспортируются в корень архива.
Для этого при экспорте должна быть установлена опция Create only selected directories
Загрузка отчета на dataInstall#
Загрузку отчета в базу можно добавить в dataInstall получив blob отчета
с помощью метода Rpt_ReportVersionApi().compress
.
Пример:
val blobData = Rpt_ReportVersionApi().compress(
List((
"subreport1.jrxml",
getClass.getResourceAsStream("/reports/Mes_PlanReport/subreport1.jrxml")
),(
"subreport2.jrxml",
getClass.getResourceAsStream("/reports/Mes_PlanReport/subreport2.jrxml")
),(
"order.jrxml",
getClass.getResourceAsStream("/reports/Mes_PlanReport/order.jrxml")
),(
"main.jrxml",
getClass.getResourceAsStream("/reports/Mes_PlanReport/main.jrxml"))
)
)
Полностью пример можно посмотреть в
ru.bitec.app.mes.Mes_DataInstallPkg#reportInstall
.
Отчет с содержанием#
Возьмем Report Book, в котором 2 отчета:
TableOfContents
Content
.
Для создания содержания с гиперссылками в начале документа
Укажите свойства отчета TableOfConents
если отчет стоит перед
Content
тоEvaluationTime
=Report
net.sf.jasperreports.bookmarks.data.source.parameter
=REPORT_DATA_SOURCE
При необходимости установить галочку «Use Cache» Галочка находится на
Pages
Настройте поле для
Anchor
в отчетеContent
Перейдите на поле которое хотите видеть в содержании
Задайте свойства на закладке
Hyperlink
«Anchor name expression» =
$F{sposition}
Можно указывать имя в виде"Позиция: " + $F{sposition}
, но нужно учитывать, что если тут будет число – нужно привести его к.toString
.«Bookmark level» =
1
Создайте поля в Dataset’e отчета TableOfContents
level
типjava.lang.Integer
pageIndex
типjava.lang.Integer
label
типjava.lang.String
Для отображения имени гиперссылки
Создайте или перейдите на соответствующий TextField в TableOfContents
Задайте значением
$F{label}
Свяжите поле с уровнем anchor
Укажите свойство «Appearance \ print when \ print when expression» =$F{level}==1
Для отображения номера страницы
Создайте или перейдите на соответствующий TextField в TableOfContents
Задайте значение
$V{PAGE_NUMBER} + $F{pageIndex} + 1
Задайте свойство «Evaluation Time» =
Auto
Свяжите поле с уровнем anchor
Укажите свойство «Appearance \ print when \ print when expression» =$F{level}==1
При необходимости можно сделать поля с именем анкора и номером страницы гиперссылками
Откройте свойства поля
Перейдите на закладку Hyperlink
В разделе HyperLink задайте
«Link Target» =
Self
«Link Type» =
LocalAnchor
«Hyperlink Anchor Expression» =
$F{lable}