Вопрос по jasper-reports – Показать «Страница X из Y», используя одно текстовое поле

16

Я хотел бы создать одно текстовое поле, которое содержитPage X of Yбез разделения на две части, согласно общему решению. Мое текстовое поле содержит"Page " + $V{currentPage} + " of " + $V{PAGE_NUMBER}" сevaluationTime=auto.

Допустим, у меня есть отчет на 10 страницах. Три являютсяTitle BandшестьDetail Band и один из нихSummary Band, Мои результаты показывают"Page 0 of 10" дляTitle Bands, правильный счет дляDetail Bandс, тогда"Page 0 of 10" дляSummary Bands.

Как вы убедитесь, что переменная рассчитывается везде, а не только наDetail Band?

@KCD имеет ли ваш JasperReport переменную $ {NumberOfPages}? Кажется, я не могу видеть это здесь. Paŭlo Ebermann
$V{PAGE_NUMBER} содержит номер текущей страницы, что вы хотите$V{NumberOfPages} так что вы можете использовать его в одном текстовом поле сEvaluationTime: Now, В противном случае вам нужно решение с двумя текстовыми полями, какhere KCD

Ваш Ответ

5   ответов
24
Jaspersoft Studio, 6+

если дублируется номер первой страницы, попробуйтеэто решение, который использует$V{MASTER_CURRENT_PAGE} а также$V{MASTER_TOTAL_PAGE} со временем оценкиMaster.

Jaspersoft Studio

Для других версий Jaspersoft Studio попробуйте выполнить действия, описанные в последующих подразделах.

Create Variable

Создайте переменную следующим образом:

Create a variable called V_CURRENT_PAGE_NUMBER Select the variable to open its properties (illustrated below) Set Expression to: 1 Set Initial Value Expression to: $V{PAGE_NUMBER} If the page number shows 0, use $V{PAGE_NUMBER} + 1. If the page number always shows 1 of Y, set Expression to $V{PAGE_NUMBER} instead of the initial value expression, and leave the initial value expression empty. Set Reset type to: Page

Эти настройки показаны на следующем рисунке:

Current Page Number Variable

НастройкаExpression в1 предотвращает его ценностьnull, То есть, если нижний колонтитул показываетPage null of 4 это, вероятно, означает, чтоExpression не был установлен.

Переменная создана.

Add Page Footer

ДобавитьPage Footer полоса следующим образом:

Select the report in the outline panel Check Summary With Page Header And Footer to ensure the page footer appears on the summary page. Add a Page Footer band.

Нижний колонтитул добавлен.

Create Text Field

Создайте текстовое поле следующим образом:

Drag and drop a single text field onto the Page Footer band. Select the text field. Set Expression to: msg("Page {0} of {1}", $V{V_CURRENT_PAGE_NUMBER}, $V{PAGE_NUMBER}) Set Evalutation Time to: Auto

Эти настройки показаны на следующем рисунке:

Single Text Field

Единственное текстовое поле создано.

Preview Report

Для отчета с тремя страницами и страницей со сводной информацией предварительный просмотр отчета показывает:

Page 1

Сводная страница показывает:

Page 4

См. Роберт ЭнсингерСообщение блога на эту тему для более подробной информации.

2

evaluationTime=now а также$V{PAGE_NUMBER} это твой ответ.

К сожалению, я не думаю, что вы можете достичь того, чего хотите, потому что есть ошибка вКОЛИЧЕСТВО СТРАНИЦ когда Split Allowed включен для группы Detail. ИначеevaluationTime=now а также"Page " + $V{PAGE_NUMBER} + " of " + $V{PAGE_COUNT}" вероятно, будет работать.

7

как вы упомянули, использует два отдельных текстовых поля:

Current page number

$V{PAGE_NUMBER} с EvaluationTime: сейчас

Total page number

$V{PAGE_NUMBER} с EvaluationTime: отчет

0

evaluationTime какReport

   <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>
9

этот подход, но в итоге с неправильными номерами страниц: {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

Похожие вопросы