基于参考文档,本文做了优化处理。

优化点:

1. 单元格合并,目前测试的行的单元格合并线进行了优化。不用写单个的for循环去优化,列的还未进行测试,只需要传入的数组坐标不赋值即可。

2. 标题、列宽可控,根据传入的数值。

参考文档:

java生成表格图片,使用Graphics_坠机的舒克的博客-CSDN博客_java生成表格图片实现代码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 Tehttps://blog.csdn.net/qq_39474136/article/details/106583911

java 代码:

import sun.misc.BASE64Encoder;import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;/*** @description* @date 2022/4/22*/
public class PictureCreateByTextUtil {public final static PictureCreateByTextUtil pictureUtil = new PictureCreateByTextUtil();private PictureCreateByTextUtil() {}public static PictureCreateByTextUtil getInstance() {return pictureUtil;}/*** 通过传入的数据,进行图片生成。* @date 2022/4/22* @param* @return*/public void createImagesByDefineData(double[] colWidthPercent, String firstTitle, String twoTitle, String[][] tableData, String filePath, String fileName) throws Exception{myGraphicsGenerationDefineData(colWidthPercent, firstTitle, twoTitle, tableData, filePath, fileName);}public void myGraphicsGenerationDefineData(double[] colWidthPercent, String firstTitle, String twoTitle, String cellsValue[][], String path, String fileName) throws Exception{// 字体大小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);}// 竖线位置坐标int[] colLineWidth = new int[colWidthPercent.length];int startWidthInt = startWidth;for(int i = 1; i < colWidthPercent.length + 1; i++){startWidthInt += (int)(imageWidth * colWidthPercent[i - 1]);// 防止超出if(startWidthInt > imageWidth){startWidthInt = imageWidth - startWidth;}colLineWidth[i-1] = startWidthInt;}//画竖线for (int k = 0; k < colWidthPercent.length; k++) {graphics.setColor(Color.black);graphics.drawLine(colLineWidth[k], startHeight + rowheight, colLineWidth[k], startHeight + rowheight * totalrow);}graphics.setColor(Color.black);//设置字体Font font = new Font("微软雅黑", Font.BOLD, fontTitileSize);graphics.setFont(font);//写标题SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String title02 = "生成时间:" + simpleDateFormat.format(new Date());graphics.drawString(title02, startWidth, startHeight + rowheight - 10);Font fonttile = new Font("微软雅黑", Font.BOLD, 18);graphics.setFont(fonttile);//写标题graphics.drawString(firstTitle, 850, 25);//写标题graphics.drawString(twoTitle, 790, 60);//写入内容for (int n = 0; n < cellsValue.length; n++) {for (int h = 0; h < cellsValue[n].length; h++) {if(cellsValue[n] == null || cellsValue[n][h] == null){// 合并单元格(横着的部分)graphics.setColor(Color.white);graphics.drawLine(colLineWidth[h] + 1, startHeight + (n + 1) * rowheight, colLineWidth[h == cellsValue[n].length ? h : (h+1)] - 1, startHeight + (n + 1) * rowheight);continue;}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])) {graphics.drawString(cellsValue[n][h], colLineWidth[h] + 35, startHeight + rowheight * (n + 2) - 10);}} else {graphics.drawString(cellsValue[n][h], colLineWidth[h] + 35, 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();}public static void main(String[] args) {String firstTitle = "账户交易记录";String twoTitle = "用户编号:23523532";String[] tableTile = {"交易类型", "时间(yyyy-mm-dd hh:mm:ss)", "交易金额", "本金余额", "待还利息", "待还罚息", "待还利息+罚息之和"};double[] colWidthPercent = {0, 0.1, 0.2, 0.14, 0.14, 0.14, 0.14, 0.14};String[][] tableData2 = new String[4][tableTile.length];for(int i = 0; i < tableTile.length; i++){tableData2[0][i] = tableTile[i];}tableData2[1][0] = "放款";tableData2[2][0] = "还款";tableData2[3][0] = "罚息";SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");tableData2[1][1] = simpleDateFormat.format(new Date());tableData2[1][2] = "30";tableData2[2][2] = "50";tableData2[3][2] = "100";tableData2[1][3] = "1000";tableData2[1][4] = "200";tableData2[1][5] = "2";tableData2[1][6] = "12000";try {PictureCreateByTextUtil.getInstance().createImagesByDefineData(colWidthPercent, firstTitle, twoTitle, tableData2, "K:\\数据\\", "test.jpg");} catch (Exception e) {e.printStackTrace();}}
}

效果:

java 文字生成表格图片相关推荐

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

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

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

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

  3. Java套版生成动态图片

    Java套版生成动态图片 , 适用于动态的名片生成 , 证件生成等 制作的图片底版   生成后的图片效果 package com.ssmf;/*** 套版生成实体类* @类 名 : CreateIma ...

  4. 对抗生成网络学习(十六)——stackGAN++利用文字生成鸟类图片(tensorflow实现)(未完待续)

    一.背景 最近工作逐渐步入正轨,自己要做一个文字和图像的交互,所以就考虑先做做类似的工作,恰好之前有看到过stackGAN,因此这次就做做stcakGAN++. stackGAN其实发布的比较早,st ...

  5. PHP 文字生成透明图片之路

    PHP 文字生成透明图片之路 摘要:在现在的开发中会经常运用到生成图片的功能,常用的验证码生成等.PHP语言生成图片需要用到GD2功能模块,所以基本的图片,图形处理都是没什么压力滴. 准备: 1.打开 ...

  6. 将文字生成png图片

    将指定的文字生成png图片,可自行定义文字,字体,字体颜色,背景颜色等 <? /* php生成文字png图片,可以使用如下方式调用函数:*/ Header("Content-type: ...

  7. PHP 文字生成透明图片

    准备: 1.打开GD2模块,在php.ini文件中把GD2打开即可. 2.准备一个适合在linux以及windows适用的字体文件 代码: $text = "我爱中国";//显示的 ...

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

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

  9. java 文字生成pdf,并创建自定义表单域pdf模板

    目录 本文总共知识点: pom 所有的import 生成带表格的pdf 另一种方式是指定坐标生成文本域 main方法: 创建表单域做为pdf模板: 创建签名域: 根据文字获取坐标位置 完整代码: 本文 ...

  10. java awt生成签名图片消除锯齿化

    项目场景: 在一个线上互联网医院中,需要生成电子处方图片,图片里面会有医生的手写签名.通过java.awt的Graphics2D方式来生成处方图片,并将手写签名的图片导入其中. 问题描述: 但是在签名 ...

最新文章

  1. 他,16岁辍学创业,如今已身家过亿!今年将实现飞向太空的梦想
  2. 密码学专题 信息摘要和数字签名指令
  3. php里isset的属性,测试PHP中变量是否存在的最佳方法;isset()显然已损坏
  4. python图片转字符_二十行python代码实现图片转字符
  5. 基于python----图像的表示和可视化
  6. android listview 不重绘,重绘listview
  7. 转件工程--实践者的研究方法阅读笔记1
  8. Windows Embedded Compact 7中的进程和线程(上)
  9. Apache POI 读写 Word、PPT、Excel
  10. Matlab2014的下载和安装激活过程
  11. 【信号与系统】信号频谱和测量之汉明窗
  12. Python数据挖掘进阶--泰坦尼克号案例分析
  13. 安装西门子博图一直重启_安装西门子提示重启,重启后,继续提示重启,无限循环,着急解决谢谢...
  14. 小米路由器管理员密码爆破!
  15. tas5707php,TAS5707PHPR 立体声数字音频功率放大器
  16. 计算机2进制、4进制、8进制、10进制、16进制、32进制计算规则
  17. MFC的CImage图形处理
  18. MDK各芯片厂家安装支持包下载地址(含Stm32,Nuvoton等)
  19. JAVA NIO:NIO与OIO的对比以及Channel通道、Selector选择器、Buffer缓冲区的介绍 高并发
  20. 『现学现忘』Docker相关概念 — 1、云计算概念

热门文章

  1. 微信小程序tabBar不显示问题
  2. 电机PID控制补充篇-野火上位机串口协议介绍
  3. 2022年信息系统监理师考试大纲
  4. 常用编码说明-GB2312
  5. 【Spark学习】Spark思维导图(超详细!)
  6. Python GUI | 利用Tkinter制作签名设计软件!
  7. 阿里巴巴实习生面试悲惨经历
  8. android x86玩和平精英,和平精英iOS和安卓可以一起玩吗 和平精英iOS和安卓数据互通吗...
  9. 一年级上册计算机教学计划,新版人教版一年级上册教学计划
  10. 再理解:LNode、*LinkList