fineReport10问题笔记

前景知识

程序的数据集生效需要使用封装的依赖包
在这里插入图片描述

1. word导出相关问题

1.1 导出文字为图片

fineReport技术文档

1)文本控制
选中单元格,点击「单元格属性>样式>对齐」,文本控制设置有四种,分别为「自动换行、单行显示、单行显示(调整字体)、多行显示(调整字体)」,除了「自动换行」,设置为其他三种导出 word 时,文字均显示为图片。

2)文本方向
选中单元格,点击「单元格属性>样式>对齐」,文本方向设置有三种,分别为「自定义角度、文字竖排(从左向右)、文字竖排(从右向左)」,除了「自定义角度」,设置为其他两种导出 word 时,文字均显示为图片。

在这里插入图片描述

若是多表格相关的word每一行表格末尾会出现一个多余的回车符,造成末尾留白的情况,我们可以通过改变表格的宽度实现缩小。

1.2 数据行补充

fineReport技术文档
当我们导出word时,会存在数据不足以沾满整个页面的情况,此时我们需要补充空白数据行来进行填充。此时双击你的插入数据列,按照对应操作即可。
在这里插入图片描述数据倍数 N 表示当前扩展单元格需要显示的总行数为 N 的最小整数倍。本例固定显示行数为 5,那么 N 必须为 5 才能实现效果。比如说23行每页,那就需要设置为23。如果导出时word类型的表格数据,你需要根据字体大小和表格宽度计算每一行能够展示的字体数量。必要时可能需要截断。

除了这种方式外,我们还可以通过计算求出需要补充的空白数据集大小。简化代码如下:
size = total % pageSize
for (int i = 0; i < szie; i++)
__res.add(new ())

1.3 数据行跨页

fineReport技术文档
在这里插入图片描述
如上当我们导出的word文档类似表格的行数据,同时我们指定了每页的具体行数,下载文档后打开发现数据分开,成为了两页。首先需要注意的是fineReport的报表页边距逻辑不太一样。首先我们来看标准的word排版规则如下:
在这里插入图片描述
在文档中,word上页边距包含了页眉高度和页眉距边界(页眉顶端到纸张顶端的距离),而在fineReport的页边距中,上页边距代表的是指页眉顶端到纸张顶端的距离,两者相差了一个页眉高度。
在这里插入图片描述
在我们用wps和word工具打开doc文档时,工具默认的页眉距边界12.7mm,也就是说我们需要在fineReport中报表设置页边距的上下值为12.7mm。
在这里插入图片描述
下面则是wps相关情景:
在这里插入图片描述

除此之外,wps和word的页面垂直排版问题word是顶端对齐,而wps则为居中对齐。两者也会导致页面排版分页的问题。
在这里插入图片描述

2.报表预览分页常见问题

2.1 单元格动态显示页数

官方文档
当单元中出现第几页共几页时,可以通过一下方法动态显示。
在这里插入图片描述

当前页码:$$page_number
报表总页数:$$totalPage_number
報表頁面中輸入公式時,可以使用$$page_number和$$totalPage_number,且這兩個變量是數值型的,可以參與計算。

2.2 单元格内容缩放

当我们固定单元格高度的时候,内容往往在指定的字大小不能够全部显示,我们需要进行字体缩放,finereport提供了两种缩放方式,单行显示(调整字体)多行显示(调整字体)
在这里插入图片描述
若使用多行显示(调整字体),当内容远远少于单元格正常显示的范围内容时,缩放效果不太理想。
在这里插入图片描述
为了能够不同字数实现不同的缩放效果,我们可以配合使用单行显示(调整字体) + 内容换行来实现对应的效果。
在这里插入图片描述

一般来说,内容来源于后台数据,计算需要换行的位置后,插入对应的换行符号\\n,伪代码如下所示:

    public static String gets(String value, int strlen) {
        int valueLength = 0;
        //计算需要换行的位置
        int position = -1; 
        //汉字为双字节字符编码范围
        String chinese = "[\u0391-\uFFE5]";
        // 获取字段值的长度,如果含中文字符,则每个中文字符长度为2,否则为1
        for (int i = 0; i < value.length(); i++) {
            // 获取一个字符
            String temp = value.substring(i, i + 1);
            /*判断是否为中文字符*/
            if (temp.matches(chinese)) {
                /*中文字符长度为2 */
                valueLength += 2;
            } else {
                //其他字符长度为1
                valueLength += 1;
            }
        }
        //确定换行的位置
        if (valueLength <= 60) {
            //不换行
            position = -1;
        } else if (60 < valueLength && valueLength <= 120) {
            position = 60;
        } else if (120 < valueLength && valueLength <= 160) {
            position = 80;
        } else if (161 < valueLength && valueLength <= 200){
            position = 100;
        }
    }

上面这种方式带来的问题是对应的缩放内容是一个图片如果你需要导出来是一段文字,那么可以配合【条件属性】实现根据字体的长度实现字体大小的变动条件属性帆软官方
在这里插入图片描述
如上图所示,左边4个单元格由于内容的不同,分别对应不同的字体大小,分别是10,9,8,7四种,那么现在我们可以根据条件属性实现不同长度字体发生动态变化。
在这里插入图片描述
下面我们给出66-84字的条件属性判断具体详情。
在这里插入图片描述

在条件属性中字体没有7号,如果你想使用7号字,可以设计完报表后,使用文本编辑器打开报表,找到对应的位置,有一个叫做front-size的属性,你增大对应的数值即可。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值