1、保存表格
java
package com.md.modules.es.patent.util;
import org.apache.poi.xwpf.usermodel.*;
import java.io.FileOutputStream;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class CreateWordWithTable {
public static void main(String[] args) {
try {
// 方法一、提前创建表格几行几列
// 创建一个空的Word文档
XWPFDocument doc = new XWPFDocument();
// 创建一个表格
XWPFTable table = doc.createTable(3, 3); // 3行3列
for (int row = 0; row < table.getNumberOfRows(); row++) {
for (int col = 0; col < table.getRow(row).getTableCells().size(); col++) {
XWPFTableCell cell = table.getRow(row).getCell(col);
cell.setText("行 " + (row + 1) + ", 列 " + (col + 1));
}
}
// 写入文件
FileOutputStream out = new FileOutputStream(new File("example.docx"));
doc.write(out);
out.close();
doc.close();
System.out.println("文档创建成功!");
// 方法二、创建空表下面动态创建行和列
createRowAndCol(doc);
} catch (Exception e) {
e.printStackTrace();
}
}
private static void createRowAndCol(XWPFDocument doc) {
String[] header = {"名称","地址"};
List<List> datas = List.of(List.of("TOM","美国"),List.of("小明","中国"));
XWPFTable table = doc.createTable();
// 先删除旧的表
table.removeRow(0);
// 添加title
XWPFTableRow titleRow = table.createRow();
for (String key : header) {
XWPFTableCell cell = titleRow.addNewTableCell(); //注意:表头需要创建列。下面的数据只需要获取列
XWPFParagraph paragraph = cell.addParagraph();
XWPFRun run = paragraph.createRun();
run.setText(key);
paragraph.setAlignment(ParagraphAlignment.CENTER); // 段落居中
}
// 添加数据
for (List data : datas) {
XWPFTableRow row = table.createRow();
for (int i = 0; i < data.size(); i++) {
XWPFTableCell cell = row.getCell(i);
XWPFParagraph paragraph = cell.addParagraph();
XWPFRun run = paragraph.createRun();
run.setText(data.get(i).toString());
paragraph.setAlignment(ParagraphAlignment.CENTER); // 段落居中
}
}
}
}
2、保存图片
java
package com.md.modules.es.patent.util;
import org.apache.poi.xwpf.usermodel.*;
import org.apache.poi.util.Units;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Base64;
public class InsertImageToWord {
public static void main(String[] args) throws Exception {
// 创建Word文档对象
XWPFDocument doc = new XWPFDocument();
// 创建一个写入对象
XWPFParagraph paragraph = doc.createParagraph();
XWPFRun run = paragraph.createRun();
// 示例Base64字符串(你应该从你的应用逻辑中获得这个字符串)
// String base64ImageString = "你的Base64图片字符串";
// String base64ImageString = "data:image/jpeg;base64,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";
String base64ImageString = getImgBase64();
byte[] imageBytes = Base64.getDecoder().decode(base64ImageString.split("base64,")[1]);
ByteArrayInputStream bis = new ByteArrayInputStream(imageBytes);
BufferedImage bImageFromConvert = ImageIO.read(bis);
// 将图片插入到文档中
run.addPicture(new ByteArrayInputStream(imageBytes), XWPFDocument.PICTURE_TYPE_PNG, "图片描述", Units.toEMU(bImageFromConvert.getWidth()), Units.toEMU(bImageFromConvert.getHeight()));
// 保存文档
try (FileOutputStream out = new FileOutputStream("你的文档路径.docx")) {
doc.write(out);
}
doc.close();
}
private static String getImgBase64() throws IOException {
String filePath = "D:\\mudan\\doc\\chart.png";
byte[] imageBytes2 = Files.readAllBytes(Paths.get(filePath));
String base64String = Base64.getEncoder().encodeToString(imageBytes2);
System.out.println("data:image/jpeg;base64," + base64String);
return base64String;
}
}
3、返回前端文件流
java
package com.md.modules.es.patent.util;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
public class WordDownloadServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
// 创建Word文档
XWPFDocument document = new XWPFDocument();
// 将文档写入字节流中
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
document.write(outStream);
// 关闭文档资源,释放内存
document.close();
// 设置响应头和类型
response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document"); // MIME type for Word documents
response.setHeader("Content-Disposition", "attachment; filename=\"example.docx\""); // 建议下载的文件名
response.setContentLength(outStream.size()); // 设置内容长度
// 将文档写入响应输出流中
ServletOutputStream outputStream = response.getOutputStream();
outStream.writeTo(outputStream);
outputStream.flush(); // 刷新输出流,确保所有数据都被发送
outputStream.close(); // 关闭输出流
}
}