临时给项目组写的一个操作word2007的示例程序;
开发环境是windows,使用的POI版本是3.14
通过word文件模板,可替换模板中变量,同时可以在指定位置插入表格或者图片,生成新的WORD文件;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.apache.poi.POIXMLDocument;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.util.Units;
import org.apache.poi.xwpf.usermodel.BreakType;
import org.apache.poi.xwpf.usermodel.Document;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;
import org.apache.xmlbeans.XmlCursor;
public class WordUtil2007 {
/**
* 根据指定的参数值、模板,生成 word 文档
*
* @param param
* 需要替换的变量
* @param template
* 模板
*/
public static XWPFDocument generateWord(Map<String, Object> param,
String template) {
CustomXWPFDocument doc = null;
try {
OPCPackage pack = POIXMLDocument.openPackage(template);
doc = new CustomXWPFDocument(pack);
if (param != null && param.size() > 0) {
// 处理段落
List<XWPFParagraph> paragraphList = doc.getParagraphs();
processParagraphs(paragraphList, param, doc);
}
} catch (Exception e) {
e.printStackTrace();
}
return doc;
}
/**
* 处理段落中文本,替换文本中定义的变量;
*
* @param paragraphList
* 段落列表
* @param param
* 需要替换的变量及变量值
* @param doc
* 需要替换的DOC
*/
public static void processParagraphs(List<XWPFParagraph> paragraphList,
Map<String, Object> param, XWPFDocument doc) {
if (paragraphList != null && paragraphList.size() > 0) {
for (XWPFParagraph paragraph : paragraphList) {
List<XWPFRun> runs = paragraph.getRuns();
for (XWPFRun run : runs) {
String text = run.getText(0);
if (text != null) {
boolean isSetText = false;
for (Entry<String, Object> entry : param.entrySet()) {
String key = entry.getKey();
if (text.indexOf(key) != -1) {
isSetText = true;
Object value = entry.getValue();
if (value instanceof String) {// 文本替换
text = text.replace(key, value.toString());
}
}
}
if (isSetText) {
run.setText(text, 0);
}
}
}
}
}
}
/**
* 在定位的位置插入表格;
*
* @param key
* 定位的变量值
* @param doc
* 需要替换的DOC
*/
public static void insertTab(String key, XWPFDocument doc2) {
List<XWPFParagraph> paragraphList = doc2.getParagraphs();
if (paragraphList != null && paragraphList.size() > 0) {
for (XWPFParagraph paragraph : paragraphList) {
List<XWPFRun> runs = paragraph.getRuns();
for (XWPFRun run : runs) {
String text = run.getText(0);
if (text != null) {
if (text.indexOf(key) >= 0) {
XmlCursor cursor = paragraph.getCTP().newCursor();
XWPFTable tableOne = doc2.insertNewTbl(cursor);// ---这个是关键
// XWPFTable tableOne =
// paragraph.getDocument().createTable();
XWPFTableRow tableOneRowOne = tableOne.getRow(0);
tableOneRowOne.getCell(0).setText("一行一列");
XWPFTableCell cell12 = tableOneRowOne.createCell();
cell12.setText("一行二列");
// tableOneRowOne.addNewTableCell().setText("第1行第2列");
// tableOneRowOne.addNewTableCell().setText("第1行第3列");
// tableOneRowOne.addNewTableCell().setText("第1行第4列");
XWPFTableRow tableOneRowTwo = tableOne.createRow();
tableOneRowTwo.getCell(0).setText("第二行第一列");
tableOneRowTwo.getCell(1).setText("第二行第二列");
// tableOneRowTwo.getCell(2).setText("第2行第3列");
XWPFTableRow tableOneRow3 = tableOne.createRow();
//---顺序增加行后,忽略第1、2单元格,直接插入3、4
tableOneRow3.addNewTableCell().setText("第三行第3列");
tableOneRow3.addNewTableCell().setText("第三行第4列");
}
}
}
}
}
}
public static void insertImage(String key, XWPFDocument doc) {
List<XWPFParagraph> paragraphList = doc.getParagraphs();
try {
if (paragraphList != null && paragraphList.size() > 0) {
for (XWPFParagraph paragraph : paragraphList) {
List<XWPFRun> runs = paragraph.getRuns();
for (XWPFRun run : runs) {
String text = run.getText(0);
if (text != null) {
if (text.indexOf(key) >= 0) {
run.addBreak();
run.addPicture(
new FileInputStream("c:/11.jpg"),Document.PICTURE_TYPE_JPEG,"c:/11.jpg", Units.toEMU(200),Units.toEMU(200)); // 200x200 pixels
run.addBreak(BreakType.PAGE);
}
}
}
}
}
} catch (InvalidFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 测试用方法
*/
public static void main(String[] args) throws Exception {
Map<String, Object> param = new HashMap<String, Object>();
param.put("${name}", "哈哈哈哈");
param.put("${zhuanye}", "信息管理与信息系统");
param.put("${sex}", "男");
param.put("${school}", "大学");
param.put("${date}", "2016-09-21");
Map<String, Object> twocode = new HashMap<String, Object>();
twocode.put("width", 100);
twocode.put("height", 100);
twocode.put("type", "png");
XWPFDocument doc = WordUtil2007.generateWord(param, "d:\\2007.docx");
WordUtil2007.insertTab("${table}", doc); // /----------创建表
WordUtil2007.insertImage("${image}", doc); // /----------创建图
// ------替换多余的标志位----//
param = new HashMap<String, Object>();
param.put("${test}", "下一个段落");
param.put("${table}", "");
param.put("${image}", "");
WordUtil2007.processParagraphs(doc.getParagraphs(), param, doc);
FileOutputStream fopts = new FileOutputStream("d:\\2007-2.docx");
doc.write(fopts);
}
}
相关推荐
本篇文章将详细介绍如何使用POI来读写Word文件,兼容doc与docx版本。 首先,我们需要理解.doc和.docx的区别。.doc是旧版Microsoft Word(Word 2003及更早版本)使用的文件格式,基于二进制结构;而.docx是Word 2007...
本教程将详细讲解如何在Android中实现读写Word文档,包括在指定位置插入文字、替换现有文字、插入和修改表格以及插入和替换图片。 首先,我们需要引入Apache POI库,这是一个Java API,用于处理微软的Office文档,...
Java POI库是Apache软件基金会开发的一个开源项目,专门用于读写Microsoft Office格式的文件,如Word(.doc和.docx)、Excel(.xls和.xlsx)等。在本主题中,我们将深入探讨如何使用Java POI流处理Word模板,插入...
在Java编程领域,Apache POI库是一个非常实用的工具,它允许开发者读写Microsoft Office格式的文件,如Word、Excel和PowerPoint。本项目“Java利用poi对word插入文字图片”是一个具体的示例,旨在教给你如何使用...
在Java编程中,Apache POI库是一个非常实用的工具,它允许开发者读写Microsoft Office格式的文件,如Word(.doc或.docx)、Excel(.xls或.xlsx)和PowerPoint(.ppt或.pptx)。本篇文章将深入探讨如何利用POI库在...
5. **生成Word文档**:使用HWPF API,可以创建新的Word文档,插入文本、段落、图片等。开发者需要实例化`Document`对象,创建`Paragraph`,然后添加到文档中。如果XML数据需要转换为Word文档,可能需要解析XML并映射...
关于压缩包中的"poi读写word模板包",可能包含了一些示例代码或模板文件,帮助开发者理解如何使用Apache POI进行Word模板的读写。解压后,你可以查看这些文件来学习具体实现,包括如何查找和替换模板中的特定字符串...
在生成Word表格和插入图片时,Apache POI提供了丰富的API接口。 2. **生成Word表格**:使用Apache POI,你可以创建表格,设定行数、列数,填充数据。表格的样式,如边框、颜色、字体等,也可以进行定制。例如,你...
在Java编程领域,Apache POI库是一个非常实用的工具,它允许开发者读写Microsoft Office格式的文件,包括Word(.doc/.docx)、Excel(.xls/.xlsx)和PowerPoint(.ppt/.pptx)。本示例聚焦于使用POI库根据Word模板...
4. **保存文档**:最后,使用XWPFDocument的write()方法将修改后的文档写入新的.docx文件,或者直接覆盖原有的模板文件。 示例代码可能如下: ```java import org.apache.poi.xwpf.usermodel.*; // 加载模板 ...
7. **FreeMarkerDemo**:这个文件可能是一个Java类,实现了Freemarker和Apache POI的集成,用于生成Word文档并插入图片。它可能包含了一个或者多个方法,如`generateWordWithImage()`,这个方法接收模板文件、数据...
总结起来,"POI-TL合并多个Word文档"涉及到的关键技术有Apache POI的XWPF组件用于读写.docx文件,以及POI-TL库提供的模板处理功能,使得在Java程序中高效地合并和生成Word文档成为可能。这在处理批量报告、合同生成...
5. **插入图片**: 使用POI的API在指定位置插入图片,例如`XWPFParagraph.addInlinePicture()`方法。 6. **保存生成的Word文档**: 将修改后的Word文档保存为新的文件。 **示例代码片段** ```java // FreeMarker配置 ...
Apache POI是Java社区开发的一个库,主要用于读写Microsoft Office格式的文件,如Word(.doc/.docx)、Excel(.xls/.xlsx)等。在本项目中,“使用java Apache poi 根据word模板生成word报表.rar”是一个压缩包,...
这个"poi读写office文件样例程序"提供了一系列的源代码示例,帮助开发者理解和实现对这些文件的读取和写入操作。下面将详细介绍其中涉及的关键知识点。 1. **Apache POI 框架** Apache POI 是Apache软件基金会的一...
Apache POI是开源项目,主要用来读写Microsoft Office格式的文件,包括Word(.doc和.docx)、Excel(.xls和.xlsx)和PowerPoint(.ppt和.pptx)。在本场景中,我们主要关注Word文档的处理。 首先,我们需要理解如何...
在Java编程环境中,Apache POI库是一个非常实用的工具,它允许开发者读写Microsoft Office格式的文件,包括Word文档。本篇文章将详细讲解如何利用Apache POI库在Java中实现Word文档的数据填充以及多文件合并。 1. *...
Java使用Apache POI-TL库生成Word文档是一个高效且灵活的方法,尤其在处理大量结构化数据时。Apache POI是一个广泛使用的开源库,它允许Java开发者读写Microsoft Office格式的文件,而POI-TL(Template-based ...