package com.king.stock.test;
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.StringWriter;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.Map;
import freemarker.template.Configuration;
import freemarker.template.Template;
public class HtmlGenerateImages {
public static void main(String[] args) throws Exception {
// 1. 生成 HTML 内容
String html = generateHtml();
// 2. 渲染 HTML 为图片
byte[] imageBytes = renderHtmlToImage(html);
System.out.println("imageBytes"+imageBytes);
// 3. 将二进制数据写入 TXT 文件
Files.write(Paths.get("output.txt"), imageBytes);
System.out.println("图片数据已保存到 output.txt");
}
private static String generateHtml() throws Exception {
Configuration cfg = new Configuration(Configuration.VERSION_2_3_31);
cfg.setClassForTemplateLoading(HtmlGenerateImages.class, "/templates");
Template template = cfg.getTemplate("example.ftl");
Map<String, Object> data = new HashMap<>();
data.put("name", "World");
data.put("time", LocalDateTime.now().format(DateTimeFormatter.ofPattern("HH:mm:ss")));
StringWriter writer = new StringWriter();
template.process(data, writer);
return writer.toString();
}
private static byte[] renderHtmlToImage(String html) {
JEditorPane pane = new JEditorPane();
pane.setContentType("text/html");
pane.setText(html);
pane.setSize(500, 300); // 设置默认大小
// 渲染为图片
BufferedImage image = new BufferedImage(
pane.getWidth(),
pane.getHeight(),
BufferedImage.TYPE_INT_RGB
);
Graphics2D g = image.createGraphics();
pane.paint(g);
g.dispose();
// 转为字节数组
try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
javax.imageio.ImageIO.write(image, "png", baos);
return baos.toByteArray();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}