java打印特殊单据的思路

本文分享了一种Java打印特殊单据的方法,主要涉及字符串操作。虽然思路源于他人,但作者认为极具实用性,适合日后参考使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**
* 生成内容的头信息
* @param title:标题
* @param custId:单位账号
* @param custName:单位名称
* @param serialNumber:流水号
* @param tradeDate:交易日期
* @param teller:操作柜员
* @param totalNum:总笔数
* @return
* @throws Exception
*/
private String generateHeaderOfMsg(String title,String custId,String custName,String serialNumber,
  String tradeDate,String teller,String totalNum) throws Exception{

Integer[] lens = {10,30,10,30,10,30}; // 每一列的长度

// 拼接字符串
StringBuffer sb = new StringBuffer();

// 表名
sb.append(getarateValueOfOne("", lens[0], 0)); // 空格
sb.append(getarateValueOfOne("", lens[1], 0)); // 空格
sb.append("   ");
sb.append(title+"\r\n\r\n");

// 第一行
sb.append(getarateValueOfOne("单位账号:", lens[0], 0)); // 单位账号
sb.append(getarateValueOfOne(custId, lens[1], 0)); // 单位账号
sb.append(getarateValueOfOne("单位名称:", lens[2], 0)); // 单位名称
sb.append(getarateValueOfOne(custName, lens[3], 0)); // 单位名称
sb.append(getarateValueOfOne("业务流水号:", lens[4], 0)); // 业务流水号
sb.append(serialNumber+"\r\n"); // 业务流水号

// 第二行
sb.append(getarateValueOfOne("交易日期:", lens[0], 0)); // 交易日期
sb.append(getarateValueOfOne(tradeDate, lens[1], 0)); // 交易日期
sb.append(getarateValueOfOne("操作柜员:", lens[2], 0)); // 操作柜员
sb.append(getarateValueOfOne(teller, lens[3], 0)); // 操作柜员
sb.append(getarateValueOfOne("总笔数:", lens[2], 0)); // 总笔数
sb.append(totalNum+"\r\n"); // 总笔数


return sb.toString();
}
/**
* 拼接每一个数据格格的值
* @param orgStr 此列的值是什么
* @param maxLen 传过来的此列长度
* @param locType: 0左;1中;2右  字符转在单元格中的位置
* @return
* @throws Exception
*/
public static String getarateValueOfOne(String orgStr,Integer maxLen,Integer locType) throws Exception{

String valu = "";
if(orgStr==null){
orgStr = "";
}
int len = orgStr.getBytes("GB18030").length;//设置编码方式,有的需要返回特定的编码格式,这里面返回的是GB18030,同时返回字符串的长度
if(locType==0){ // 左对齐
// 拼接
valu += orgStr;
int lenmore = maxLen-len; // 剩下的单元格
// 拼接后面的空格
for(int i=0;i<lenmore;i++){
valu += " ";
}
}else if(locType==2){ // 右对齐
int lenmore = maxLen-len; // 剩下的单元格
// 拼接后面的空格
for(int i=0;i<lenmore;i++){
valu += " ";
}
// 拼接
valu += orgStr;
}else{ // 居中
int pre = (maxLen-len)/2; // 值后面的空格
int aft = maxLen-len-pre; // 值后面的空格

// 拼接前面的空格
for(int i=0;i<pre;i++){
valu += " ";
}
// 拼接
valu += orgStr;
// 拼接后面的空格
for(int i=0;i<aft;i++){
valu += " ";
}
}

return valu;
}
/**
* 获得一个集合中字符串的最大长度
* @param list
* @return
* @throws Exception
*/
public static int findMaxLen(List<String> list) throws Exception{
int maxLen = 0;
for(String str : list){
if(str==null){
str = "";
}
int len = str.getBytes("GB18030").length;
if(len>maxLen){
maxLen = len;
}
}
// 偶数
if(maxLen % 2 != 0){
maxLen = maxLen+1;
}
return maxLen;

}

上面就是操作打印的字符串操作,感觉思路很好,虽然不是自己想出来,感觉很好,就分享一下了,希望以后用到的时候,可以直接拿出来用


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值