Как скрыть страницу x of y, когда в моем отчете о яшме есть только одна страница

Я использую jasper-reports 4.5.0 и создаю отчеты. Мое требование - если в моем отчете только одна страница, то он не должен отображать страницу 1 0f 1. Как я могу это сделать. Чтобы отобразить страницу x of y Я использую приведенные ниже строки кода.

  <textField>
                <reportElement x="395" y="121" width="20" height="20"/>
                <textElement/>
                <textFieldExpression><![CDATA[$V{PAGE_NUMBER}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="350" y="121" width="45" height="20"/>
                <textElement/>
                <textFieldExpression><![CDATA["PAGE"]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="415" y="121" width="25" height="20"/>
                <textElement/>
                <textFieldExpression><![CDATA["OF"]]></textFieldExpression>
            </textField>
            <textField evaluationTime="Report">
                <reportElement x="440" y="121" width="19" height="20"/>
                <textElement/>
                <textFieldExpression><![CDATA[$V{PAGE_NUMBER}]]></textFieldExpression>
            </textField>

Это недавно измененный код.

<variable name="NPAGES" class="java.lang.Integer" calculation="Highest">
        <variableExpression><![CDATA[$V{PAGE_NUMBER}]]></variableExpression>
        <initialValueExpression><![CDATA[$V{PAGE_NUMBER}]]></initialValueExpression>
    </variable>

<textField>
                <reportElement x="395" y="121" width="20" height="20"/>
                <textElement/>
                <textFieldExpression><![CDATA[($V{NPAGES} > 1) ? $V{PAGE_NUMBER} : ""]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="350" y="121" width="45" height="20"/>
                <textElement/>
                <textFieldExpression><![CDATA[($V{NPAGES} > 1) ? "PAGE" : ""]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="415" y="121" width="25" height="20"/>
                <textElement/>
                <textFieldExpression><![CDATA[($V{NPAGES} > 1) ? "OF" : ""]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="440" y="121" width="19" height="20"/>
                <textElement/>
                <textFieldExpression><![CDATA[($V{NPAGES} > 1) ? $V{NPAGES} : ""]]></textFieldExpression>
            </textField>

Ответы на вопрос(3)

для которой задано общее количество страниц в отчете:

<variable name="NPAGES" class="java.lang.Integer" calculation="Highest">
    <variableExpression><![CDATA[$V{PAGE_NUMBER}]]></variableExpression>
    <initialValueExpression><![CDATA[$V{PAGE_NUMBER}]]></initialValueExpression>
</variable>

Теперь используйте эту переменную в качестве условия, чтобы определить, отображать ли номер страницы:

        <textField>
            <reportElement x="395" y="121" width="20" height="20"/>
            <textElement/>
            <textFieldExpression><![CDATA[($V{NPAGES} > 1) ? $V{PAGE_NUMBER} : ""]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="350" y="121" width="45" height="20"/>
            <textElement/>
            <textFieldExpression><![CDATA[($V{NPAGES} > 1) ? "PAGE" : ""]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="415" y="121" width="25" height="20"/>
            <textElement/>
            <textFieldExpression><![CDATA[($V{NPAGES} > 1) ? "OF" : ""]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="440" y="121" width="19" height="20"/>
            <textElement/>
            <textFieldExpression><![CDATA[($V{NPAGES} > 1) ? $V{NPAGES} : ""]]></textFieldExpression>
        </textField>

Я попробовал это в одном из моих отчетов, и это сработало.

 user143474609 июн. 2012 г., 07:51
извините, это не работает для меня. Логика - это что-то не так. Теперь она ничего не отображает на первых двух страницах и начиная с третьей страницы. Страница 3 из 2, страница 4 из 3, страница 5 из 4, как это. Всего страниц мой отчет 10.
 user143474608 июн. 2012 г., 07:07
Привет, спасибо, что дали ответ. Это решение работает нормально. Но если мой отчет имеет всего 10 страниц для первых двух страниц, он не показывает СТРАНИЦУ 1 из 10, СТРАНИЦУ 2 ИЗ 10 вместо этого показывает 10,10.Из на третьей странице он отображается нормально, как стр. 3 из 10. В чем может быть проблема.
 user143474612 июн. 2012 г., 10:37
Привет, я разместил недавно измененный код ....
 09 июн. 2012 г., 11:58
На самом деле это даже не представляется возможным, не могли бы вы скопировать и вставить новый код в конец исходного вопроса, пожалуйста.
 08 июн. 2012 г., 15:19
Я внес изменение в свой ответ, чтобы последний элемент использовал новую переменную NPAGES вместо PAGE_NUMBER, оцененной в & quot; Report & quot; время. Это должно исправить вашу проблему. Обратите внимание, что если вы считаете, что это правильный ответ, вы должны поставить галочку рядом с ответом, чтобы другие знали об этом. Кроме того, вы можете проголосовать за ответ, нажав на маленькую ^ рядом с ответом. Это стандартный протокол stackoverflow, и люди будут относиться к вашим вопросам более серьезно, если у вас есть хороший уровень принятия ответов. Спасибо!

Шаг 1: создайте переменную так, чтобы она сохраняла номер текущей страницы.

<variable name="V_CURRENT_PAGE_NUMBER" class="java.lang.Integer" resetType="Page">
    <variableExpression><![CDATA[1]]></variableExpression>
    <initialValueExpression><![CDATA[$V{PAGE_NUMBER}+1]]></initialValueExpression>
</variable>

шаг 2: добавить текстовое поле, оценка должна бытьAuto.

Значение будет

$V{PAGE_NUMBER}>1?msg("Page {0} of {1}",$V{V_CURRENT_PAGE_NUMBER},$V{PAGE_NUMBER}):" "

так что значение PAGE_NUMBER, если больше 1, печатать страницуcurrent_page изtotal_report_page ещеempty.

пример: страница 1 из 3

<textField evaluationTime="Auto">
            <reportElement positionType="Float" x="475" y="37" width="74" height="15"/>
            <textElement/>
            <textFieldExpression><![CDATA[$V{PAGE_NUMBER}>1?

msg("Page {0} of {1}", $V{V_CURRENT_PAGE_NUMBER}, $V{PAGE_NUMBER}):" "]]>

прямого способа достичь этого не существует. В тот момент, когда механизм заполняет страницу 1, он не знает, будет ли страница 2. Задержка времени оценки недостаточна, чтобы обойти это.

Самое простое подобное решение - просто спрятать & quot; страницу x от y & quot; на странице 1. Это не соответствует вашим заявленным требованиям ... но некоторым людям это нравится.

Лучшее относительно простое решение - подотчет. Создайте основной отчет, который просто выполняет ваш текущий запрос отчета. Создайте логический параметр с именем$P{subreport_has_more_than_one_page} (или используйте более сжатое имя). Надеемся, что вы можете использовать простую логику, например, зная, что ваш отчет будет состоять из нескольких страниц, если он вернет более 25 строк. Это не обязательно возможно ... но в очень большом проценте случаев реального мира это действительно возможно. Если ваши страницы зависят от непредсказуемого переноса длинного текста, это может быть сложно.

Предполагая, что вы можете определить значение для$P{subreport_has_more_than_one_page}Затем вы передаете этот параметр в подотчет. Подотчет - это просто существующий отчет. Вооружившись этим значением, тривиально добавить на страницу «Выражение при выражении» страницу «x из y»; на первой странице.

Ваш ответ на вопрос