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的高度和宽度分别除以报表的总行数和总列数得到。