一、将poi-tl的图片实现类复制到本地
二、写清除图片的方法
XWPFParagraph par = (XWPFParagraph) run.getParent();
for (XWPFRunr :par.getRuns()) {
r.setText("照片", 0);
CTDrawing[] arr = r.getCTR().getDrawingArray();
for (intk = 0;k < arr.length;k++) {
r.getCTR().removeDrawing(k);
}
}
总代码如下:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTDrawing;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.data.PictureRenderData;
import com.deepoove.poi.policy.PictureRenderPolicy;
import com.deepoove.poi.policy.RenderPolicy;
import com.deepoove.poi.template.ElementTemplate;
import com.deepoove.poi.template.run.RunTemplate;
public class MyPictureRenderPolicy implements RenderPolicy {
protected final Logger logger = LoggerFactory.getLogger(PictureRenderPolicy.class);
@Override
public void render(ElementTemplate eleTemplate, Object renderData, XWPFTemplate doc) {
RunTemplate runTemplate = (RunTemplate) eleTemplate;
XWPFRun run = runTemplate.getRun();
if (renderData == null) {
// 当数据为空时,视为初始化图片
XWPFParagraph par = (XWPFParagraph) run.getParent();
for (XWPFRun r : par.getRuns()) {
r.setText("照片", 0);
CTDrawing[] arr = r.getCTR().getDrawingArray();
for (int k = 0; k < arr.length; k++) {
r.getCTR().removeDrawing(k);
}
}
return;
}
PictureRenderData pictureRenderData = null;
if (renderData instanceof PictureRenderData) {
pictureRenderData = (PictureRenderData) renderData;
} else {
logger.warn("Error render data,should be pictureRenderData:" + renderData.getClass());
return;
}
String blipId;
try {
byte[] data = pictureRenderData.getData();
if (null == data) {
FileInputStream is = new FileInputStream(pictureRenderData.getPath());
blipId = doc.getXWPFDocument().addPictureData(is, suggestFileType(pictureRenderData.getPath()));
} else {
blipId = doc.getXWPFDocument().addPictureData(data, suggestFileType(pictureRenderData.getPath()));
}
doc.getXWPFDocument().addPicture(blipId,
doc.getXWPFDocument().getNextPicNameNumber(suggestFileType(pictureRenderData.getPath())),
pictureRenderData.getWidth(), pictureRenderData.getHeight(), run);
run.setText("", 0);
} catch (InvalidFormatException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
private int suggestFileType(String imgFile) {
int format = 0;
if (imgFile.endsWith(".emf"))
format = XWPFDocument.PICTURE_TYPE_EMF;
else if (imgFile.endsWith(".wmf"))
format = XWPFDocument.PICTURE_TYPE_WMF;
else if (imgFile.endsWith(".pict"))
format = XWPFDocument.PICTURE_TYPE_PICT;
else if (imgFile.endsWith(".jpeg") || imgFile.endsWith(".jpg"))
format = XWPFDocument.PICTURE_TYPE_JPEG;
else if (imgFile.endsWith(".png"))
format = XWPFDocument.PICTURE_TYPE_PNG;
else if (imgFile.endsWith(".dib"))
format = XWPFDocument.PICTURE_TYPE_DIB;
else if (imgFile.endsWith(".gif"))
format = XWPFDocument.PICTURE_TYPE_GIF;
else if (imgFile.endsWith(".tiff"))
format = XWPFDocument.PICTURE_TYPE_TIFF;
else if (imgFile.endsWith(".eps"))
format = XWPFDocument.PICTURE_TYPE_EPS;
else if (imgFile.endsWith(".bmp"))
format = XWPFDocument.PICTURE_TYPE_BMP;
else if (imgFile.endsWith(".wpg"))
format = XWPFDocument.PICTURE_TYPE_WPG;
else {
logger.error(
"Unsupported picture: " + imgFile + ". Expected emf|wmf|pict|jpeg|png|dib|gif|tiff|eps|bmp|wpg");
}
return format;
}
}
修正一下 :以上删除图片方式问题:说明一下 以上删除的方式只是删除了正文中引用图片显示的地方,还需要删除掉文件中的图片流,代码如下 :
XWPFDocument document = doc.getXWPFDocument().getXWPFDocument();
List<XWPFPictureData> pictures = document.getAllPictures();
PackagePartName partName=null;
for(XWPFPictureData pp:pictures) {
partName=pp.getPackagePart().getPartName();
if(null!=partName) {
PackagePart part = document.getPackage().getPart(partName);
if(null!=part) {
//删除图片流 删除关系
part.setDeleted(true);
String id = document.getRelationId(pp);
document.getPackagePart().removeRelationship(id);
document.getPackage().removePart(partName);
}
}
}