Показать "Страница X of Y", используя одно текстовое поле
Я хотел бы создать одно текстовое поле, содержащее Page X of Y
, без разделения его на две части, в соответствии с общим решением. Мое текстовое поле содержит "Page " + $V{currentPage} + " of " + $V{PAGE_NUMBER}"
с evaluationTime=auto
.
Скажем, у меня есть отчет с 10 страницами. Три являются Заголовок полосы, шесть - Подробный диапазон, а один - Сводная группа. Мои результаты показывают "Page 0 of 10"
для диапазона заголовков, правильные подсчеты для Подробный диапазон s, а затем "Page 0 of 10"
для Сводная группа..
Как вы гарантируете, что переменная вычисляется везде, а не только в Детальной группе?
Ответы
Ответ 1
Студия Джасперсофт, 6+
Для Jaspersoft Studio v6 или если дублируется номер первой страницы, попробуйте это решение, в котором используются $V{MASTER_CURRENT_PAGE}
и $V{MASTER_TOTAL_PAGE}
со временем оценки Master
.
Джасперсофт Студио
Для других версий Jaspersoft Studio попробуйте выполнить действия, описанные в последующих подразделах.
Создать переменную
Создайте переменную следующим образом:
- Создайте переменную с именем
V_CURRENT_PAGE_NUMBER
- Выберите переменную, чтобы открыть ее свойства (показано ниже)
- Установите выражение на:
1
- Установите начальное значение выражения:
$V{PAGE_NUMBER}
- Если номер страницы показывает
0
, используйте $V{PAGE_NUMBER} + 1
. - Если номер страницы всегда показывает
1 of Y
, установите для выражения значение $V{PAGE_NUMBER}
вместо выражения начального значения и оставьте выражение начального значения пустым.
- Установите тип сброса на:
Page
Эти настройки показаны на следующем рисунке:
![Current Page Number Variable]()
Установка выражения в 1
предотвращает его значение, равное null
. То есть, если нижний колонтитул показывает Page null of 4, это, вероятно, означает, что выражение не было установлено.
Переменная создана.
Добавить нижний колонтитул
Добавьте полосу нижнего колонтитула страницы следующим образом:
- Выберите отчет на панели структуры
- Проверьте сводку с верхним и нижним колонтитулами, чтобы убедиться, что нижний колонтитул страницы отображается на сводной странице.
- Добавьте полосу нижнего колонтитула страницы.
Нижний колонтитул добавлен.
Создать текстовое поле
Создайте текстовое поле следующим образом:
- Перетащите одно текстовое поле на нижний колонтитул страницы.
- Выберите текстовое поле.
- Установите для выражения значение:
msg("Page {0} of {1}", $V{V_CURRENT_PAGE_NUMBER}, $V{PAGE_NUMBER})
- Установите время оценки на:
Auto
Эти настройки показаны на следующем рисунке:
![Single Text Field]()
Единственное текстовое поле создано.
Предварительный отчет
Для отчета с тремя страницами и страницей со сводной информацией предварительный просмотр отчета показывает:
![Page 1]()
Сводная страница показывает:
![Page 4]()
См. Сообщение в блоге Роберта Энсингера на эту тему для более подробной информации.
Ответ 2
Я попробовал этот подход, но в итоге получил неправильные номера страниц: {1/7, 1/7, 2/7, 3/7, 4/7, 5/7, 6/7}.
Для JasperReports 6+ используйте системные переменные MASTER_CURRENT_PAGE
и MASTER_TOTAL_PAGES
и не забудьте установить время оценки текстового поля в Master
:
<textField evaluationTime="Master">
<textElement textAlignment="Right"/>
<textFieldExpression><![CDATA[msg("Page {0} of {1}", $V{MASTER_CURRENT_PAGE}, $V{MASTER_TOTAL_PAGES})]]></textFieldExpression>
</textField>
Смотрите: http://jasperreports.sourceforge.net/sample.reference/book/index.html.
Ответ 3
Общий подход, как вы упомянули, использует два разделенных текстовых поля:
Текущий номер страницы
$V{PAGE_NUMBER}
с EvaluationTime: Now
Общий номер страницы
$V{PAGE_NUMBER}
с EvaluationTime: Report
Ответ 4
Относительно текущего номера страницы, evaluationTime=now
и $V{PAGE_NUMBER}
- ваш ответ.
К сожалению, я не думаю, что вы можете достичь того, чего хотите, потому что есть ошибка в PAGE_COUNT, когда режим разделения разрешен включен для группы деталей, В противном случае evaluationTime=now
и "Page " + $V{PAGE_NUMBER} + " of " + $V{PAGE_COUNT}"
, вероятно, будут работать.
Ответ 5
Это должно помочь, используя оценку времени в качестве отчета
<textField>
<reportElement x="497" y="0" width="32" height="12" forecolor="#7E8083"
uuid="ef663cfd-4058-40bb-a6d9-de7f9a8164be"/> --update your elements here
<textElement textAlignment="Right" verticalAlignment="Middle">
<font fontName="SansSerif" size="7" pdfFontName="OpenSans-Regular.ttf"/>
</textElement>
<textFieldExpression>
<![CDATA["Page " + $V{PAGE_NUMBER} + " of"]]>
</textFieldExpression>
</textField>
<textField evaluationTime="Report">
<reportElement x="529" y="0" width="7" height="12" forecolor="#7E8083"
uuid="ef663cfd-4058-40bb-a6d9-de7f9a8164be"/> --update your elements here
<textElement textAlignment="Right" verticalAlignment="Middle">
<font fontName="SansSerif" size="7" pdfFontName="OpenSans-Regular.ttf"/>
</textElement>
<textFieldExpression>
<![CDATA[$V{PAGE_NUMBER}]]>
</textFieldExpression>
</textField>
Ответ 6
Эта работа для меня (немного отличается от Дейва Ответа)
* Использование JasperSoft Studio
![Capture: adding Variable]()
Затем поместите текстовое поле с выражением:
"Pág. " + $V{PAGE_NUMBER} +"/" + $V{V_CURRENT_PAGE_NUMBER}
Надеюсь, это поможет!