打印模块
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注解配置, PrintPlan的 previewDataStrategy属性定义预览策略, 默认配置的是取第一条数据,当配置的是 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即可打印
