API重新读取报表设置行高列宽字体字号

需求背景:

报表是嵌入在一个iframe里面的,但是报表比较大,网页上会产生滚动条。希望能将该报表按比例缩小,全部展示在iframe范围之内,不产生滚动条(当然,报表可能就比较模糊了)。然后通过点击一个按钮,弹出一个新网页,展示全部的清晰的数据。

 

思路:

API读取报表,重新设置表的行高,列宽以及单元格中的字体和字号,然后重新生成一张报表,展示到ifarme里面。

 

步骤:

1. 设计一张报表,如下图:

2. 页面展示如下图:

但是这张报表太大,在iframe里面展示不下,会产生滚动条。

3. 通过一下代码重新设置一下该报表,并生成一张新的报表到D盘根目录:

4. package ApiTest;

5.

6.

7. import com.runqian.report4.model.*;

8. import com.runqian.report4.usermodel.INormalCell;

9. import com.runqian.report4.util.ReportUtils;

10.import java.io.FileNotFoundException;

11.import java.io.FileOutputStream;

12.import java.io.ObjectInputStream;

13.import java.io.OutputStream;

14.import java.sql.*;

15.import com.runqian.report4.model.ReportDefine;

16.import com.runqian.report4.model.engine.ExtCellSet;

17.import com.runqian.report4.usermodel.Context;

18.import com.runqian.report4.usermodel.Engine;

19.import com.runqian.report4.usermodel.IColCell;

20.import com.runqian.report4.usermodel.IReport;

21.import com.runqian.report4.usermodel.IRowCell;

22.

23.

24.public class ApiEditRaq_iframe {

25. String file=“C:\\Program Files\\reportHome\\webapps\\demo\\reportFiles\\sxzt1.raq”;

26. String raqPath=“D:/”;

27. String raqName=“sxzt.raq”;

28. int row,col;

29.

30. public void ApiEditRaq_iframe() throws Exception{

31. ReportDefine rd = (ReportDefine) ReportUtils.read(file);

32. row = rd.getRowCount();//获取报表行数

33. col = rd.getColCount();//获取报表列数

34. System.out.println(报表行数:+row);

35. System.out.println(报表列数:+col);

36. //设置行高

37. for(int i=1;i<=row;i++){

38. IRowCell rowcell = (IRowCell) rd.getRowCell(i);

39. rowcell.setRowHeight(14);//设置每行高度是14

40. }

41. //设置列宽

42. for(int j=1;j<col;j++){

43. IColCell colcell = (IColCell) rd.getColCell((short)j);

44. colcell.setColWidth(28);//设置梅列宽度是28

45. }

46. //设置单元格的字体和字号大小

47. for(int p=1;p<=row;p++){

48. for(int t=1;t<=col;t++){

49. INormalCell inc = rd.getCell(p,(short)t);

50. inc.setFontName(宋体);//设置字体为宋体

51. inc.setFontSize((short)8);//设置字号大小为8

52. }

53. }

54. OutputStream os = new FileOutputStream(raqPath+“/”+raqName);

55. ReportUtils.write(os, rd);

56. }

57.

58. public static void main(String [] args) throws Exception{

59. ApiEditRaq_iframe aer = new ApiEditRaq_iframe();

60. aer.ApiEditRaq_iframe();

61. }

62.}

在设计器中打开新的sxzt.raq,大小如下:

页面展示效果如下图:

这样就比之前的报表小了很多,放到iframe里面就不会出现滚动条了。

注意:我这里是直接给报表的行高,列宽设置了固定的值,但是在不同的情况下,行高和列宽的值需要用iframe的高度和宽度分别除以报表的总行数和总列数得到。

热门文章