Java利用poi对word插入文字图片.docx

上传人:b****6 文档编号:6048801 上传时间:2023-01-03 格式:DOCX 页数:14 大小:64.76KB
下载 相关 举报
Java利用poi对word插入文字图片.docx_第1页
第1页 / 共14页
Java利用poi对word插入文字图片.docx_第2页
第2页 / 共14页
Java利用poi对word插入文字图片.docx_第3页
第3页 / 共14页
Java利用poi对word插入文字图片.docx_第4页
第4页 / 共14页
Java利用poi对word插入文字图片.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

Java利用poi对word插入文字图片.docx

《Java利用poi对word插入文字图片.docx》由会员分享,可在线阅读,更多相关《Java利用poi对word插入文字图片.docx(14页珍藏版)》请在冰豆网上搜索。

Java利用poi对word插入文字图片.docx

Java利用poi对word插入文字图片

Java利用poi对word插入文字图片

文档末尾rar压缩包内,完整的Javaprojectdemo,包含所需的所有jar包,示例文件,使用说明等。

三步实现:

一、

packagecom.word.poi;

importjava.io.IOException;

importjava.io.InputStream;

importorg.apache.poi.openxml4j.opc.OPCPackage;

importorg.apache.poi.xwpf.usermodel.XWPFDocument;

importorg.apache.poi.xwpf.usermodel.XWPFParagraph;

importorg.apache.xmlbeans.XmlException;

importorg.apache.xmlbeans.XmlToken;

importorg.openxmlformats.schemas.drawingml.x2006.main.CTNonVisualDrawingProps;

importorg.openxmlformats.schemas.drawingml.x2006.main.CTPositiveSize2D;

importorg.openxmlformats.schemas.drawingml.x2006.wordprocessingDrawing.CTInline;

 

/********************************************************

* 类名:

CustomXWPFDocument

* 功能:

XWPFDocument读写word.docx

* 作者:

qiucx 2017年4月12日

* 修改记录:

*          日期                 修改人                 修改说明

********************************************************/

publicclassCustomXWPFDocumentextendsXWPFDocument{

publicCustomXWPFDocument(InputStreamin)throwsIOException{

super(in);

}

publicCustomXWPFDocument(){

super();

}

publicCustomXWPFDocument(OPCPackagepkg)throwsIOException{

super(pkg);

}

/********************************************************

* 函数名:

 createPicture

* 功能 :

 在word中标记的位置生成指定路径的图片

* 作者 :

qiucx 2017年4月12日

* 参数表:

 @paramid

* 参数表:

 @paramwidth设置图片宽度

* 参数表:

 @paramheight设置图片高度

* 参数表:

 @paramparagraph 段落参数   

* 返回值:

 void    

* 修改记录:

*          日期                 修改人                 修改说明

********************************************************/

publicvoidcreatePicture(intid,intwidth,intheight,XWPFParagraphparagraph){

finalintEMU=9525;

width*=EMU;

height*=EMU;

System.out.println("getAllPictures---"+getAllPictures().size());

StringblipId=getAllPictures().get(id).getPackageRelationship().getId();

CTInlineinline=paragraph.createRun().getCTR().addNewDrawing().addNewInline();

StringpicXml=""

+"

graphicxmlns:

a=\"http:

//schemas.openxmlformats.org/drawingml/2006/main\">"

+"

graphicDatauri=\"http:

//schemas.openxmlformats.org/drawingml/2006/picture\">"

+"

picxmlns:

pic=\"http:

//schemas.openxmlformats.org/drawingml/2006/picture\">"

+"

nvPicPr>"+"

cNvPrid=\""

+id

+"\"name=\"Generated\"/>"

+"

cNvPicPr/>"

+"

nvPicPr>"

+"

blipFill>"

+"

blipr:

embed=\""

+blipId

+"\"xmlns:

r=\"http:

//schemas.openxmlformats.org/officeDocument/2006/relationships\"/>"

+"

stretch>"

+"

fillRect/>"

+"

stretch>"

+"

blipFill>"

+"

spPr>"

+"

xfrm>"

+"

offx=\"0\"y=\"0\"/>"

+"

extcx=\""

+width

+"\"cy=\""

+height

+"\"/>"

+"

xfrm>"

+"

prstGeomprst=\"rect\">"

+"

avLst/>"

+"

prstGeom>"

+"

spPr>"

+"

pic>"

+"

graphicData>"+"

graphic>";

inline.addNewGraphic().addNewGraphicData();

XmlTokenxmlToken=null;

try{

xmlToken=XmlToken.Factory.parse(picXml);

}catch(XmlExceptionxe){

xe.printStackTrace();

}

inline.set(xmlToken);

inline.setDistT(0);

inline.setDistB(0);

inline.setDistL(0);

inline.setDistR(0);

CTPositiveSize2Dextent=inline.addNewExtent();

extent.setCx(width);

extent.setCy(height);

CTNonVisualDrawingPropsdocPr=inline.addNewDocPr();

docPr.setId(id);

docPr.setName("图片"+id);

docPr.setDescr("测试");

}

}

 

二、

packagecom.word.poi;

importjava.io.ByteArrayInputStream;

importjava.io.IOException;

importjava.io.InputStream;

importjava.util.Iterator;

importjava.util.List;

importjava.util.Map;

importjava.util.Map.Entry;

importorg.apache.poi.POIXMLDocument;

importorg.apache.poi.openxml4j.opc.OPCPackage;

importorg.apache.poi.xwpf.usermodel.XWPFParagraph;

importorg.apache.poi.xwpf.usermodel.XWPFRun;

importorg.apache.poi.xwpf.usermodel.XWPFTable;

importorg.apache.poi.xwpf.usermodel.XWPFTableCell;

importorg.apache.poi.xwpf.usermodel.XWPFTableRow;

/********************************************************

* 类名:

WordUtil

* 功能:

POIWord读取编辑工具类

* 作者:

qiucx 2017年4月12日

* 修改记录:

*          日期                 修改人                 修改说明

********************************************************/

publicclassWordUtil{

/********************************************************

* 函数名:

 generateWord

* 功能 :

 通用功能处理

* 作者 :

qiucx 2017年4月12日

* 参数表:

 @paramparam

* 参数表:

 @paramtemplate

* 参数表:

 @return    

* 返回值:

 CustomXWPFDocument    

* 修改记录:

*          日期                 修改人                 修改说明

********************************************************/

publicstaticCustomXWPFDocumentgenerateWord(Mapparam,Stringtemplate){

CustomXWPFDocumentdoc=null;

try{

OPCPackagepack=POIXMLDocument.openPackage(template);

doc=newCustomXWPFDocument(pack);

if(param!

=null&¶m.size()>0){

//处理段落

ListparagraphList=doc.getParagraphs();

processParagraphs(paragraphList,param,doc);

//处理表格

Iteratorit=doc.getTablesIterator();

while(it.hasNext()){

XWPFTabletable=it.next();

Listrows=table.getRows();

for(XWPFTableRowrow:

rows){

Listcells=row.getTableCells();

for(XWPFTableCellcell:

cells){

ListparagraphListTable=cell.getParagraphs();

processParagraphs(paragraphListTable,param,doc);

}

}

}

}

}catch(Exceptione){

e.printStackTrace();

}

returndoc;

}

/********************************************************

* 函数名:

 processParagraphs

* 功能 :

 处理段落

* 作者 :

qiucx 2017年4月12日

* 参数表:

 @paramparagraphList

* 参数表:

 @paramparam

* 参数表:

 @paramdoc    

* 返回值:

 void    

* 修改记录:

*          日期                 修改人                 修改说明

********************************************************/

publicstaticvoidprocessParagraphs(ListparagraphList,Mapparam,CustomXWPFDocumentdoc){

if(paragraphList!

=null&¶graphList.size()>0){

for(XWPFParagraphparagraph:

paragraphList){

Listruns=paragraph.getRuns();

for(XWPFRunrun:

runs){

Stringtext=run.getText(0);

if(text!

=null){

booleanisSetText=false;

for(Entryentry:

param.entrySet()){

Stringkey=entry.getKey();

if(text.indexOf(key)!

=-1){

isSetText=true;

Objectvalue=entry.getValue();

if(valueinstanceofString){//文本替换

text=text.replace(key,value.toString());

}elseif(valueinstanceofMap){//图片替换

text=text.replace(key,"");

Mappic=(Map)value;

intwidth=Integer.parseInt(pic.get("width").toString());

intheight=Integer.parseInt(pic.get("height").toString());

intpicType=getPictureType(pic.get("type").toString());

byte[]byteArray=(byte[])pic.get("content");

ByteArrayInputStreambyteInputStream=newByteArrayInputStream(byteArray);

try{

intind=doc.addPicture(byteInputStream,picType);

System.out.println(ind+"------------");

doc.createPicture(ind,width,height,paragraph);

}catch(Exceptione){

e.printStackTrace();

}

}

}

}

if(isSetText){

run.setText(text,0);

}

}

}

}

}

}

/********************************************************

* 函数名:

 getPictureType

* 功能 :

 根据图片类型,取得对应的图片类型代码

* 作者 :

qiucx 2017年4月12日

* 参数表:

 @parampicType

* 参数表:

 @return    

* 返回值:

 int    

* 修改记录:

*          日期                 修改人                 修改说明

********************************************************/

privatestaticintgetPictureType(StringpicType){

intres=CustomXWPFDocument.PICTURE_TYPE_PICT;

if(picType!

=null){

if(picType.equalsIgnoreCase("png")){

res=CustomXWPFDocument.PICTURE_TYPE_PNG;

}elseif(picType.equalsIgnoreCase("dib")){

res=CustomXWPFDocument.PICTURE_TYPE_DIB;

}elseif(picType.equalsIgnoreCase("emf")){

res=CustomXWPFDocument.PICTURE_TYPE_EMF;

}elseif(picType.equalsIgnoreCase("jpg")||picType.equalsIgnoreCase("jpeg")){

res=CustomXWPFDocument.PICTURE_TYPE_JPEG;

}elseif(picType.equalsIgnoreCase("wmf")){

res=CustomXWPFDocument.PICTURE_TYPE_WMF;

}

}

returnres;

}

/********************************************************

* 函数名:

 inputStream2ByteArray

* 功能 :

 将输入流中的数据写入字节数组

* 作者 :

qiucx 2017年4月12日

* 参数表:

 @paramin

* 参数表:

 @paramisClose

* 参数表:

 @return    

* 返回值:

 byte[]    

* 修改记录:

*          日期                 修改人                 修改说明

********************************************************/

publicstaticbyte[]inputStream2ByteArray(InputStreamin,booleanisClose){

byte[]byteArray=null;

try{

inttotal=in.available();

byteArray=newbyte[total];

in.read(byteArray);

}catch(IOExceptione){

e.printStackTrace();

}finally{

if(isClose){

try{

in.close();

}catch(Exceptione2){

System.out.println("关闭流失败");

}

}

}

returnbyteArray;

}

}

 

三、

packagecom.word.poi;

importjava.io.FileInputStream;

importjava.io.FileOutputStream;

importjava.util.Date;

importjava.util.HashMap;

importjava.util.Map;

/********************************************************

* 类名:

Test

* 功能:

测试类指定一些标记的参数,图片路径,文件模板位置,文件输出位置

* 作者:

qiucx 2017年4月12日

* 修改记录:

*          日期                 修改人                 修改说明

********************************************************/

publicclassTest{

//指定一些标记的参数,图片路径,文件模板位置,文件输出位置

publicstaticvoidmain(String[]args)throwsException{

//文字标记

Mapparam=newHashMap();

param.put("${name}","qiucx");

param.put("${zhuanye}","计算机科学与技术");

param.put("${sex}","男");

param.put("${school_name}","福建农林大学");

param.put("${date}",newDate().toString());

//图片标记,路径,宽高

Mapheader

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1