java导出word poi_Java使用POI根据模板导出Word

最近从新写了一下根据Word模板导出Word。

注意:

Word只包含表格和段落,不使用表格布局。

图片样式也保留,但是预先需要知道图片的资源ID。

删除多余模块时,有顶部对不齐的问题。

可能还存在其他细节问题。

首先模板样式:

c356fd69c4b7cec73e66b463ea730cbb.png

下面是导出来的Word:

79e93f678119a101fdbafe6c5d876979.png

下面贴上代码:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值