如何实现按每条分录数据分页打印

1 问题描述
目前打印模板中数据表格控件有一个“每页打印行数”属性可以设置每页固定打印的行数,但当打印模板中配置了子数据表格的时候是不可用的(看不见这个属性),因此输出此文章提供一些解决方案。这个属性没有出现的原因是产品考虑到添加子数据表格后,不能保证固定数据表格的每页打印行数。


2 解决方法
打印模板配置:

继承打印插件kd.bos.print.core.plugin.AbstractPrintPlugin,在afterLoadData里面把每一条分录数据划分出来,分录的DataRowSet里面包含了子单据的数据,所以子单据不用再划分了。
两条DataRowSet对应列表上面的两条数据

看0这条DataRowSet里面存了分录数据和此条数据的id,这块是只会加载出打印模板中配置字段的数据(id会默认加载),可以在beforeLoadData事件中设置PrtDataSource类中的queryField字段来设置需要需要加载数据的字段。

key为“entryentity”里面存了3条分录数据,每一条数据也是DataRowSet类型,把每条数据拆分出来就能实现上面的需求

拆分后的数据:

打印效果:

二开代码:
package printplugin;
import kd.bos.logging.Log;
import kd.bos.logging.LogFactory;
import kd.bos.print.core.data.DataRowSet;
import kd.bos.print.core.data.datasource.PrtDataSource;
import kd.bos.print.core.data.field.CollectionField;
import kd.bos.print.core.plugin.AbstractPrintPlugin;
import kd.bos.print.core.plugin.event.AfterLoadDataEvent;
import kd.sdk.plugin.Plugin;
import java.util.ArrayList;
import java.util.List;
/**
* 新的打印插件
*/
public class PagingPrint extends AbstractPrintPlugin implements Plugin {
private static Log log= LogFactory.getLog(PagingPrint.class);
public static final String ENTRYKEY="entryentity";
public static final String TPLTABLEKEY="DataGrid";
public static final String FORMID="pio1_sufhsf";
@Override
public void afterLoadData(AfterLoadDataEvent evt) {
//获取待打印的数据
List<DataRowSet> dataRowSets = evt.getDataRowSets();
List<DataRowSet> result=new ArrayList();
if(FORMID.equalsIgnoreCase(evt.getDataSource().getDsName()))
{
for (DataRowSet dataRowSet : dataRowSets) {
//获取模板绑定业务实体的分录数据(只包含模板中配置字段的数据)
如何实现按每条分录数据分页打印
1 问题描述目前打印模板中数据表格控件有一个“每页打印行数”属性可以设置每页固定打印的行数,但当打印模板中配置了子数据表格的时候是...
点击下载文档文档为doc格式
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
上一篇
已经是第一篇



