在web开发中经常碰到需要导出文档的场景,一般是在word模板的基础上添加一些系统数据即可,用POI的range可以方便的实现这一需求。
然而,使用getRange方法有可能破坏word文档中插入的图片。解决办法是把文档中图片版式改为嵌入型。
package com.poi.test;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.usermodel.Range;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
public class PoiTest {
public static void docReplaceWithPOI(String sourcePath, String targetPath,
Map<String, String> map) {
HWPFDocument doc = null;
try {
InputStream inp = new FileInputStream(sourcePath);
POIFSFileSystem fs = new POIFSFileSystem(inp);
doc = new HWPFDocument(fs);
Range range = doc.getRange();
for (Map.Entry<String, String> entry : map.entrySet()) {
range.replaceText(e