java word 图片不显示_POI用addPicture插入图片到word里面无法显示

这几天想通过一个现有word文件作为模板,然后根据标签写入对应数据,折腾了好几天了。

text解决了,表格解决了,结果才发现图片用XWPFDocument压根无法实现addPicture,POI自身有bug,图片是加入到word文件里面了,可是显示不了。。。

于是乎,又折腾了2天,终于整蛊了怎么让图片在里面显示出来,其他的还在进一步解决中。

贴个小代码给大家用,凑合着用,还有很多需要修改的:

/**

*

*/

package com.report.util;

import java.io.IOException;

import java.io.InputStream;

import org.apache.poi.openxml4j.opc.OPCPackage;

import org.apache.poi.xwpf.usermodel.XWPFDocument;

import org.apache.xmlbeans.XmlException;

import org.apache.xmlbeans.XmlToken;

import org.openxmlformats.schemas.drawingml.x2006.main.CTNonVisualDrawingProps;

import org.openxmlformats.schemas.drawingml.x2006.main.CTPositiveSize2D;

import org.openxmlformats.schemas.drawingml.x2006.wordprocessingDrawing.CTInline;

/**

* @author 郑宗锐

*

*/

public class CustomXWPFDocument extends XWPFDocument {

public CustomXWPFDocument(InputStream in) throws IOException {

super(in);

}

/**

*

*/

public CustomXWPFDocument() {

super();

// TODO Auto-generated constructor stub

}

/**

* @param pkg

* @throws IOException

*/

public CustomXWPFDocument(OPCPackage pkg) throws IOException {

super(pkg);

// TODO Auto-generated constructor stub

}

public void createPicture(int id, int width, int height) {

final int EMU = 9525;

width *= EMU;

height *= EMU;

String blipId = getAllPictures().get(id).getPackageRelationship()

.getId();

CTInline inline = createParagraph().createRun().getCTR()

.addNewDrawing().addNewInline();

String picXml = ""

+ ""

+ " "

+ " "

+ " " + "

+ id

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

+ " "

+ "

"

+ " "

+ "

+ blipId

+ "\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"/>"

+ " "

+ " "

+ " "

+ " "

+ " "

+ " "

+ " "

+ "

+ width

+ "\" cy=\""

+ height

+ "\"/>"

+ " "

+ " "

+ " "

+ " "

+ " "

+ " "

+ " " + "";

// CTGraphicalObjectData graphicData =

inline.addNewGraphic().addNewGraphicData();

XmlToken xmlToken = null;

try {

xmlToken = XmlToken.Factory.parse(picXml);

} catch (XmlException xe) {

xe.printStackTrace();

}

inline.set(xmlToken);

// graphicData.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("甩葱玩具");

}

}

调用方法大概是这样的:

OPCPackage pack = POIXMLDocument.openPackage(fileName);

CustomXWPFDocument doc = new CustomXWPFDocument(pack);

int ind = doc.addPicture(new FileInputStream("d:\\甩葱玩具.jpg"), XWPFDocument.PICTURE_TYPE_JPEG);

doc.createPicture(ind, 259, 58);

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:深蓝海洋 设计师:CSDN官方博客 返回首页
评论

打赏作者

沁蓝chen

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值