
通常的做法是首先利用 FreeMarker 生成 HTML 内容(包括图片),然后将该 HTML 转换为 .doc 格式。
.doc 文件。尽管这不是最完美的解决方案,但大多数现代文字处理软件(如 Microsoft Word)能够打开并正确显示这种类型的文件。template.ftl创建一个 FreeMarker 模板文件,用于定义你的文档结构和如何嵌入图片。这里假设图片以 Base64 编码的形式嵌入。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>${title}</title>
</head>
<body>
<h1>${title}</h1>
<p><strong>Author:</strong> ${author}</p>
<p><strong>Date:</strong> ${date}</p>
<!-- 插入Base64编码的图片 -->
<img src="data:image/png;base64,${base64Image}" alt="Embedded Image" />
</body>
</html>编写 Java 代码,利用 FreeMarker 处理模板,并生成最终的 .doc 文件。
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.Version;
import java.io.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Base64;
public class FreeMarkerDocGenerator {
public static void main(String[] args) throws Exception {
// 1. 设置FreeMarker配置
Configuration cfg = new Configuration(new Version("2.3.31"));
cfg.setClassForTemplateLoading(FreeMarkerDocGenerator.class, "/templates");
cfg.setDefaultEncoding("UTF-8");
// 2. 加载模板
Template template = cfg.getTemplate("template.ftl");
// 3. 准备数据模型
Map<String, Object> dataModel = new HashMap<>();
dataModel.put("title", "My Generated Document with Image");
dataModel.put("author", "John Doe");
dataModel.put("date", "2025-04-16");
dataModel.put("base64Image", encodeImageToBase64(new File("path/to/your/image.png"))); // 图片路径
// 4. 合并模板和数据
StringWriter writer = new StringWriter();
template.process(dataModel, writer);
// 5. 将HTML内容保存为.doc文件
try (BufferedWriter fileWriter = new BufferedWriter(new FileWriter("output_with_image.doc"))) {
fileWriter.write(writer.toString());
}
System.out.println("Word document generated successfully.");
}
private static String encodeImageToBase64(File imageFile) throws IOException {
FileInputStream imageInFile = new FileInputStream(imageFile);
byte[] imageData = new byte[(int) imageFile.length()];
imageInFile.read(imageData);
return Base64.getEncoder().encodeToString(imageData);
}
}.doc 文件,但是请注意,这种方法依赖于文字处理软件对 HTML 的解释能力。不同的软件可能对此有不同的支持程度。.doc 文件格式限制,复杂的样式和布局可能无法完美呈现。对于复杂需求,建议考虑生成 .docx 文件。.docx 文件,而不是直接生成 .doc 文件。原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。