您的位置:首页 > 职场人生

使用Docx4j操作PPT指南系列(四)

2012-02-02 15:51 387 查看
使用Docx4j操作PPT指南系列(四)

—— 在PPT中插入图片

在上一章我们了解到如何在PPT中创建文本以及其他的图形元素,在本章将会介绍如何在PPT中插入一张图片,在这里要说一下,插入图片的操作相对比较简单,使用XML Schema的方式即可。

还是先从效果图开始:





插入图片的过程很简单:

创建PPT页

将要插入的图片读取成一个byte数组

使用Image对应的XML Schema生成图片

代码如下:

/**

* 创建对比分析图

*/

private void createImageChartSlide(

PresentationMLPackage presentationMLPackage) {

String partTitle = "";

String partName = "/ppt/slides/" + getRandomID() + ".xml";

SlidePart slidePart = createCommonSlide(presentationMLPackage,

partTitle, partName);

try {

// 读取本地文件获取Image部分代码略.......

byte[] image;

createImage(presentationMLPackage, slidePart, image, getRandomID(), partTitle, 611560, 1916831, 7992888, 3905767);

} catch (IOException e) {

e.printStackTrace();

}

}

/**

* @param presentationMLPackage

* @param slidePart

* @param data

* @param name

* @param x

* @param y

* @param cx

* @param cy

*/

private void createImage(PresentationMLPackage presentationMLPackage,

SlidePart slidePart, byte[] data, String id, String name, long x,

long y, long cx, long cy) {

BinaryPartAbstractImage imagePart = null;

try {

imagePart = BinaryPartAbstractImage.createImagePart(

presentationMLPackage, slidePart, data);

} catch (Exception e) {

e.printStackTrace();

}

if (imagePart == null)

return;

HashMap mappings = new HashMap();

mappings.put("id1", id);

mappings.put("name", "");

mappings.put("descr", "");

mappings.put("rEmbedId", imagePart.getSourceRelationship().getId());

// 注意,下面是图片位置的坐标

mappings.put("offx", Long.toString(x));

mappings.put("offy", Long.toString(y));

mappings.put("extcx", Long.toString(cx));

mappings.put("extcy", Long.toString(cy));

Object o;

try {

o = XmlUtils.unmarshallFromTemplate(imageXml, mappings,

Context.jcPML, Pic.class);

((Sld) slidePart.getJaxbElement()).getCSld().getSpTree()

.getSpOrGrpSpOrGraphicFrame().add(o);

} catch (JAXBException e) {

e.printStackTrace();

}

}

/**

* 图片XML

*/

private final String imageXml = "<p:pic xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" "

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

+ "xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\">"

+ "<p:nvPicPr><p:cNvPr id=\"${id1}\" name=\"${name}\" descr=\"${descr}\"/>"

+ "<p:cNvPicPr><a:picLocks noChangeAspect=\"1\"/></p:cNvPicPr><p:nvPr/></p:nvPicPr>"

+ "<p:blipFill><a:blip r:embed=\"${rEmbedId}\" cstate=\"print\"/><a:stretch><a:fillRect/>"

+ "</a:stretch></p:blipFill><p:spPr><a:xfrm><a:off x=\"${offx}\" y=\"${offy}\"/>"

+ "<a:ext cx=\"${extcx}\" cy=\"${extcy}\"/></a:xfrm><a:prstGeom prst=\"rect\"><a:avLst/>"

+ "</a:prstGeom></p:spPr></p:pic>";

通过上面的代码,就可以插入图片了,值得注意的是PPT中插入图片位置的坐标要设置正确。

在下一章,将会介绍PPT操作中最复杂的部分,如何插入一个表格。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息