Есть ли способ напечатать только первое появление подотчета в Jasper-Report? - PullRequest
0 голосов
/ 03 января 2019

Я исправляю Jasper-Report, не позволяющий печатать первую страницу, когда заданный параметр $ P {} в подотчете слишком велик, чтобы поместиться на странице.

Отчет довольно прост,Одна страница шаблона с заголовком, заголовком страницы, номером страницы, вложенным отчетом с несколькими текстовыми полями (имя пользователя, дата, категория ...) и данными.Этот шаблон повторяется для каждой напечатанной страницы, пока не будут напечатаны все строки таблицы.Единственным исключением является подотчет, который печатается только на первой странице.Это было сделано с помощью printWhenExpression , установленной в "$ V {PAGE_NUMBER} == 1", что, кажется, является приемлемым решением везде, куда я смотрю.

Это определение подотчета:

    <subreport>
        <reportElement 
            positionType="Float" 
            stretchType="RelativeToTallestObject" x="5" y="67" width="160" height="13" isPrintInFirstWholeBand="true" 
            isPrintWhenDetailOverflows="true" 
            uuid="33028395-a759-4029-83de-17fb8465fc3b">
            <printWhenExpression><![CDATA[$V{PAGE_NUMBER}==1]]></printWhenExpression>
        </reportElement>
        <subreportParameter name="username">
            <subreportParameterExpression><![CDATA[$P{username}]]></subreportParameterExpression>
        </subreportParameter>
        <subreportParameter name="startdate">
            <subreportParameterExpression><![CDATA[$P{startdate}]]></subreportParameterExpression>
        </subreportParameter>
        <subreportParameter name="enddate">
            <subreportParameterExpression><![CDATA[$P{enddate}]]></subreportParameterExpression>
        </subreportParameter>
        <subreportParameter name="category">
            <subreportParameterExpression><![CDATA[$P{category}]]></subreportParameterExpression>
        </subreportParameter>
        <subreportParameter name="selectedareas">
            <subreportParameterExpression><![CDATA[$P{selectedareas}]]></subreportParameterExpression>
        </subreportParameter>
        <subreportParameter name="contract">
            <subreportParameterExpression><![CDATA[$P{contract}]]></subreportParameterExpression>
        </subreportParameter>
        <subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "userdata.jasper"]]></subreportExpression>
    </subreport>

Проблема в том, что, когда параметр подотчета $ P {selectedAreas} слишком велик, чтобы уместиться на одной странице, Jasper просто отображает пустую первую страницу.Ни с чем, без заголовков страниц, ничего.Вторая страница и далее появляются как раз справа.

Если мы удалим $ V {PAGE_NUMBER} == 1 , будет выдано это сообщение об ошибке:

net.sf.jasperreports.engine.JRRuntimeException: бесконечный циклсоздание новой страницы из-за переполнения заголовка страницы.

Это связано с подотчетом, использующим 2 страницы, что делает использование printWhenExpression в качестве дискриминатора бесполезным.Есть ли другой способ распечатать подотчет только для первого появления?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...