Appearance
表格打印扩展开发
注意
本示例,使用 KQCO 服务 的地址是:192.168.1.13
端口是:8003
后面会使用此参数
打印模板配置扩展指令
说明
打印模板中表格控件的 打印风格
属性配置为 printOpinionList
新建 springboot 项目
pom.xml 中引入 jar 包: co-service-sdk-api-6.x.x.jar
:下载
xml
<dependency>
<groupId>com.kanq.co</groupId>
<artifactId>co-service-sdk-api</artifactId>
<version>6.x.x</version>
</dependency>
<dependency>
<groupId>com.kanq.co</groupId>
<artifactId>co-service-sdk-api</artifactId>
<version>6.x.x</version>
</dependency>
启动类SpringBootApplication
类配置:
java
//启动类扫描SDK配置项设置--此处必须固定此路径
@ComponentScan({"com.kqgeo.co.ext.*"})
//忽略数据源配置的话可配置此注解
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class SpringBootApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootApplication.class, args);
}
}
//启动类扫描SDK配置项设置--此处必须固定此路径
@ComponentScan({"com.kqgeo.co.ext.*"})
//忽略数据源配置的话可配置此注解
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class SpringBootApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootApplication.class, args);
}
}
注意
springboot2.* @ComponentScan({"com.kqgeo.co.ext.*"})
springboot3.* @ComponentScan({"com.kqgeo.co.ext.*","com.kanq.co.core"})
yml 配置(完整配置详见):
yaml
server:
port: 8888 #端口
coservice: #C++服务相关配置
'0':
model: hotStandby
server:
- addr: 192.168.1.13 #二开程序的C++配置要与java运行服务使用的C++地址端口保持一致
port: 8003
cofile:
affix: C:\\affix\\ #文件存储路径
server:
port: 8888 #端口
coservice: #C++服务相关配置
'0':
model: hotStandby
server:
- addr: 192.168.1.13 #二开程序的C++配置要与java运行服务使用的C++地址端口保持一致
port: 8003
cofile:
affix: C:\\affix\\ #文件存储路径
coservice
coservice
配置要与平台配置保持一致
扩展接口实现
- 创建 java 类
com.kqgeo.co.ext.print
- 增加
public KqcoParm printOpinionList(@RequestBody ObjectNode parameter);
方法 - 增加指令注册注解
@Description(describe = "意见列表打印", instructions = "printOpinionList",requestType = "post", requestUrl = "/co/print/printOpinionList")
注意
com.kqgeo.co.ext
包名需要与配置文件中的packageName
保持一致注解说明:
describe
接口描述requestType
请求方式requestUrl
请求路径,请求路径要求前面/
不可忽略instructions
指令名称
- 完整代码(参数详见)
java
package com.kqgeo.co.ext.print;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.kqgeo.co.ext.config.Description;
import com.kqgeo.co.ext.sdk.KqcoApi;
import com.kqgeo.co.ext.sdk.KqcoParm;
import com.kqgeo.co.ext.sdk.KqcoPrint;
import com.kqgeo.co.ext.sdk.ParmImpl;
import com.kqgeo.co.ext.sdk.print.PrintEntity;
import com.kqgeo.co.ext.sdk.print.PrintGrid;
import com.kqgeo.co.ext.sdk.print.PrintGridColn;
import com.kqgeo.co.ext.sdk.print.PrintGridData;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("co/print")
public class PrintDemo {
//打印表格拓展--嵌套打印
@RequestMapping(value = "/printOpinionList", method = RequestMethod.POST)
@Description(describe = "意见列表打印", instructions = "printOpinionList",requestType = "post", requestUrl = "/co/print/printOpinionList")
public KqcoParm printOpinionList(@RequestBody ObjectNode parameter) {
String m_sTicket ="tiket-5c396f8c702840fd9ae6523f9a70dac4";
KqcoApi kqcoApi = KqcoApiUtils.getKocoApi(m_sTicket);
kqcoApi.m_sAddr="trace-eb3eb80039444d9c9e2f6cf60a5a90dd";
// 参数检查
if (kqcoParm.setRequest(parameter) != 0) {
return kqcoParm;
}
//从参数中取出控件名称
ObjectNode parmJson = kqcoParm.getRequest();
JsonNode argsJson = parmJson.get("args");
//获取xml
String xml = argsJson.get(0).asText();
//获取处理打印拓展对象
KqcoPrint kqcoPrint = kqcoApi.getKqcoPrint();
//初始化打印实体对象
PrintEntity printEntity = kqcoPrint.getPrintEntity(xml);
//从xml中取出表格对象与表格头对象
String sHead = printEntity.getDataByKey("head");
String sData = printEntity.getDataByKey("data");
//从xml中取出表格对象与表格头对象
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 = gridRowEntity.addEntityToRight();
}
//设置当前高度
gridRowEntity.setHeigth(80);
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.addEntityToRight();//在一行的后面增加
colnEntity = colnEntity.addEntityToBottom();//在一行的下面增加
}
//获取表格头操作对象
PrintGridColn gridColn = grid.getColn(j);
//保存当前打印文本内容
colnEntity.setText(gridData.getData(i, j));
//设置打印水平位置
colnEntity.setAlignY(gridColn.getAlginY());
//设置宽为当前列表头的宽度
colnEntity.setWidth(gridColn.getWidth(j));// 如果要取列的宽度
//自定义设置列的高
colnEntity.setHeigth(30);
//自定义设置列的宽
colnEntity.setWidth(100);
//自定义设置x轴偏移量
colnEntity.setOffsetX(20);
//设置是否显示边框
colnEntity.setBorder(0);
}
}
kqcoParm.setParameter(printEntity.toXml());
return kqcoParm;
}
//打印表格拓展--并列打印
@RequestMapping(value = "/printOpinionList", method = RequestMethod.POST)
@Description(describe = "意见列表打印", instructions = "printOpinionList",requestType = "post", requestUrl = "/co/print/printOpinionList")
public KqcoParm printOpinionList(@RequestBody ObjectNode parameter) {
String m_sTicket ="tiket-5c396f8c702840fd9ae6523f9a70dac4";
KqcoApi kqcoApi = KqcoApiUtils.getKocoApi(m_sTicket);
kqcoApi.m_sAddr="trace-eb3eb80039444d9c9e2f6cf60a5a90dd";
// 参数检查
if (kqcoParm.setRequest(parameter) != 0) {
return kqcoParm;
}
//从参数中取出控件名称
ObjectNode parmJson = kqcoParm.getRequest();
JsonNode argsJson = parmJson.get("args");
//获取xml
String xml = argsJson.get(0).asText();
//获取处理打印拓展对象
KqcoPrint kqcoPrint = kqcoApi.getKqcoPrint();
//初始化打印实体对象
PrintEntity printEntity = kqcoPrint.getPrintEntity(xml);
//从xml中取出表格对象与表格头对象
String sHead = printEntity.getDataByKey("head");
String sData = printEntity.getDataByKey("data");
//从xml中取出表格对象与表格头对象
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 = gridRowEntity.addEntityToRight();
//自定义设置x轴偏移量
gridRowEntity.setOffsetX(-20);
//自定义设置Y轴偏移量
gridRowEntity.setOffsetY(20);
}
//设置行属性与列属性相同
PrintEntity colnEntity = gridRowEntity;
//获取打印行属性操作对象
PrintGridData gridData = grid.getRow(i);
//以表格列数为循环次数处理
for (int j = 0; j < grid.getColnCount(); j++) {
// 第一个已经增加
if (j > 0) {
colnEntity = colnEntity.addEntityToRight();//在一行的后面增加
}
//获取表格头操作对象
PrintGridColn gridColn = grid.getColn(j);
//保存当前打印文本内容
colnEntity.setText(gridData.getData(i, j));
//设置打印水平位置
colnEntity.setAlignY(gridColn.getAlginY());
//设置宽为当前列表头的宽度
colnEntity.setWidth(gridColn.getWidth(j));// 如果要取列的宽度
//自定义设置列的高
colnEntity.setHeigth(30);
//自定义设置列的宽
colnEntity.setWidth(100);
//自定义设置x轴偏移量
colnEntity.setOffsetX(20);
//设置是否显示边框
colnEntity.setBorder(0);
}
}
kqcoParm.setParameter(printEntity.toXml());
return kqcoParm;
}
}
package com.kqgeo.co.ext.print;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.kqgeo.co.ext.config.Description;
import com.kqgeo.co.ext.sdk.KqcoApi;
import com.kqgeo.co.ext.sdk.KqcoParm;
import com.kqgeo.co.ext.sdk.KqcoPrint;
import com.kqgeo.co.ext.sdk.ParmImpl;
import com.kqgeo.co.ext.sdk.print.PrintEntity;
import com.kqgeo.co.ext.sdk.print.PrintGrid;
import com.kqgeo.co.ext.sdk.print.PrintGridColn;
import com.kqgeo.co.ext.sdk.print.PrintGridData;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("co/print")
public class PrintDemo {
//打印表格拓展--嵌套打印
@RequestMapping(value = "/printOpinionList", method = RequestMethod.POST)
@Description(describe = "意见列表打印", instructions = "printOpinionList",requestType = "post", requestUrl = "/co/print/printOpinionList")
public KqcoParm printOpinionList(@RequestBody ObjectNode parameter) {
String m_sTicket ="tiket-5c396f8c702840fd9ae6523f9a70dac4";
KqcoApi kqcoApi = KqcoApiUtils.getKocoApi(m_sTicket);
kqcoApi.m_sAddr="trace-eb3eb80039444d9c9e2f6cf60a5a90dd";
// 参数检查
if (kqcoParm.setRequest(parameter) != 0) {
return kqcoParm;
}
//从参数中取出控件名称
ObjectNode parmJson = kqcoParm.getRequest();
JsonNode argsJson = parmJson.get("args");
//获取xml
String xml = argsJson.get(0).asText();
//获取处理打印拓展对象
KqcoPrint kqcoPrint = kqcoApi.getKqcoPrint();
//初始化打印实体对象
PrintEntity printEntity = kqcoPrint.getPrintEntity(xml);
//从xml中取出表格对象与表格头对象
String sHead = printEntity.getDataByKey("head");
String sData = printEntity.getDataByKey("data");
//从xml中取出表格对象与表格头对象
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 = gridRowEntity.addEntityToRight();
}
//设置当前高度
gridRowEntity.setHeigth(80);
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.addEntityToRight();//在一行的后面增加
colnEntity = colnEntity.addEntityToBottom();//在一行的下面增加
}
//获取表格头操作对象
PrintGridColn gridColn = grid.getColn(j);
//保存当前打印文本内容
colnEntity.setText(gridData.getData(i, j));
//设置打印水平位置
colnEntity.setAlignY(gridColn.getAlginY());
//设置宽为当前列表头的宽度
colnEntity.setWidth(gridColn.getWidth(j));// 如果要取列的宽度
//自定义设置列的高
colnEntity.setHeigth(30);
//自定义设置列的宽
colnEntity.setWidth(100);
//自定义设置x轴偏移量
colnEntity.setOffsetX(20);
//设置是否显示边框
colnEntity.setBorder(0);
}
}
kqcoParm.setParameter(printEntity.toXml());
return kqcoParm;
}
//打印表格拓展--并列打印
@RequestMapping(value = "/printOpinionList", method = RequestMethod.POST)
@Description(describe = "意见列表打印", instructions = "printOpinionList",requestType = "post", requestUrl = "/co/print/printOpinionList")
public KqcoParm printOpinionList(@RequestBody ObjectNode parameter) {
String m_sTicket ="tiket-5c396f8c702840fd9ae6523f9a70dac4";
KqcoApi kqcoApi = KqcoApiUtils.getKocoApi(m_sTicket);
kqcoApi.m_sAddr="trace-eb3eb80039444d9c9e2f6cf60a5a90dd";
// 参数检查
if (kqcoParm.setRequest(parameter) != 0) {
return kqcoParm;
}
//从参数中取出控件名称
ObjectNode parmJson = kqcoParm.getRequest();
JsonNode argsJson = parmJson.get("args");
//获取xml
String xml = argsJson.get(0).asText();
//获取处理打印拓展对象
KqcoPrint kqcoPrint = kqcoApi.getKqcoPrint();
//初始化打印实体对象
PrintEntity printEntity = kqcoPrint.getPrintEntity(xml);
//从xml中取出表格对象与表格头对象
String sHead = printEntity.getDataByKey("head");
String sData = printEntity.getDataByKey("data");
//从xml中取出表格对象与表格头对象
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 = gridRowEntity.addEntityToRight();
//自定义设置x轴偏移量
gridRowEntity.setOffsetX(-20);
//自定义设置Y轴偏移量
gridRowEntity.setOffsetY(20);
}
//设置行属性与列属性相同
PrintEntity colnEntity = gridRowEntity;
//获取打印行属性操作对象
PrintGridData gridData = grid.getRow(i);
//以表格列数为循环次数处理
for (int j = 0; j < grid.getColnCount(); j++) {
// 第一个已经增加
if (j > 0) {
colnEntity = colnEntity.addEntityToRight();//在一行的后面增加
}
//获取表格头操作对象
PrintGridColn gridColn = grid.getColn(j);
//保存当前打印文本内容
colnEntity.setText(gridData.getData(i, j));
//设置打印水平位置
colnEntity.setAlignY(gridColn.getAlginY());
//设置宽为当前列表头的宽度
colnEntity.setWidth(gridColn.getWidth(j));// 如果要取列的宽度
//自定义设置列的高
colnEntity.setHeigth(30);
//自定义设置列的宽
colnEntity.setWidth(100);
//自定义设置x轴偏移量
colnEntity.setOffsetX(20);
//设置是否显示边框
colnEntity.setBorder(0);
}
}
kqcoParm.setParameter(printEntity.toXml());
return kqcoParm;
}
}
启动服务
扩展开发注册成功如下:
- 测试打印
点击打印:
配置二开之前的打印效果:
配置二开之后打印效果:
本示例代码在 com.kqgeo.co.ext.PrintDemo
类中的 printOpinionList
方法