JAVA开发 利用代码生成奖状图片

时间:2025-04-01 15:26:36
import javax.imageio.ImageIO; import java.awt.*; import java.awt.font.TextAttribute; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.text.AttributedString; import java.text.SimpleDateFormat; import java.util.Date; import java.awt.Font; import java.awt.font.FontRenderContext; import java.awt.font.LineBreakMeasurer; import java.awt.font.TextLayout; public class InsertPic { public static final String PATH = "D:\\OA_Temp"; public static void MakeCertificateOfAppreciation(String recognizor,String content){ try{ // 奖状图片(背景) BufferedImage backgroundImage = ImageIO.read(new File(PATH + "\\templates\\")); // 公司章 (插入章) BufferedImage imageToInsert = ImageIO.read(new File(PATH + "\\templates\\")); // 计算缩放比例,这里假设我们想要将图片缩放到公司章宽度高度的50% double scaleFactor = 0.5; int scaledWidth = (int) (imageToInsert.getWidth() * scaleFactor); int scaledHeight = (int) (imageToInsert.getHeight() * scaleFactor); // 创建一个Graphics2D对象,用于在奖状上插入公司章 Graphics2D g2d = backgroundImage.createGraphics(); // 设置文本的颜色、字体等 g2d.setColor(Color.black); // 文本颜色 Font font = new Font("SimSun", Font.PLAIN, 20); g2d.setFont(font); FontMetrics fm = g2d.getFontMetrics(); // 设置奖励人 g2d.drawString(recognizor, 80, 280); //设置奖状内容 // 计算文本的宽度和高度 FontRenderContext frc = g2d.getFontRenderContext(); AttributedString attributedText = new AttributedString(content); attributedText.addAttribute(TextAttribute.FONT, font); // 设定文本绘制的起始位置 float drawX = 80; // 文本起始的X坐标 float drawY = 310; // 文本起始的Y坐标(基线位置) // 创建LineBreakMeasurer实例 LineBreakMeasurer measurer = new LineBreakMeasurer(attributedText.getIterator(), frc); // 绘制每一行文本 while (measurer.getPosition() < content.length()) { TextLayout layout = measurer.nextLayout(backgroundImage.getWidth() - drawX * 2); // 减去左右间距 float y1 = drawY + layout.getAscent(); layout.draw(g2d, drawX, y1); drawY += layout.getAscent() + layout.getDescent() + layout.getLeading(); } //设置特此表彰,以资鼓励。 String text = "特此表彰,以资鼓励。"; g2d.drawString(text, 80, 580);; //设置公司名 text = "这是一个公司名(中国)有限公司"; g2d.drawString(text, 650, 600);; // 创建一个Date对象(这里使用当前时间作为示例) Date date = new Date(); // 创建一个SimpleDateFormat对象并指定日期格式 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月 "); String formattedDate = sdf.format(date); //设置生成年月日 text = "年 月:"+formattedDate; g2d.drawString(text, 710, 620); // 绘制公司章到奖状上 //(imageToInsert, x, y, null); g2d.drawImage(imageToInsert.getScaledInstance(scaledWidth, scaledHeight, Image.SCALE_SMOOTH), 680, 580, null); // 释放Graphics2D资源 g2d.dispose(); sdf = new SimpleDateFormat("yyyyMMdd HHmm "); // 使用SimpleDateFormat的format方法将Date对象转换为字符串 formattedDate = sdf.format(date); String fileName = formattedDate + ""; // 保存合并后的图片 ImageIO.write(backgroundImage, "jpg", new File(PATH +"\\attachments\\"+fileName)); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { String recognizor = "你好,星期六"; String content =" 苍茫的天涯是我的爱 绵绵的青山脚下花正开 什么样的节奏是最呀最摇摆 什么样的歌声才是最开怀 弯弯的河水从天上来 流向那万紫千红一片海 哗啦啦的歌谣是我们的期待 " + "一路边走边唱才是最自在 我们要唱就要唱得最痛快 你是我天边最美的云彩 让我用心把你留下来 留下来 悠悠的唱着最炫的民族风 让爱卷走所有的尘埃 我知道 " + "你是我心中最美的云彩 斟满美酒让你留下来 留下来 永远都唱着最炫的民族风 是整片天空最美的姿态 留下来"; MakeCertificateOfAppreciation(recognizor,content); } }