JAVA开发 利用代码生成奖状图片
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);
}
}