EAS 通过套打模板实现后台生成 PDF 文件
一、 文档说明
在 EAS 开发中,如果需要合同调用套打模板自动生成 PDF 进行
档案归档备份,可通过以下步骤进行开发实现;
二、 相关代码
1、自定义标准打印 DataProvider 类
改造说明:DefaultNoteDataProvider 继承了 AbstractPrintDataProvider 这个类,套打会调
用 getData 方法获取需要填充到模板的数据。
将标准代码 DefaultNoteDataProvider 反编译后新建 DefaultDataProvider 类
将此类中的前台查询方法修改为后台查询方法;如图:
源码参考:
DefaultDataProvider.txt
2、具体打印实现代码如下:
实际代码:
protected void _PDFexport(Context ctx)throws BOSException
final Context ctxa = ctx;
ArrayList list=new ArrayList();
String sid="4i2S7VVRS+CrNORw1sTB0kpE9J8=";
list.add(sid);
//输出流
OutputStream outputStream=null;
//通过传入的单据 ID 来获取 BOSUuid
BOSUuid uuid = BOSUuid.read(sid);
//获取类型
BOSObjectType bosobjecttype = uuid.getType();
//根据实体找到默认 query
String tableName = entity.getExtendedProperty("defaultF7Query");
String tableName = "com.kingdee.eas.cp.bc.app.BizAccountBillForR1PrintQuery";
IMetaDataPK tdquery = new MetaDataPK(tableName);
//query 主数据
DefaultDataProvider provider = new DefaultDataProvider(ctx,list,tdquery);
provider.addMetaDataPK("BizAccountBillForR1PrintQuery",
//
//
MetaDataPK("com.kingdee.eas.cp.bc.app.BizAccountBillForR1PrintQuery"));
new
//各单据模版地址
String tDFileName="/FI/CPBC/bizaccount/accmount2019.r1-print";
try {
outputStream=new FileOutputStream("D:"+File.separator+"1.pdf");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
//远程协议进行 ctx 赋值
WebContextUtil.initRpcConfig(ctxa);
String originalAppServerType=System.getProperty("APP_SERVER_TYPE");
try {
System.setProperty("APP_SERVER_TYPE", "apusic");
KDNoteWebServerHelper helper =new KDNoteWebServerHelper();
helper.setContextProvider(new IContextProvider(){
public IBizContext getBizContext(Context bosCtx) {
IBizContext bizCtx=null;
try {
bizCtx
= KDNoteHelper.makeContext(ctxa);
} catch (ConnectException e) {
e.printStackTrace();
}
return bizCtx;
}
});
helper.exportPDF(tDFileName, provider, outputStream);
} finally {
if(originalAppServerType==null) {
System.clearProperty("APP_SERVER_TYPE");
} else {
System.setProperty("APP_SERVER_TYPE", originalAppServerType);
}
}
}