打印二开常见问题(二)

栏目:云苍穹知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

打印二开常见问题(二)

1、如何把扩展的参数传入打印中

实现一个列表插件,在beforeDoOperation事件中放入key=extParam的参数,具体参考

public class passextlist extends AbstractListPlugin implements Plugin {

    @Override
    public void beforeDoOperation(BeforeDoOperationEventArgs args) {

        super.beforeDoOperation(args);
        Object source = args.getSource();
        if(source instanceof  PrintPreview)
        {
            PrintPreview  printPreview=(PrintPreview)source;
            HashMap<Object, Object> params = new HashMap<>();
            params.put("test",12313131);
            printPreview.getParameter().put("extParam",params);

        }

    }
}

在打印插件中就可以使用this.getExtParam()获取到传进来的参数


2、如何把打印生成的文件保存在附件面板中

//因为打印生成的临时文件,后续会自动清理,故而需要业务上传的文件服务器转存。
FileService fileService = FileServiceFactory.getAttachmentFileService();
InputStream inputStream = BosPrintServiceHelper.getFileInputStream(path);
path = fileService.upload(new FileItem("文件名.pdf", "/租户ID/数据中心ID/20230425/xxx/文件名.pdf", inputStream));

try {

    //2.附件绑定目标单据
    List<AttDto> attDtoList = new ArrayList<>();

    AttDto attDto = new AttDto();
    
    //绑定文件服务器中的路径
    attDto.setPath(path);

    //单据附件标识
    attDto.setAttKey("attachmentpanel");

    //文件大小(字节数)
    attDto.setSize(Long.valueOf(

            AttachmentServiceHelper.getFileSizeByPath(attDto.getPath())));

    attDtoList.add(attDto);

    //第一个参数为目标单据标识;第二个参数为目标单据pkId,第三个参数为附件列表
    Map<String, Object> bindingParam =

            AttachmentServiceHelper.genBindingParam("im_purreceivebill_test",

                    String.valueOf(id), attDtoList);

    //绑定接口返回结果
    Map<String, Object> resultMap = AttachmentServiceHelper.bindingAttachment(bindingParam);

    if ((boolean) resultMap.get("success")) {

        //成功刷新界面,即绑定附件在单据界面上

        this.getView().updateView();

    }

} catch (Exception e) {

    throw new KDBizException(e.getMessage());

}

具体实现可以参考:打印模板生成附件保存在单据中 (kingdee.com)


3、如何调用云打印接口

PrtAttach prtAttach = BosPrintServiceHelper.doPrintDirect(String printerId,PrintWork work)

printId打印机id

调用此接口可以实现跳过预览,直接打印出纸的效果


4、如何把图片字段绑定到数据表格

/**
 * 打印图片控件,数据表格绑定图片
 */
public class BindImagePlugin extends AbstractPrintPlugin {

    @Override
    public void afterLoadData(AfterLoadDataEvent evt) {
        List<DataRowSet> dataRowSets = evt.getDataRowSets();
        for (DataRowSet dataRowSet : dataRowSets) {
            //获取单据体数据集合
            CollectionField applyentity = dataRowSet.getCollectionField("applyentity");
            List<DataRowSet> entityRows = applyentity.getValue();
            //图片地址需要是图片服务器的地址,不带域名
            List<String> imageUrls = Arrays.asList("/tenant_devcore_dev/xx/b1.webp?v=1.0",
                    "/tenant_devcore_dev/xx/b2.webp?v=1.0",
                    "/tenant_devcore_dev/xx/b3.webp?v=1.0");
            for (int index = 0; index < entityRows.size(); index++) {
                DataRowSet entityRow = entityRows.get(index);
                if(index<3){
                    //将图片信息添加到数据包
                    entityRow.put("entityImage",new ImageField(imageUrls.get(index)));
                }
            }
        }
    }

    @Override
    public void beforeOutputWidget(BeforeOutputWidgetEvent evt) {
        String widgetKey = evt.getWidgetKey();
        //数据表格
        if("DataGrid".equals(widgetKey)&&evt instanceof BeforeOutputGridEvent){
            BeforeOutputGridEvent event = (BeforeOutputGridEvent) evt;
            PWGridRowBo row = event.getGrid().getRow(1);
            //获取单元格
            PWGridCellBo cell = row.getCell(9);
            cell.setCellValue("purchase_apply_yby.applyentity","entityImage");
        }
        //图片控件
        if("Sign".equals(widgetKey)){
            //图片地址需要是图片服务器的地址,不带域名
            evt.setOutputValue(new ImageField("/tenant_devcore_dev/xx/q.webp?v=1.0"));
        }
    }
}


5、如何获取单据匹配的打印模板

使用打印模板工具类:kd.bos.print.matchtpl.TplMatcherUtil


6、如何隐藏打印模板控件

在打印插件的beforeOutputWidget事件中使用BeforeOutputWidgetEvent类中的方法实现

方法说明
void setHidden(boolean isHidden)true 隐藏控件不输出,false控件正常输出,隐藏控件后下方控件不会上移
void setHideMove(boolean hideMove)
隐藏控件后,下方控件可以上移


7、如何修改打印对单张单分录条数大小的限制

实现一个打印插件,继承AbstractPrintSeniorPlugin,然后在beforeInitDataVisitor事件中进行修改,例如:

public class AddPrintEntrySizePlugin extends AbstractPrintSeniorPlugin
{

    @Override
    public void beforeInitDataVisitor(DataVisitorEvent event) {
        super.beforeInitDataVisitor(event);
        event.setMaxEntrySize(xxx);
        event.setMaxQuerySize(xxx);
    }
}

maxEntrySize是单张单最大分录数,超出提示不让打印

maxBatchEntrySize是每批次最大分录数量

maxQuerySIze是单次查询最大数量,超出则分批处理

注意:此处修改需要谨慎进行,如果修改过大会影响系统稳定性


打印二开常见问题(二)

1、如何把扩展的参数传入打印中实现一个列表插件,在beforeDoOperation事件中放入key=extParam的参数,具体参考public class passextlist e...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息