实现代码

package com.xjj.modules.test;import com.xjj.modules.redem.form.RedeemConfirmationModel;
import com.xjj.modules.redem.util.PictureUtil;
/*** @Author: wumingkai* @Description:* @Date:Create:in 2020/3/22 10:32* @Modified By:*/
public class Tests02 {public static void main(String[] args) {RedeemConfirmationModel redeemConfirmationModel = new RedeemConfirmationModel();redeemConfirmationModel.setFee("test");redeemConfirmationModel.setProductName("进击的巨人");redeemConfirmationModel.setRedeemMoney("13集");redeemConfirmationModel.setFeeMoneyCase("test");redeemConfirmationModel.setRedeemMoneyCase("tets");redeemConfirmationModel.setBenAmount("test");redeemConfirmationModel.setRedeemAmount0("89789");redeemConfirmationModel.setBankACCT("4444444521515657");redeemConfirmationModel.setBankSubName("建设银行");redeemConfirmationModel.setContractSubBh("10045");redeemConfirmationModel.setContractBh("A2001");redeemConfirmationModel.setOpenDateNetWoth("1.23");redeemConfirmationModel.setCustName("吴小天");PictureUtil.getInstance().createImages(redeemConfirmationModel,"D:/bushu/images/","test.jpg");}}
package com.xjj.modules.redem.util;import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import com.xjj.modules.redem.form.RedeemConfirmationModel;
import sun.misc.BASE64Encoder;import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.awt.image.RenderedImage;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.Base64;/*** Created by wumingkai on 2020-3-23.*/
public class PictureUtil {public  final static PictureUtil pictureUtil = new PictureUtil();private  PictureUtil(){}public static  PictureUtil getInstance(){return  pictureUtil;}public  void  createImages(RedeemConfirmationModel redeem,String filePath,String fileName){try {String[][] tableData2 = new String[8][4];tableData2[0][0] = "项目名称";tableData2[0][1] = redeem.getProductName();tableData2[0][2] = redeem.getProductName();tableData2[0][3] = redeem.getProductName();//tableData2[1][0] = "委托人姓名";tableData2[1][1] = redeem.getCustName();tableData2[1][2] = "合同编号";tableData2[1][3] = redeem.getContractSubBh();//tableData2[2][0] = "赎回信托单位份数";tableData2[2][1] = redeem.getRedeemAmount0();tableData2[2][2] = "剩余信托单位份数";tableData2[2][3] = redeem.getBenAmount();//tableData2[3][0] = "信托利益分配账户开户行";tableData2[3][1] = redeem.getBankSubName();tableData2[3][2] = "信托利益分配账户账号";tableData2[3][3] = redeem.getBankACCT();//tableData2[4][0] = "开放日信托单位净值";tableData2[4][1] = redeem.getOpenDateNetWoth();tableData2[4][2] = redeem.getOpenDateNetWoth();tableData2[4][3] = redeem.getOpenDateNetWoth();//tableData2[5][0] = "赎回资金(大写)";tableData2[5][1] = redeem.getRedeemMoneyCase();tableData2[5][2] = "小写";tableData2[5][3] = redeem.getRedeemMoney();//tableData2[6][0] = "赎回费用(大写)";tableData2[6][1] = redeem.getFeeMoneyCase();tableData2[6][2] = "小写";tableData2[6][3] = redeem.getFee();//tableData2[7][0] = "备 注";tableData2[7][1] = "";tableData2[7][2] = "";tableData2[7][3] = "";myGraphicsGeneration(tableData2,redeem.getContractBh(),filePath,fileName);} catch (Exception e) {e.printStackTrace();}}public  void myGraphicsGeneration(String cellsValue[][], String contractBh,String path,String fileName) {int kuochong = 200;// 字体大小int fontTitileSize = 15;// 横线的行数int totalrow = cellsValue.length+1;// 竖线的行数int totalcol = 0;if (cellsValue[0]  != null) {totalcol = cellsValue[0].length;}// 图片宽度int imageWidth = 1792;// 行高int rowheight = 40;// 图片高度int imageHeight = totalrow*rowheight+200;// 起始高度int startHeight = 50;// 起始宽度int startWidth = 10;// 单元格宽度int colwidth = (int)((imageWidth-20)/totalcol);BufferedImage image = new BufferedImage(imageWidth, imageHeight,BufferedImage.TYPE_INT_RGB);Graphics graphics = image.getGraphics();graphics.setColor(Color.WHITE);graphics.fillRect(0,0, imageWidth, imageHeight);graphics.setColor(new Color(220,240,240));//画横线for(int j=0;j<totalrow; j++){graphics.setColor(Color.black);graphics.drawLine(startWidth,startHeight+(j+1)*rowheight,startWidth+colwidth*totalcol,startHeight+(j+1)*rowheight);}//画竖线for(int k=0;k<totalcol+1;k++){if(k==2){graphics.setColor(Color.black);graphics.drawLine(startWidth+k*colwidth+kuochong, startHeight+rowheight, startWidth+k*colwidth+kuochong, startHeight+rowheight*totalrow);}else{graphics.setColor(Color.black);graphics.drawLine(startWidth+k*colwidth, startHeight+rowheight, startWidth+k*colwidth, startHeight+rowheight*totalrow);}}for(int k=2;k<totalcol;k++){ // 合并单元格 (其实也就是消除掉黑色的线)if(k==2){graphics.setColor(Color.white);graphics.drawLine(startWidth+k*colwidth+kuochong, startHeight+1+rowheight, startWidth+k*colwidth+kuochong, rowheight*3+9);}else{graphics.setColor(Color.white);graphics.drawLine(startWidth+k*colwidth, startHeight+1+rowheight, startWidth+k*colwidth, rowheight*3+9);}}for(int k=2;k<totalcol;k++){// 合并单元格 (其实也就是消除掉黑色的线)if(k==2){graphics.setColor(Color.white);graphics.drawLine(startWidth+k*colwidth+kuochong, startHeight+1+rowheight*5, startWidth+k*colwidth+kuochong, rowheight*7+9);}else{graphics.setColor(Color.white);graphics.drawLine(startWidth+k*colwidth, startHeight+1+rowheight*5, startWidth+k*colwidth, rowheight*7+9);}}for(int k=2;k<totalcol;k++){// 合并单元格 (其实也就是消除掉黑色的线)if(k==2){graphics.setColor(Color.white);graphics.drawLine(startWidth+k*colwidth+kuochong, startHeight+1+rowheight*8, startWidth+k*colwidth+kuochong, rowheight*10+9);}else{graphics.setColor(Color.white);graphics.drawLine(startWidth+k*colwidth, startHeight+1+rowheight*8, startWidth+k*colwidth, rowheight*10+9);}}graphics.setColor(Color.black);//画竖线/*for(int k=1;k<totalcol+1;k++){// graphics.setColor(Color.white);graphics.drawLine(startWidth+k*colwidth, startHeight+rowheight, startWidth+k*colwidth, rowheight);}*///设置字体Font font = new Font("微软雅黑",Font.BOLD,fontTitileSize);graphics.setFont(font);//写标题String title02 = "编号:"+contractBh;graphics.drawString(title02, startWidth, startHeight+rowheight-10);Font fonttile = new Font("微软雅黑",Font.BOLD,18);graphics.setFont(fonttile);//写标题String title03 = "测试测试测试";graphics.drawString(title03, 850, 25);//写标题String title04 = "刺客伍六七哈哈哈哈哈哈";graphics.drawString(title04, 790, 60);//写入内容for(int n=0;n<cellsValue.length;n++){for(int h=0;h<cellsValue[n].length;h++){font = new Font("微软雅黑",Font.PLAIN,fontTitileSize);graphics.setFont(font);graphics.setColor(Color.BLACK);if(h>0){if(cellsValue[n][h].equals(cellsValue[n][h-1])){}else{if(h==2){graphics.drawString(cellsValue[n][h], startWidth+colwidth*h+5+kuochong, startHeight+rowheight*(n+2)-10);}else{graphics.drawString(cellsValue[n][h], startWidth+colwidth*h+5, startHeight+rowheight*(n+2)-10);}}}else{graphics.drawString(cellsValue[n][h], startWidth+colwidth*h+5, startHeight+rowheight*(n+2)-10);}}}// 保存图片createImage(image, path,fileName);}/*** 将图片保存到指定位置* @param image 缓冲文件类* @param fileLocation 文件位置*/public static void createImage(BufferedImage image, String fileLocation,String fileName) {try {File file = new File(fileLocation);if(!file.exists()){file.mkdir();}FileOutputStream fos = new FileOutputStream(fileLocation+fileName);BufferedOutputStream bos = new BufferedOutputStream(fos);ImageIO.write(image, "jpg", fos);/* JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(bos);encoder.encode(image);*/bos.close();} catch (Exception e) {e.printStackTrace();}}/*** 图片转换为string* @return*/public static String fileToByteArray(String filePath) throws Exception{BASE64Encoder encoder = new sun.misc.BASE64Encoder();File file = new File(filePath);BufferedImage bi = ImageIO.read(file);ByteArrayOutputStream baos = new ByteArrayOutputStream();ImageIO.write(bi, "jpg", baos);byte[] bytes = baos.toByteArray();return encoder.encodeBuffer(bytes).trim();}
}
package com.xjj.modules.redem.form;import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;import java.math.BigDecimal;/*** @Author: wumingkai* @Description:* @Date:Create:in 2020/2/27 20:55* @Modified By:*/
@Getter
@Setter
@ApiModel(value = "赎回确认书")
public class RedeemConfirmationModel {@ApiModelProperty("赎回费")private String fee;@ApiModelProperty("赎回费 大写")private String feeMoneyCase;@ApiModelProperty("信托利益分配账户账号")private String bankACCT;@ApiModelProperty("信托利益分配账户开户行")private String bankSubName;@ApiModelProperty("委托人姓名")private String custName;@ApiModelProperty("客户id")private Integer custId;@ApiModelProperty("产品id")private Integer productId;@ApiModelProperty("编号")private String contractBh;@ApiModelProperty("赎回金额 小写")private String redeemMoney;@ApiModelProperty("项目名称")private String productName;@ApiModelProperty("单位净值")private BigDecimal navPrice;@ApiModelProperty("剩余信托单位份数")private String benAmount;@ApiModelProperty("赎回金额 大写")private String redeemMoneyCase;@ApiModelProperty("开放日")private String transDate;@ApiModelProperty("开放日信托单位净值 (处理之后拼接的值)")private String openDateNetWoth;@ApiModelProperty("合同编号")private String contractSubBh;@ApiModelProperty("赎回信托单位份数")private String redeemAmount0;@ApiModelProperty("自动赎回标志 1 自动赎回")private Integer autoFlag;@ApiModelProperty("兑付受益,自动赎回的时候用到")private BigDecimal redeemProceed;@ApiModelProperty("兑付受益,大写")private String redeemProceedCapital;@ApiModelProperty("兑付受益,小写")private String redeemProceedLower;@ApiModelProperty("单元简称")private String unitShort;@ApiModelProperty("单元简称")private String unitShort01;@ApiModelProperty("单元简称")private String unitShort02;}

实现效果
因为,后台用java生成图片,不存在自动换行,合并单元格,做的时候都是根据位置,用白线替换掉,才有了合并的效果。

java生成表格图片,使用Graphics相关推荐

  1. java生成表格图片(请假条为例)

    java生成表格图片(请假条) package table;import java.awt.Color; import java.awt.Font; import java.awt.Graphics; ...

  2. java生成表格图片

    为什么80%的码农都做不了架构师?>>>    主要代码: /*** 生成图片* @param cellsValue 以二维数组形式存放 表格里面的值* @param path 文件 ...

  3. java生成表格图片_java生成表格图片

    主要代码: /** * 生成图片 * @param cellsValue 以二维数组形式存放 表格里面的值 * @param path 文件保存路径 */ public void myGraphics ...

  4. Python数据展示 - 生成表格图片

    前言 本文来讲讲如何用Python生成表格图片. 选一个合适库 Python最大的优点就是第三方库丰富,基本你要什么功能,都能找到别人实现好的库,几行代码一调用就完事了. Pytable 最先找到的是 ...

  5. 致敬Gif之父,使用Java生成Gif图片

    点击关注强哥,查看更多精彩文章呀 哈喽,大家好,我是强哥. 据美国媒体报道,美国计算机科学家.GIF图像格式发明人斯蒂芬•威尔海特(Stephen Wilhite)于当地时间3月14日因新冠肺炎去世, ...

  6. JAVA通过Graphics2D生成表格图片

    目录 一.背景 二.效果图 三.主要类 四.环境要求 五.完整代码 一.背景 由于钉钉机器人目前不支持发送表格消息,所以想通过Graphics2D绘制表格生成图片文件后转Base64发送,在参考了其他 ...

  7. Java生成随机图片验证码工具类

    一.第一种生成随机图片验证码 public class VerifyCodeUtil {//生成随机数据的数据源 public static final String VERIFY_CODES = & ...

  8. java生成条码图片、打印二维码、图片合并、图片加文字

    通过java生成二维码图片,可以添加文字内容,非常方便实现打印. import java.awt.Color; import java.awt.Font; import java.awt.FontMe ...

  9. 实现Java生成随机图片验证码

    前言 这篇文章主要介绍了如何通过Java如何生成验证码并验证.验证码的作用我想必大家都知道,话不多说开始实施! 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 1.项 ...

最新文章

  1. Ubuntu SVN安装使用命令
  2. AAAI2020| 超低精度量化BERT,UC伯克利提用二阶信息压缩神经网络
  3. phpStudy for Linux (lnmp+lamp一键安装包)
  4. c++ url下载图片
  5. java中dateformat类的作用_java-SimpleDateFormat类中可用的日期格式是什么?
  6. avl删除根节点图解_图解 6 种树,你心中有数吗。。。
  7. 折纸机器人的步骤图解_折纸图解走路的人
  8. HURST 1116:选美大赛(LIS+路径输出)
  9. Oauth2.0和1.0区别
  10. Memory Notification: Library Cache Object loaded into SGA问题
  11. mysql中3个月之前日期_在MySQL中从当前日期选择当前日期到3个月之间的日期?
  12. javascript基础 之 void
  13. mysql显示nan_Python将dataframe连接到MySQL时出现NaN[mysqlconnector]
  14. Bootstrap学习(一):Bootstrap简介
  15. 深入浅出WPF之我件2
  16. 用python写字动画_Duang!用Python来实现唱歌、跳舞、写字、画画?无所不能的pyt
  17. DM数据库安装过程--基于NeoKylin操作系统详解
  18. nrf51822蓝牙学习笔记三
  19. UEstudio 17打开中文乱码的处理解决
  20. JavaWeb视频教程

热门文章

  1. 全新QQ架构的“NT”版来袭
  2. 阿里云龙珠训练营学习打卡第一天
  3. Web前端技术学习路线图 初阶+中阶+高阶
  4. 多任务学习优化总结 Multi-task learning(附代码)
  5. gcc编译器及编译过程
  6. 利用Matlab寻找一元函数极值
  7. qt中使用miniblink总结
  8. HNUCM蓝桥杯Python组寒假第二次练习
  9. 大整数加法(c++)
  10. Matlab求解非线性规划,fmincon函数的用法总结