报表模板编辑

阅读(6044) 标签: 空白模板,

说明:

报表模板的编辑有两种方式:一种为读入一个已经存在的报表模板,对其进行修改后保存;另一种为创建一个空白报表模板,逐行逐列设置单元格属性,最后保存。

其中读入报表模板的示例参见2.1.1.1,修改属性和设置属性基本一样,如有不同之处,在介绍设置属性时会提出说明一下。因此本小节重点从创建空白报表——〉逐行逐列设置属性——〉保存报表模板 为主线,介绍例子代码的编写。

 

参考文件:CustomReport.java

创建空白报表

ReportDefine rd=new ReportDefine2(3,3);  //新建一个空白报表

 

  注意:ReportDefineReportDefine2的区别:若使用程序生成报表模板,可直接使用ReportDefineReportDefine2是为IDE使用开发的,直接提供以下一些功能:行列插入删除时能自动更新表达式、两个合并格的相交边框必须相同等

设置报表属性

常规

一般常规属性可以直接在ReportDefine对象中设置,如下

rd.setSubmit(ReportDefine.SUBMIT_UPDATABLE);  //设置数据提交方案,ReportDefine.SUBMIT_UPDATABLE代表要保存的单元格,ReportDefine.SUBMIT_ALL代表所有单元格,ReportDefine.SUBMIT_UPDATABLE_WRITABLE代表要保存的和可写的单元格

 

rd.setReportType(ReportDefine.RPT_NORMAL);  //设置报表样式,ReportDefine.RPT_NORMAL代表普通报表,ReportDefine.RPT_LINE代表行式报表



打印

  PrintSetup打印设置类

 

PrintSetup ps = new PrintSetup();

ps.setBackGraphPrinted(false);  //是否打印背景图

ps.setPaper(PrintSetup.A4_PAPERSIZE);  //设置纸张大小为A4,类似的还有别的纸张尺寸,详看PrintSetup的帮助

ps. setBottomMargin(25);  //设置下边距(mm),类似的还有设置上、下、左、右等边距

ps. setColTableHeaderAndFooterMode(PrintSetup.PRINT_FIRST_PAGE);  //设置列表头和列表尾的打印方式, PrintSetup.PRINT_FIRST_PAGE代表只第一页打印,PrintSetup.PRINT_PER_PAGE代表每页都打

 

ps. setHAlign(PrintSetup. HALIGN_CENTER); //设置打印水平对齐位置,PrintSetup. HALIGN_CENTER代表水平居中,PrintSetup. HALIGN_LEFT代表水平居左,PrintSetup. HALIGN_RIGHT代表水平居右

 

ps. setLayout(PrintSetup.LAYOUT_COL); //设置按数据行数分页、一张纸打印多页时的打印顺序,PrintSetup.LAYOUT_COL代表先列后行,PrintSetup.LAYOUT_ROW代表先行后列

 

ps. setLayoutColNum(3); //设置按数据行数分页且每张纸打印多页(NxP)时,一张纸上的布局列数P

ps. setLayoutRowNum(2); //设置按数据行数分页且每张纸打印多页(NxP)时,一张纸上的布局行数N

 

ps. setOrientation(PrintSetup.LANDSCAPE); //设置纸张方向,PrintSetup.LANDSCAPE代表横向,PrintSetup.PORTRAIT代表竖向

 

ps. setPageHeaderAndFooterXMode(PrintSetup.PRINT_SPLITTED_FIRST_PAGE); //设置页眉与页脚横向分页时打印方式,PrintSetup.PRINT_SPLITTED_FIRST_PAGE代表仅首页打印切分部分,PrintSetup.PRINT_SPLITTED_FIRST_PAGE代表每页都打印切分部分,PrintSetup.PRINT_FIRST_PAGE代表只第一页打印,PrintSetup.PRINT_PER_PAGE代表每页都打

 

ps. setPageHeaderAndFooterYMode(PrintSetup.PRINT_SPLITTED_FIRST_PAGE); //设置页眉与页脚纵向分页时打印方式,PrintSetup.PRINT_FIRST_PAGE代表只第一页打印,PrintSetup.PRINT_PER_PAGE代表每页都打

 

ps. setPagerStyle(PrintSetup.PAGER_NONE); //设置分页方式,PrintSetup.PAGER_NONE代表不分页,PrintSetup.PAGER_ROW代表按行数分页,PrintSetup.PAGER_SIZE代表按纸张尺寸分页

 

ps. setPaperSize(360, 840); //设置自定义纸张大小mm

 

ps. setRowNumPerPage(5); //设置按数据行数分页时每页的数据行数

ps. setTableColumnNum(3); //设分栏数

 

ps. setTitleXMode(byte mode); //设置标题横向分页时打印方式,PrintSetup.PRINT_SPLITTED_FIRST_PAGE代表仅首页打印切分部分,PrintSetup.PRINT_SPLITTED_FIRST_PAGE代表每页都打印切分部分,PrintSetup.PRINT_FIRST_PAGE代表只第一页打印,PrintSetup.PRINT_PER_PAGE代表每页都打

 

ps. setTitleYMode(byte mode); //设置标题纵向分页时打印方式,PrintSetup.PRINT_FIRST_PAGE代表只第一页打印,PrintSetup.PRINT_PER_PAGE代表每页都打

 

ps. setVirtualPrinter(java.lang.String printerName);  //设置虚拟打印机名,用于带表格线的文本报表打印

ps. setZoomMode(PrintSetup.ZOOM_NONE); //设置缩放打印方式,PrintSetup.ZOOM_BY_SCALE代表按指定比例缩放(需要填入缩放比例)PrintSetup.ZOOM_HEIGHT代表按高缩放,报表高度与纸高匹配,PrintSetup.ZOOM_NONE代表不缩放,PrintSetup.ZOOM_TO_PAGE代表缩放到指定的页数(需要填入几页宽,几页高)PrintSetup.ZOOM_WIDTH代表按宽缩放,报表宽度与纸宽匹配

 

rd.setPrintSetup( ps );  //将打印属性设置给ReportDefine

 

  PrintFrame打印对话框类:

PrintFrame pf=new PrintFrame(iReport,null);  //iReport为计算后的报表,报表运算,参见2.1.1

pf.setColumns(2);   //设置报表的分栏数

pf.setPrintablePages(1);  //设置要打印的页号,可以多次调以设置多个页

pf.setPrintablePages(2,6);   //设置要打印的连续页号 ,包括起始和终止页号

pf.setHorizontalAlign(PrintSetup.HALIGN_CENTER);  //设置横向对齐方式,“PrintSetup.HALIGN_CENTER”表示居中; “PrintSetup.HALIGN_LEFT”表示居左; “PrintSetup.HALIGN_RIGHT”表示居右

PageFormat pageFormat=new PageFormat();  //定义描述打印页面方向和大小的对象

Paper paper=new Paper();   //定义一个新纸张对象

paper.setSize(684,792);   //设置纸张的大小

paper.setImageableArea(100,100,594,702) ;   //设置打印区域的大小

pageFormat.setPaper(paper);  //PageFormat对象设置Paper对象。

pf.setPrintPageFormat(pageFormat);   //设置打印纸张的页面设置

pf. setPrintZoomType(PrintSetup.ZOOM_WIDTH);  //设置打印时对报表的缩放类型,取值为: PrintSetup.ZOOM_NONE 表示不缩放;取值为:PrintSetup.ZOOM_WIDTH 表示按宽缩放,报表宽度与纸宽匹配;取值为:PrintSetup.ZOOM_HEIGHT 表示按高缩放,报表高度与纸高匹配;取值为:PrintSetup.ZOOM_BY_SCALE 表示按指定比例缩放(需要填入缩放比例)

pf.setPrintZoomScale(100);    //设置打印时对报表的缩放比例,该比例为百分数,例如100为原值大小。

pf.setDisplayScale(100);    //设置预览报表时对报表的缩放比例,修改该比例仅影响显示,跟实际打印输出没有关系,该比例为百分数,例如100为原值大小。

pf.goToPage(1);  //在当前的页面定义范围内设置要显示的页面,页号从1开始

pf.goToFirstPage(1);   //设置当前定义范围内的首页

pf.goToLastPage (6);  //设置当前定义范围内的末页

pf.goToPreviousPage (5);   //设置当前定义范围内的前页

pf.goToNextPage (6);  //设置当前定义范围内的后页

pf.getReportPane();  //获取显示报表的面板

pf.getPrinterJob();   //获取当前的打印任务对象,可以自己取消或者获取对象里面的任何有意义的信息。注意:只有调用了类似于Print的方法之后,该对象才不为null

pf.backgroundPrinting ();  //直接在后台打印报表,不显示打印窗口,不选择打印机

pf.print();   //输出打印任务

pf.directPrint (true);  //将报表直接发送到打印机进行打印,参数为true表示需要选择打印机,参数为false表示不需要选择打印机

导出

ExportConfig expConfig = new ExportConfig();   //新建导出属性

 

expConfig.setExcelHiddenColExported(false);    //设导出到Excel时是否导出隐藏列

expConfig.setExcelHiddenRowExported(false);   //设导出到Excel时是否导出隐藏行

expConfig.setExcelFilePassword("password");    //设置Excel文件的口令

 

expConfig.setPDFOwnerPassword("password");  //设置导出PDF文件时拥有者的口令

expConfig.setPDFAssembly(true);     //设置导出PDF文件时是否允许文档汇编

expConfig.setPDFCopy(true);         //设置导出PDF文件时是否允许复制

expConfig.setPDFDegradedPrinting(true);    //设置导出PDF文件时是否允许打印

expConfig.setPDFFillIn(true);       // 设置导出PDF文件时是否允许填写表格栏

expConfig.setPDFModifyAnnotations(true);    //设置导出PDF文件时是否允许常规编辑、注释

expConfig.setPDFModifyContents(true);    //设置导出PDF文件时是否允许更改文档

expConfig.setPDFScreenReaders(true);    //设置导出PDF文件时是否启用视障人士内容访问

expConfig.setPDFUserPassword("password");    //设导出到PDF文件时的用户口令

 

expConfig.setWordPassword("password");    //设置Word文件的口令

 

rd.setExportConfig( expConfig);        //将导出属性设置给ReportDefine

 

背景图

BackGraphConfig bgc = new BackGraphConfig();  //构造背景图属性

 

bgc.setDispMode(BackGraphConfig.DISP_PER_PAGE);  //设置背景图显示方式

BackGraphConfig.DISP_PER_PAGE代表每页显示,BackGraphConfig.DISP_NONE代表不显示

 

bgc.setImageSource(BackGraphConfig.SOURCE_TEXT);  //设置背景图的生成来源

BackGraphConfig.SOURCE_NONE代表不设置"空白"BackGraphConfig.SOURCE_PICTURE代表用"图片"BackGraphConfig.SOURCE_TEXT代表用"水印"

 

bgc.setType(BackGraphConfig.TYPE_URL);  //设置背景图配置类型,

BackGraphConfig.TYPE_EXP代表表达式串,BackGraphConfig.TYPE_URL代表url  或文本

   

bgc.setValue("E:/files/pic.jpg");  //设置图片的URL或表达式串

参数typeTYPE_URL时此参数表示URL,为TYPE_EXP时此参数表示表达式串

   

bgc.setMode(BackGraphConfig.TEXT_NORMAL); //设置背景图片或水印的样式

图片样式:BackGraphConfig.MODE_NONE代表左上,BackGraphConfig.MODE_FILL代表填充,BackGraphConfig.MODE_TILE代表平铺

水印样式:BackGraphConfig.TEXT_NORMAL代表水平,BackGraphConfig.TEXT_TILT代表倾斜

 

bgc.setValue("raqsoft水印文字");    //设置水印的文本内容或表达式串

参数typeTYPE_URL时此参数表示文本,为TYPE_EXP时此参数表示表达式串

 

bgc.setFontName("黑体");    //设置水印文字的字体名

bgc.setFontSize(20);      //设置水印文字的字号

bgc.setTextColor(165536);    //设置水印文字的颜色值

bgc.setTransparency(10);    //设置水印文字的透明度,值为0100

bgc.setTextGap(60);      //设置水印文字平铺时的文本间隔

 

rd.setBackGraphConfig( bgc );  //把背景图属性设置给ReportDefine

 

子报表

SubReportMetaData subReport = new SubReportMetaData();  //构造子报表元数据

SubReportConfig src = new SubReportConfig();  //构造子报表定义

src.setName("subReport1");  //设置子报表名称

src.setURLType(SubReportConfig.TYPE_ABSOLUTE);  //设置子报表定义的URL类型为绝对路径

src.setURL("C:/abc.rpx");  //设置子报表的路径

subReport.addSubReportConfig(src);  //把子报表定义添加到子报表元数据中

rd.setSubReportMetaData( subReport );  //把子报表元数据赋给ReportDefine

设置行属性

IRowCell rowcell=rd.getRowCell(1);  //根据行号获得行首格

rowcell.setRowType(IRowCell.TYPE_TITLE_HEADER);  //对行首格设置行类型

rowcell.setBreakPage(true);  //设行后是否分页

rowcell.setBreakPageExp("1==1");  //设行后是否分页表达式

rowcell.setRowHeight(50);  //设行高

rowcell.setRowHeightExp("100/2");  //设行高表达式

rowcell.setRowVisible(true);  //设行是否可见

rowcell.setRowVisibleExp("2>1");  //设行是否可见的表达式

rowcell.setGroupHeaderLevel(1);  //设组头级别

设置列属性

//IColCell colCell = rd.getColCell((short)1);

colCell.set…..//与设置行属性类似

设置单元格属性

设置合并格

Area area=new Area(1,(short)1,1,(short)3);  //构造一个合并区域

try {

ReportUtils.mergeReport(rd,area);  //将报表模板依据合并区域的定义执行合并操作

} catch (Exception e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

注意:合并后的单元格如果需要修改外观、数据值、对齐方式等属性,直接对首格设置即可,首格为左上角的单元格

 

设置边框、字体、颜色等外观属性

设置边框

for(int i=2;i<4;i++){

for(int j=1;j<4;j++){

rd.setBBColor(i,(short)j, -16763905); //设定下边框线色

rd.setBBStyle(i,(short)j,  INormalCell.LINE_SOLID); //设定下边框类型

rd.setBBWidth(i,(short)j, (float) 0.75); //设定下边框线粗

//左边框

rd.setLBColor(i,(short)j, -16763905);

rd.setLBStyle(i,(short)j, INormalCell.LINE_SOLID);

rd.setLBWidth(i,(short)j, (float) 0.75);

//右边框

rd.setRBColor(i,(short)j, -16763905);

rd.setRBStyle(i,(short)j, INormalCell.LINE_SOLID);

rd.setRBWidth(i,(short)j, (float) 0.75);

//上边框

rd.setTBColor(i,(short)j, -16763905);

rd.setTBStyle(i,(short)j, INormalCell.LINE_SOLID);

rd.setTBWidth(i,(short)j, (float) 0.75);

}

}

设置单元格值、字体、字号、颜色、对齐等

INormalCell inc=rd.getCell(1,(short)1);

inc.setValue("雇员信息列表");  //设置单元格值

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

inc.setFontSize((short)18);  //设置字号

inc.setForeColor(-16777063);  //设置前景色

inc.setHAlign(INormalCell.HALIGN_CENTER);  //设置纵向对齐方式

       

设置单元格表达式

INormalCell inc4=rd.getCell(3,(short)1);

IByteMap map1=new ByteMap();

map1.put(INormalCell.VALUE,"ds1.select(雇员ID,false,雇员ID<@arg3)");  //设置单元格的数据值表达式

map1.put(......);  //设置其他属性的表达式

inc4.setExpMap(map1); 

   

设置参数

ParamMetaData pmd=new ParamMetaData();  //构造参数元数据

Param param = new Param();  //构造参数定义

param.setParamName("arg1");  //设置参数名

param.setDataType(Types.DT_DATE);  //设置参数数据类型

param.setParamType(Param.PARAM_NORMAL);  //设置参数类型(普通参数或动态参数)

param.setValue("1958-01-01");  //设参数缺省值

   

Param param1 = new Param();

param1.setParamName("arg2");

param1.setDataType(Types.DT_DATE);

param1.setParamType(Param.PARAM_NORMAL);

param1.setValue("1978-01-01");

   

pmd.addParam(param);  //把参数定义添加到参数元数据中

pmd.addParam(param1);   

rd.setParamMetaData(pmd);  //把参数元数据赋给ReportDefine

设置数据集

DataSetMetaData dsmd=new DataSetMetaData();  //构造数据集元数据

SQLDataSetConfig sdc=new SQLDataSetConfig();  //构造数据集定义

sdc.setName("ds1");  //设置数据集名

sdc.setSQL("SELECT 雇员.雇员ID,雇员.名字,雇员.职务 FROM 雇员 WHERE 雇员.出生日期 >? AND  雇员.出生日期 <?");  //设置sql语句

sdc.addParam();  //添加参数

sdc.addParam();

sdc.setParamExp(0,"arg1");  //设置参数

sdc.setParamExp(1,"arg2");

dsmd.addDataSetConfig(sdc);  //把数据集定义添加到数据集元数据

rd.setDataSetMetaData(dsmd);  //把数据集元数据赋给ReportDefine

保存报表

try {

ReportUtils.write("E:/test.rpx",rd);  //ReportDefine保存到文件

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}