Appearance
表格打印扩展开发
打印模板配置扩展指令
打印模板中表格控件的 打印风格
属性配置为 printOpinionList
新建项目
pom.xml 中引入 co-service-macro-sdk-x.x.x.jar
、co-service-macro-print-x.x.x.jar
xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.kanq</groupId>
<artifactId>co-service-ext</artifactId>
<version>1.0.1</version>
<packaging>jar</packaging>
<name>co_service_web_ext_demo</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>com.kanq</groupId>
<artifactId>co-service-macro-sdk</artifactId>
<version>1.x.x</version>
</dependency>
<dependency>
<groupId>com.kanq</groupId>
<artifactId>co-service-macro-print</artifactId>
<version>1.0.58</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.kanq</groupId>
<artifactId>co-service-ext</artifactId>
<version>1.0.1</version>
<packaging>jar</packaging>
<name>co_service_web_ext_demo</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>com.kanq</groupId>
<artifactId>co-service-macro-sdk</artifactId>
<version>1.x.x</version>
</dependency>
<dependency>
<groupId>com.kanq</groupId>
<artifactId>co-service-macro-print</artifactId>
<version>1.0.58</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
扩展接口实现
- 创建 java 类
com.kanq.PrintDemo
- 增加
private static byte[] printOpinionList(byte[] macroHead,byte[][] argv);
方法 - 增加指令注册注解
@Macro(name = "printOpinionList", describe = "意见列表打印")
注意
- 入参说明:
macroHead
请求头,参数不定,格式:form:2\r\nuser:1
argv
入参参数
- 出参说明:
- 字符串:json 格式
- 文件: 字节流
- 注解说明:
name
指令名称describe
接口描述 :::
macroHead 参数说明
addr
当前用户 IPclient
f: 函数,m:移动动busi
当前业务编号role
当前角色user
当前用户编号stat
当前流程状态tach
当前流程环节flow
当前打开流程form
当前打开表单prev
父级表单tent
指定租户编号trace
链路日志ticket
票据
- FormDemo.java
java
package com.kanq;
import com.kanq.print.printImpl.PrintImpl;
import com.kanq.print.printImpl.ext.PrintEntity;
import com.kanq.print.printImpl.ext.PrintGrid;
import com.kanq.print.printImpl.ext.PrintGridColn;
import com.kanq.print.printImpl.ext.PrintGridData;
import com.kanq.sdk.config.Macro;
import java.nio.charset.StandardCharsets;
public class PrintDemo {
@Macro(name = "printOpinionList", describe = "意见列表打印")
public static byte[] printOpinionList(byte[] macroHead, byte[][] argv){
byte[] parm_byte = argv[0];
// 获取xml
String xml = new String(parm_byte,StandardCharsets.UTF_8);
System.out.println("printOpinionList:"+xml);
// 获取处理打印拓展对象
PrintImpl kqcoPrint = new PrintImpl();
// 初始化打印实体对象
PrintEntity printEntity = kqcoPrint.getPrintEntity(xml);
// 获取xml中表头数据
String sHead = printEntity.getDataByKey("head");
// 获取xml中表值数据
String sData = printEntity.getDataByKey("data");
// 获取列表行列操作对象
PrintGrid grid = kqcoPrint.getPrintGrid(sHead, sData, xml);
PrintEntity gridRowEntity = null;
// 获取表格列行数量,以列表行数为循环次数处理---此为行列嵌套打印
for (int i = 0; i < grid.getRowCount(); i++) {
if (i == 0) {
// 列表的第一行默认为添加行数据子级
gridRowEntity = printEntity.addEntityToInner();
} else {
// 添加行数据下同级
gridRowEntity = gridRowEntity.addEntityToBottom();
}
// 设置当前高度
gridRowEntity.setHeigth(60);
// 设置当前Y轴偏移量(距离顶部)
gridRowEntity.setOffsetY(-1);
PrintEntity colnEntity = null;
// 获取表格指定下标行数据
PrintGridData gridData = grid.getRow(i);
// 获取表格列数量,循环处理
for (int j = 0; j < grid.getColnCount(); j++) {
if (j == 0) {
// 第一列默认为添加行数据子级,传参i标识列表行位置
colnEntity = gridRowEntity.addEntityToInner();
} else {
// 添加行数据下同级
colnEntity = colnEntity.addEntityToBottom();
}
// 获取表格指定下标列数据
PrintGridColn gridColn = grid.getColn(j);
/**
* getData,获取表格头和表格数据组装数据
* 设置当前打印文本内容
*/
colnEntity.setText(gridData.getData(i, j));
// 设置打印水平位置(赋值1或不设置默认居中,0:上对齐、1:垂直居中、2:下对齐)
colnEntity.setAlignY(gridColn.getAlginY());
// 设置当前宽度
colnEntity.setWidth(gridColn.getWidth(j));// 如果要取列的宽度
// 设置当前高度
colnEntity.setHeigth(20);
// 自定义设置列的宽
// colnEntity.setWidth(300);
// 自定义设置当前X轴偏移量(距离左部)
switch (j){
case 0:
colnEntity.setOffsetX(10);
break;
case 1:
colnEntity.setOffsetX(20);
break;
case 2:
colnEntity.setOffsetX(350);
}
// 设置边框(0为无边框,不设置为默认有边框且宽度为3.细线,代表线粗细程度:1.中等、2.粗线、3.细线)
colnEntity.setBorder(0);
}
}
// 获取生成的xml数据
String[] parm = printEntity.toXml();
System.out.println("return:"+parm[0]);
return parm[0].getBytes(StandardCharsets.UTF_8);
}
}
package com.kanq;
import com.kanq.print.printImpl.PrintImpl;
import com.kanq.print.printImpl.ext.PrintEntity;
import com.kanq.print.printImpl.ext.PrintGrid;
import com.kanq.print.printImpl.ext.PrintGridColn;
import com.kanq.print.printImpl.ext.PrintGridData;
import com.kanq.sdk.config.Macro;
import java.nio.charset.StandardCharsets;
public class PrintDemo {
@Macro(name = "printOpinionList", describe = "意见列表打印")
public static byte[] printOpinionList(byte[] macroHead, byte[][] argv){
byte[] parm_byte = argv[0];
// 获取xml
String xml = new String(parm_byte,StandardCharsets.UTF_8);
System.out.println("printOpinionList:"+xml);
// 获取处理打印拓展对象
PrintImpl kqcoPrint = new PrintImpl();
// 初始化打印实体对象
PrintEntity printEntity = kqcoPrint.getPrintEntity(xml);
// 获取xml中表头数据
String sHead = printEntity.getDataByKey("head");
// 获取xml中表值数据
String sData = printEntity.getDataByKey("data");
// 获取列表行列操作对象
PrintGrid grid = kqcoPrint.getPrintGrid(sHead, sData, xml);
PrintEntity gridRowEntity = null;
// 获取表格列行数量,以列表行数为循环次数处理---此为行列嵌套打印
for (int i = 0; i < grid.getRowCount(); i++) {
if (i == 0) {
// 列表的第一行默认为添加行数据子级
gridRowEntity = printEntity.addEntityToInner();
} else {
// 添加行数据下同级
gridRowEntity = gridRowEntity.addEntityToBottom();
}
// 设置当前高度
gridRowEntity.setHeigth(60);
// 设置当前Y轴偏移量(距离顶部)
gridRowEntity.setOffsetY(-1);
PrintEntity colnEntity = null;
// 获取表格指定下标行数据
PrintGridData gridData = grid.getRow(i);
// 获取表格列数量,循环处理
for (int j = 0; j < grid.getColnCount(); j++) {
if (j == 0) {
// 第一列默认为添加行数据子级,传参i标识列表行位置
colnEntity = gridRowEntity.addEntityToInner();
} else {
// 添加行数据下同级
colnEntity = colnEntity.addEntityToBottom();
}
// 获取表格指定下标列数据
PrintGridColn gridColn = grid.getColn(j);
/**
* getData,获取表格头和表格数据组装数据
* 设置当前打印文本内容
*/
colnEntity.setText(gridData.getData(i, j));
// 设置打印水平位置(赋值1或不设置默认居中,0:上对齐、1:垂直居中、2:下对齐)
colnEntity.setAlignY(gridColn.getAlginY());
// 设置当前宽度
colnEntity.setWidth(gridColn.getWidth(j));// 如果要取列的宽度
// 设置当前高度
colnEntity.setHeigth(20);
// 自定义设置列的宽
// colnEntity.setWidth(300);
// 自定义设置当前X轴偏移量(距离左部)
switch (j){
case 0:
colnEntity.setOffsetX(10);
break;
case 1:
colnEntity.setOffsetX(20);
break;
case 2:
colnEntity.setOffsetX(350);
}
// 设置边框(0为无边框,不设置为默认有边框且宽度为3.细线,代表线粗细程度:1.中等、2.粗线、3.细线)
colnEntity.setBorder(0);
}
}
// 获取生成的xml数据
String[] parm = printEntity.toXml();
System.out.println("return:"+parm[0]);
return parm[0].getBytes(StandardCharsets.UTF_8);
}
}
打包
将程序和依赖 jar 分离打包
- 程序保存
./jar/co/
目录下 - 依赖保存
./jar/lib/
目录下
xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.kanq</groupId>
<artifactId>co-service-ext</artifactId>
<version>1.0.1</version>
<packaging>jar</packaging>
<name>co_service_web_ext_demo</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!-- 打包不含依赖jar -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<!-- 依赖包导出lib文件夹下 -->
<build>
<finalName>Ext</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.1.2.RELEASE</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
<configuration>
<!--<fork>true</fork>-->
<layout>ZIP</layout>
<includes>
<include>
<!-- 排除所有Jar -->
<groupId>nothing</groupId>
<artifactId>nothing</artifactId>
</include>
</includes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<!-- ${project.build.directory}是maven变量,内置的,表示target目录,如果不写,将在跟目录下创建/lib -->
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<!-- excludeTransitive:是否不包含间接依赖包,比如我们依赖A,但是A又依赖了B,我们是否也要把B打进去 默认不打-->
<excludeTransitive>false</excludeTransitive>
<!-- 复制的jar文件去掉版本信息 true去掉 false 不去-->
<stripVersion>false</stripVersion>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.kanq</groupId>
<artifactId>co-service-ext</artifactId>
<version>1.0.1</version>
<packaging>jar</packaging>
<name>co_service_web_ext_demo</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!-- 打包不含依赖jar -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<!-- 依赖包导出lib文件夹下 -->
<build>
<finalName>Ext</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.1.2.RELEASE</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
<configuration>
<!--<fork>true</fork>-->
<layout>ZIP</layout>
<includes>
<include>
<!-- 排除所有Jar -->
<groupId>nothing</groupId>
<artifactId>nothing</artifactId>
</include>
</includes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<!-- ${project.build.directory}是maven变量,内置的,表示target目录,如果不写,将在跟目录下创建/lib -->
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<!-- excludeTransitive:是否不包含间接依赖包,比如我们依赖A,但是A又依赖了B,我们是否也要把B打进去 默认不打-->
<excludeTransitive>false</excludeTransitive>
<!-- 复制的jar文件去掉版本信息 true去掉 false 不去-->
<stripVersion>false</stripVersion>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
注意
- 新接口需重启 co-service 后才能生效
启动服务
扩展开发注册成功如下:
注意
- co-service 日志级别为 调试
- 测试打印扩展指令
配置二开之前打印效果:
配置二开之后打印效果:
本示例代码在 com.kanq.PrintDemo
类中的 printOpinionList
方法