java poi实现数据的word导出(包括word模板的使用、复制表格、复制行、插入图片的使用)
1.实现的效果
实现病人基本信息、多条病历数据、多项检查项图片的动态插入(网络图片)
2.模板
把word中的占位符替换为实际的值,注意WPFRun表示有相同属性的一段文本,所以模板里变量内容需要从左到右的顺序写,${name},如果先写${},再添加内容,会拆分成几部分,不能正常使用,因此若出现替换失败的情况,可以尝试手动修改占位符,不要偷懒直接复制
3.pom.xml中相关依赖
包括poi和模板
org.apache.poi
poi-ooxml
3.15-beta2
org.apache.poi
ooxml-schemas
1.1
4.导出的工具类
/**
* 功能描述:word工具类
*
* @author jynn
* @created 2019年8月15日
* @version 1.0.0
*/
public class WordUtil {
/**
* 功能描述:word下载
*
* @param response
* @param patientMap
* @param list
* @param itemList
* @param file
* @see [相关类/方法](可选)
* @since [产品/模块版本](可选)
*/
public static final void DownloadWord(HttpServletResponse
response, Map patientMap,
List
5.自定义的ducument
主要需要重写document的创建图片方法
/**
* 功能描述:自定义XWPFDocument,并重写 createPicture()方法
*
* @author jynn
* @created 2019年8月18日
* @version 1.0.0
*/
public class CustomXWPFDocument extends XWPFDocument {
public CustomXWPFDocument() {
super();
}
public CustomXWPFDocument(OPCPackage opcPackage) throws
IOException {
super(opcPackage);
}
public CustomXWPFDocument(InputStream in) throws IOException {
super(in);
}
/**
* 功能描述:创建图片
*
* @param id
* @param width
* @param height
* @param paragraph
* @return
* @see [相关类/方法](可选)
* @since [产品/模块版本](可选)
*/
public void createPicture(int id, int width, int height,
XWPFParagraph paragraph) {
final int EMU = 9525;
width *= EMU;
height *= EMU;
String blipId =
getAllPictures().get(id).getPackageRelationship().getId();
CTInline inline =
paragraph.createRun().getCTR().addNewDrawing().addNewInline();
System.out.println(blipId + ":" + inline);
String picXml = "" + ""
+ " "
+ " "
+ " " + " "
+ " " + "
" + " "
+ " "
+ " " + "
" + " "
+ " " + " "
+ " "
+ " " + "
" + " " + "
"
+ " " + "
" + " "
+ " " + " " +
"";
inline.addNewGraphic().addNewGraphicData();
XmlToken xmlToken = null;
try {
xmlToken = XmlToken.Factory.parse(picXml);
} catch (XmlException xe) {
xe.printStackTrace();
}
inline.set(xmlToken);
inline.setDistT(0);
inline.setDistB(0);
inline.setDistL(0);
inline.setDistR(0);
CTPositiveSize2D extent = inline.addNewExtent();
extent.setCx(width);
extent.setCy(height);
CTNonVisualDrawingProps docPr = inline.addNewDocPr();
docPr.setId(id);
docPr.setName("图片" + id);
docPr.setDescr("测试");
}
}
6.源代码
运行接口:http://localhost:9400/word/export
https://github.com/JynnFun/word