最近从新写了一下根据Word模板导出Word。
注意:
Word只包含表格和段落,不使用表格布局。
图片样式也保留,但是预先需要知道图片的资源ID。
删除多余模块时,有顶部对不齐的问题。
可能还存在其他细节问题。
首先模板样式:
下面是导出来的Word:
下面贴上代码:
package com.acgist.word;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.openxml4j.opc.TargetMode;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRelation;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.apache.xmlbeans.XmlCursor;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPicture;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTR;
public class WordUtils {
private WordData wordData = null;
private XWPFDocument document = null;
private static final String TEXT_PATH = "declare namespace w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\"; $this//w:t";
private Map xwpfParagraphs = new HashMap(); // 多项
private static final String[] BASE_TAGS = {"${age}", "${job}", "${name}", "${email}", "${mobile}", "${address}"};
private static final String NEW_LINE = "\\\\r\\\\n|\\\\n|\\\\r|\\r\\n|\\n|\\r";
private static final String TAG_REGEX = "\\$\\{[a-z_]+\\}"; // 标签正则表达式
public static void main(String[] args) {
WordUtils utils = new WordUtils();
utils.build("e:/company/word/JM0001.docx");
// utils.build("e:/company/word/JM0001YA.docx");
WordData wordData = new WordData();
wordData.setAge("23岁");
wordData.setJob("工作");
wordData.setName("喻胜");
wordData.setAddress("广东广州");
wordData.setMobile("13888888888");
wordData.setEmail("8888@qq.com");
wordData.setHead("e:/company/word/sign.png");
Map item = new TreeMap();
item.put("技能证书", "北大、擎华");
item.put("兴趣爱好", "动漫、游戏动漫、游戏动漫、游戏动漫、游戏动漫\r\n、游戏动漫、游戏动漫、游戏动漫、游戏动漫、游戏动漫、游戏动漫、游戏动漫、游戏动漫、游戏动漫、游戏");
Map> items = new TreeMap>();
List lista = new ArrayList();
lista.add(new WordDataItem("2012-2012", "五百丁", "程序员", "zheshishiyigeceshi"));
lista.add(new WordDataItem("2013-2013", "百度", "程序员", "zheshishiyigeceshi"));
items.put("教育背景", lista);
wordData.setHeadId("rId8");
wordData.sorts.add("教育背景");
wordData.sorts.add("技能证书");
wordData.sorts.add("兴趣爱好");
// List listb = new ArrayList();
// listb.add(new WordDataItem("123", "北大", "北大"));
// listb.add(new WordDataItem("123", "北大", "北大"));
// items.put("工作经历", listb);
wordData.setItems(items);
wordData.setItem(item);
utils.write("e:/company/word/t.docx", wordData);
}
/**
* 多项信息分栏
*/
public enum Items_col_type {
all_in_one, // 全部在一行
time_post_in_one,
unit_post_i