Java小白修炼手册
import come.MainFuncation.WorkWrite;
import java.awt.*;
import java.util.Scanner;
public class StartFunction {
public static void main(String[] args) {
System.out.print("请输入你的作业题目:");
Scanner scanner = new Scanner(System.in);
String fileName=scanner.next();
System.out.println("开始生成笔记...");
//启动
WorkWrite workWrite = new WorkWrite();
String backgroundImgPath="bg2.jpg"; //纸张图片地址
String bijiPath="biji.txt";//你的笔记文本的地址
String fontPath="ss2.ttf";//你的自定义字体文件的地址
Font newFont=workWrite.newFont(fontPath,110);//自定义字体和大小,未设置大小则默认90
String[] txt=workWrite.MarkContent(bijiPath);//笔记文本
workWrite.setRowlen(120);//设置行间距,未设置默认为100
Color color= new Color(Color.black.getRGB());//文字为黑色
workWrite.addWaterMark(backgroundImgPath, fileName,txt,color,newFont);//生成
System.out.println("完成");
}
}
你可以自定义bg.jpg,即更换纸张图片
将你网上白嫖来的笔记内容复制粘贴在biji.txt中
字体文件我已经提供2种(代码里用的第二种手写体,个人感觉比另一种真实),不需要更改,你也可以网上下载个其他的手写体
实现方法代码:
这部分代码是干活的
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import javax.imageio.ImageIO;
public class WorkWrite {
private float fontSize=90;//字体大小
private int rowlen=100;//行间距
private int page=0;//页码
/**
* 绘制水印
* @param split
* @param markContentColor
* @param font
*/
public void addWaterMark(String backgroundImgPath, String resultImgPath, String[] split,Color markContentColor,Font font) {
try {
// 读取原图片信息
File srcImgFile = new File(backgroundImgPath);//得到文件
Image srcImg = ImageIO.read(srcImgFile);//文件转化为图片
int srcImgWidth = srcImg.getWidth(null);//获取图片的宽
int srcImgHeight = srcImg.getHeight(null);//获取图片的高
BufferedImage bufImg = new BufferedImage(srcImgWidth, srcImgHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D g;
g = bufImg.createGraphics();
g.drawImage(srcImg, 0, 0, srcImgWidth, srcImgHeight, null);
g.setColor(markContentColor); //设置水印颜色
g.setFont(font); //设置字体
//内容起始坐标
int x = 100;
int y = 100;
int maxWord= (int) (srcImgWidth/fontSize);//每行最多的字数
for (int i=0;i<split.length;i++) {
//字符串可能会出现��,导致出现一些空白,所以为了保险起见将这些字符替换成空字符串
split[i]=split[i].replace("��","");
//获取字符串的字数
int collen=split[i].length();
/*
对每行的字符数进行规范
*/
if(collen>maxWord){//如果大于每行规定的字数
String substring = split[i].substring(0, maxWord);
g.drawString(substring, x, y); //绘制从0截取到最大字数的字符串
y += rowlen;//换行
String more=split[i].substring(maxWord,collen);//截取多出来的字符串
g.drawString(more, x, y);//绘制多出来的字符串
y += rowlen;//换行
}else {
//直接绘制
g.drawString(split[i], x, y);
y += rowlen;
}
//内容超出页面高度则分页
if(y>=srcImgHeight-1.5*rowlen) {
g.dispose();
//导出已经写满的笔记
productImage(bufImg,resultImgPath,++page);
y=rowlen;
g = bufImg.createGraphics();
g.drawImage(srcImg, 0, 0, srcImgWidth, srcImgHeight, null);
g.setColor(markContentColor); //设置水印颜色
g.setFont(font); //设置字体
}
}
//将最后一张笔记生成
g.dispose();
productImage(bufImg,resultImgPath,++page);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 生产笔记图片
* @param image
* @param tarImgPath
* @param page
*/
public void productImage(BufferedImage image,String tarImgPath,int page){
try {
tarImgPath=tarImgPath+page+".jpg";
FileOutputStream outImgStream = new FileOutputStream(tarImgPath);
ImageIO.write(image, "jpg", outImgStream);
outImgStream.flush();
outImgStream.close();
}catch (Exception e){
e.printStackTrace();
}
}
/**
* 获取笔记所有内容,存入字符串数组
* @param path path
* @return String[]
*/
public String[] MarkContent(String path){
StringBuilder builder = new StringBuilder();
try {
FileInputStream inputStream = new FileInputStream(path);
byte[] bytes = new byte[1024];
int temp;
while ((temp=inputStream.read(bytes))!=-1){
builder.append(new String(bytes,0,temp));
}
} catch (Exception e) {
e.printStackTrace();
}
return builder.toString().split("。");
}
/**
* 采用自定义手写字体,看起来更真实
* @param path path
* @param fontSize fontSize
* @return Font
*/
public Font newFont(String path,float fontSize){
Font font = null; //水印字体
try {
font = Font.createFont(Font.TRUETYPE_FONT,new File(path));
font=font.deriveFont(fontSize);
setFontSize(fontSize);
} catch (FontFormatException | IOException e) {
e.printStackTrace();
}
return font;
}
public void setFontSize(float size){
this.fontSize=size;
}
public void setRowlen(int rowlen){
this.rowlen=rowlen;
}
}
整体运行一下
这是biji.txt的内容
运行时输入作业名称
回车运行
运行完成后会在桌面生成一个output的文件夹
里面的图片就是你的笔记,笔记名字就是你开始时输入的
大功告成!
相信老师应该看不出来,哈哈
如果有疑问可以评论区留言,包回复
如果有不足之处望指出,感谢阅读!!