Jasper reports 在JasperAssistant中将页脚溢出文本打印到下一页

Jasper reports 在JasperAssistant中将页脚溢出文本打印到下一页,jasper-reports,Jasper Reports,我正在使用JasperAssistant创建报告。在我的报告中,我在页脚区域有一个特定大小的文本字段。我需要在该文本字段中打印订单号。如果我的订单号无法在第一页的该文本字段中显示,则我必须在后续页脚中打印剩余的订单号。我如何实现这一点?我尝试了各种选项,如stretch with overflow为true,print repeated value为false,但都不起作用 如果您喜欢使用子报告或其他任何内容,请提供任何替代建议。您可以尝试使用多个变量,例如: v_ftr_chr_cnt =&

我正在使用JasperAssistant创建报告。在我的报告中,我在页脚区域有一个特定大小的文本字段。我需要在该文本字段中打印订单号。如果我的订单号无法在第一页的该文本字段中显示,则我必须在后续页脚中打印剩余的订单号。我如何实现这一点?我尝试了各种选项,如stretch with overflow为true,print repeated value为false,但都不起作用


如果您喜欢使用子报告或其他任何内容,请提供任何替代建议。

您可以尝试使用多个变量,例如:

v_ftr_chr_cnt  => 560
v_ord_num_len  => $F{ORDER_NUM}.length()
v_req_page_cnt => Math.ceil($V{v_ord_num_len}/$V{v_ftr_chr_cnt})
v_mod_page_num => $V{PAGE_NUMBER}-1 % $V{v_req_page_cnt}
v_substr_from  => $V{v_mod_page_num}*$V{v_ftr_chr_cnt}+1   //   1,  561, 1021...
v_substr_to    => ($V{v_mod_page_num}+1)*$V{v_ftr_chr_cnt} // 560, 1020, 1580...
v_footer => $F{ORDER_NUM}.Substring($V{v_substr_from}, ( $V{v_ord_num_len} >= $V{v_substr_to} ? $V{v_substr_to} : $V{v_ord_num_len}) )
在页脚带中,输入带有此代码的文本:

$V{v_footer}
它看起来很丑,但很简单。若你们试图得到比原始字符串长的子字符串,你们会得到异常,这就是为什么我在子字符串操作符的第二个参数上检查字符串长度。您没有指定根据订单号的不同长度会发生什么情况,如果此页脚适合单页,它将在每页上打印整个订单号,如果不适合,它将在多页上打印,如果有更多页,则会发生什么情况,而您没有指定订单号的长度。。。但我猜事情会变得相当复杂和丑陋:)

编辑

我已经编辑了代码,它应该涵盖ORDER_NUM比总页数短的情况,它还将只打印适合第一份报告的部分。我不知道你怎么能得到总页数来打印新报告的其余部分。如果您不使用摘要栏,您可以将其打印为最后一页,并在其上打印订单号的其余部分

这将是订单号其余部分的变量:

v_summary_ord_num => $F{ORDER_NUM}.SubString($V{v_ftr_chr_cnt}*($V{PAGE_NUMBER}-1))
这可能会作为摘要栏的“表达式时打印”,所以只有在订单号不适合前几页时才打印栏

$V{v_ord_num_len} > $V{v_ftr_chr_cnt}*$V{PAGE_NUMBER}

我不知怎的发现,我们如何将那些不适合我的主要JasperPrint对象生成的页面数的订单号添加到新报告中。正如您所说,我们将首先获得如下所示的所需页数

v_req_page_cnt=>Math.ceil($v{v_ord_num_len}/$v{v_ftr_chr_cnt})

然后我们将通过这样做得到主报告生成的页数

mainReportPageCount=JapserPrint.getPages().size()


如果(v_req_page_cnt>mainReportPageCount),则生成新报告。然后从新报告中获取页面()&将这些页面添加到主报告中

嘿,另一个不需要变量的解决方案是$F{ORDER_NUM}.length()>=$V{PAGE_NUM}.intValue()*100,不需要担心报表中的总页面数$子字符串($V{PAGE}.intValue()-1)*100,$V{PAGE}.intValue()*100):($F{ORDER}.length()>=($V{PAGE}.intValue()-1)*100?$F{ORDER}.intValue().substring($V{PAGE}.intValue()-1)*100):null)这太好了,我错过了,但如果在页脚上不止一次,这个问题就解决不了了。你需要对页码应用模,我已经编辑了我的帖子,并更改了代码以涵盖这种情况