/*
* Copyright (C) 2010---2014 星星(wuweixing)<349446658@qq.com>
*
* This file is part of Wabacus
*
* Wabacus is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.wabacus.config.dataexport;
import java.util.List;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Rectangle;
import com.wabacus.config.Config;
import com.wabacus.config.ConfigLoadManager;
import com.wabacus.config.component.ComponentConfigLoadManager;
import com.wabacus.config.component.IComponentConfigBean;
import com.wabacus.config.component.application.report.ReportBean;
import com.wabacus.config.component.container.AbsContainerConfigBean;
import com.wabacus.config.xml.XmlElementBean;
import com.wabacus.exception.WabacusConfigLoadingException;
import com.wabacus.system.buttons.AbsButtonType;
import com.wabacus.system.buttons.PrintButton;
import com.wabacus.system.intercept.AbsPdfInterceptor;
import com.wabacus.util.Consts;
public class PDFExportBean extends AbsDataExportBean
{
private String pdftemplate;
private int pagesize=Integer.MIN_VALUE;
private Rectangle pdfpagesizeObj;
private float width;
private boolean fullpagesplit;//指定报表分页时,是否每页都显示所有内容
private int titlefontsize;
private int dataheaderfontsize;
private int datafontsize;
private boolean isPrint;
private AbsPdfInterceptor interceptorObj;//拦截器对象
public PDFExportBean(IComponentConfigBean owner,String type)
{
super(owner,type);
}
public int getPagesize()
{
return pagesize;
}
public Rectangle getPdfpagesizeObj()
{
return pdfpagesizeObj;
}
public String getPdftemplate()
{
return pdftemplate;
}
public void setPdftemplate(String pdftemplate)
{
this.pdftemplate=pdftemplate;
}
public float getWidth()
{
return width;
}
public boolean isPrint()
{
return isPrint;
}
public void setPrint(boolean isPrint)
{
this.isPrint=isPrint;
}
public boolean isFullpagesplit()
{
return fullpagesplit;
}
public int getTitlefontsize()
{
return titlefontsize;
}
public int getDataheaderfontsize()
{
return dataheaderfontsize;
}
public int getDatafontsize()
{
return datafontsize;
}
public AbsPdfInterceptor getInterceptorObj()
{
return interceptorObj;
}
public void setInterceptorObj(AbsPdfInterceptor interceptorObj)
{
this.interceptorObj=interceptorObj;
}
public void loadConfig(XmlElementBean eleDataExport)
{
super.loadConfig(eleDataExport);
if(this.isPrint)
{
pdftemplate=eleDataExport.getContent();
}else
{
pdftemplate=eleDataExport.attributeValue("template");
}
if(pdftemplate!=null) pdftemplate=pdftemplate.trim();
String strpagesize=eleDataExport.attributeValue("pagesize");
if(strpagesize!=null&&!strpagesize.trim().equals(""))
{
this.pagesize=Integer.parseInt(strpagesize);
}
String pdfpagesize=eleDataExport.attributeValue("printpagesize");
if(pdfpagesize==null||pdfpagesize.trim().equals("")) pdfpagesize="A3";
try
{
pdfpagesizeObj=(Rectangle)PageSize.class.getDeclaredField(pdfpagesize).get(null);
if(pdfpagesizeObj==null)
{
pdfpagesizeObj=PageSize.A3;
}
}catch(Exception e)
{
throw new WabacusConfigLoadingException("加载组件"+this.owner.getPath()+"数据导出功能失败,配置的pagesize属性"+pdfpagesize+"不支持",e);
}
String strwidth=eleDataExport.attributeValue("width");
if(strwidth!=null&&!strwidth.trim().equals(""))
{
width=Float.parseFloat(strwidth);
}
String fullpagesplit=eleDataExport.attributeValue("fullpagesplit");
if(fullpagesplit!=null&&!fullpagesplit.trim().equals(""))
{
this.fullpagesplit=!fullpagesplit.toLowerCase().trim().equals("false");
}else
{
this.fullpagesplit=true;
}
String titlefontsize=eleDataExport.attributeValue("titlefontsize");
if(titlefontsize!=null&&!titlefontsize.trim().equals("")) this.titlefontsize=Integer.parseInt(titlefontsize);
String dataheaderfontsize=eleDataExport.attributeValue("dataheaderfontsize");
if(dataheaderfontsize!=null&&!dataheaderfontsize.trim().equals("")) this.dataheaderfontsize=Integer.parseInt(dataheaderfontsize);
String datafontsize=eleDataExport.attributeValue("datafontsize");
if(datafontsize!=null&&!datafontsize.trim().equals("")) this.datafontsize=Integer.parseInt(datafontsize);
String interceptor=eleDataExport.attributeValue("interceptor");
if(interceptor!=null)
{
interceptor=interceptor.trim();
if(interceptor.equals(""))
{
this.interceptorObj=null;
}else
{
Object objTmp=null;
try
{
objTmp=ConfigLoadManager.currentDynClassLoader.loadClassByCurrentLoader(interceptor).newInstance();
}catch(Exception e)
{
throw new WabacusConfigLoadingException("为组件"+this.owner.getPath()+"配置的导出到PDF文件中指定的拦截器类"+interceptor+"无法实例化",e);
}
if(!(objTmp instanceof AbsPdfInterceptor))
{
throw new WabacusConfigLoadingException("为组件"+this.owner.getPath()+"配置的导出到PDF文件中指定的拦截器类"+interceptor+"没有继承框架父类"
+AbsPdfInterceptor.class.getName());
}
this.interceptorObj=(AbsPdfInterceptor)objTmp;
}
}
}
public void doPostLoad()
{
super.doPostLoad();
if(this.pagesize==Integer.MIN_VALUE&&this.owner instanceof ReportBean)
{
this.pagesize=((ReportBean)this.owner).getLstPagesize().get(0);
}
if(this.isPrint)
{
List<AbsButtonType> lstPrintButtons=null;
if(this.owner.getButtonsBean()!=null) lstPrintButtons=this.owner.getButtonsBean().getLstPrintTypeButtons(Consts.PRINTTYPE_PRINT);
if(lstPrintButtons==null||lstPrintButtons.size()==0)
{
AbsButtonType buttonObj=Config.getInstance().getResourceButton(null,this.owner,
Consts.M_PRINT_DEFAULTBUTTONS.get(Consts.PRINTTYPE_PRINT),PrintButton.class);
buttonObj.setDefaultNameIfNoName();
if(this.owner instanceof AbsContainerConfigBean)
{
buttonObj.setPosition("top");//对于容器,默认位置在顶部
}
ComponentConfigLoadManager.addButtonToPositions(this.owner,buttonObj);
}
lstPrintButtons=this.owner.getButtonsBean().getLstPrintTypeButtons(Consts.PRINTTYPE_PRINT);
for(int j=0;j<lstPrintButtons.size();j++)
{
((PrintButton)lstPrintButtons.get(j)).setPdfPrint(true);
}
}
}
}