张帆
张帆
Published on 2025-12-30 / 80 Visits
0
0

打印使用教程

打印模块

1. 概述

1.1 产品简介

打印模块(framework-print)是 IMOM 框架的一个模块,用于快速集成打印功能。
支持打印方案自动发布, 部署新环境时无需迁移打印方案
与imom-framework框架深度集成, 可快速获取集成数据

2. 快速开始

2.1 引入依赖

<dependency>
    <groupId>com.sie.mbm.mom</groupId>
    <artifactId>framework-print</artifactId>
</dependency>

2.2 定义打印方案

打印方案是指一个打印模板使用的数据集, 目前支持单表数据和复杂数据获取

2.2.1 单表数据

Entity类增加 @PrintPlan注解, 表示这个表可以用于打印, 同时要确保系统存在TypicalProcess的Mapper类, 用于获取数据, 采用撰易生成的代码默认包含Mapper

@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
@Table(value = "sie_mpm_typical_process",camelToUnderline = true, comment = "典型工序信息",dataSource = "mpm-rds")
@PrintPlan(name = "典型工序打印")
@PrintScheme(name = "典型工序信息")
public class TypicalProcess extends BaseEntity {
    /**
     * 主键ID
     */
    @Id(keyType = KeyType.Generator, value = KeyGenerators.snowFlakeId)
    private Long id;

    /**
     * 代码
     */
    private String workstepCode;

    /**
     * 名称
     */
    private String workstepName;

    /**
     * 简称
     */
    private String abbreviation;

    /**
     * 类别
     */
    private String category;
}

2.2.2 复杂数据

复杂数据的打印方案需集成 AbstractBillPrintable, 同时 AbstractBillPrintable实现类需增加 @PrintPlan注解, @PrintScheme注解表示打印的属性分类, @PrintSchemeColumn注解表示打印的属性

@Data
@Component
@PrintPlan(name = "客户打印")
@PrintScheme(name = "客户信息")
public class Customer extends AbstractBillPrintable {
    /**
     * ID
     */
    @PrintSchemeColumn(name = "主键")
    private String id;
    /**
     * 编号
     */
    @PrintSchemeColumn(name = "编码")
    private String no;

    /**
     * 日期
     */
    private Date date;

    /**
     * 订单
     */
    public Order order;

    /**
     * 获取数据方法, 返回打印所有需要的数据集合, Key为@PrintScheme注解定义的code, Value为数据集合
     *
     * @param ids
     * @return
     */
    @Override
    public Map<String, List<?>> printData(List<String> ids) {
        Map<String, List<?>> result = new HashMap<>();

        List<Customer> customers = new ArrayList<>();
        customers.add(new Customer() {{
            setId("3");
            setNo("NOC004");
            setDate(new Date());
        }});
        customers.add(new Customer() {{
            setId("4");
            setNo("NOC004");
            setDate(new Date());
        }});
        result.put(Customer.class.getSimpleName(), customers);
        List<Order> orders = new ArrayList<>();
        orders.add(new Order() {{
            setId("77");
            setOrderNo("ON004");
            setOrderDate(new Date());
        }});
        result.put(Order.class.getSimpleName(), orders);
        return result;
    }
  
}

@Data
@PrintScheme(name = "订单主表")
public class Order {
    /**
     * 订单ID
     */
    private String id;
    /**
     * 订单编号
     */
    private String orderNo;

    /**
     * 订单日期
     */
    private Date orderDate;

    private String customerNo;

    /**
     * 订单明细
     */
    public List<OrderDetail> orderDetails;

}

2.3 定义打印预览数据

打印预览数据用于设计模板是查看效果, 目前支持支持查询第一条数据和手工创建预览数据, 由 @PrintPlan注解配置, PrintPlanpreviewDataStrategy属性定义预览策略, 默认配置的是取第一条数据,当配置的是 PreviewDataStrategy.SPECIFY, 表示手工创建预览数据, 需要同时维护 specifyDataClass属性

2.4 启动后端

启动后端服务, 默认会自动上传打印方案, 日志如下

2025-12-30 10:07:05.906  INFO 19524 --- [  imom-task-v-1] [traceId-2005822923015516160] .s.m.m.f.p.c.PrintMetadataInitialization : 找到1个打印方案, 开始解析打印方案
2025-12-30 10:07:05.916  INFO 19524 --- [  imom-task-v-1] [traceId-2005822923015516160] .s.m.m.f.p.c.PrintMetadataInitialization : 保存打印方案, 共 1 个, 方案名称: [典型工序信息]

2.5 配置打印模板

2.4.1 进入前端 打印模板管理页面
2.4.2 新增打印模板, 打印方案名称选择 2.2定义的打印方案, 保存
2.4.3 对上一步新增的打印模板进行设计, 点击操作栏设计按钮, 进入打印模板设计页面, 左侧的数据源可以看到打印方案配置的属性信息, 模板的设计可以参考 Stimulsoft Reports的文档
2.4.4 设计完模板后需要保存并启用
2.5.5 调用前端打印组件传入方案编码和需要打印的数据id即可打印

打印模板配置.gif

2.6 前端打印组件使用

http://192.168.168.207:32005/biz/report-print/base.html


Comment