前景知识
程序的数据集生效需要使用封装的依赖包
1. word导出相关问题
1.1 导出文字为图片
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的属性,你增大对应的数值即可。