使用Docx4j操作PPT指南系列(四)
2012-02-02 15:51
387 查看
使用Docx4j操作PPT指南系列(四)
—— 在PPT中插入图片
在上一章我们了解到如何在PPT中创建文本以及其他的图形元素,在本章将会介绍如何在PPT中插入一张图片,在这里要说一下,插入图片的操作相对比较简单,使用XML Schema的方式即可。
还是先从效果图开始:
插入图片的过程很简单:
创建PPT页
将要插入的图片读取成一个byte数组
使用Image对应的XML Schema生成图片
代码如下:
通过上面的代码,就可以插入图片了,值得注意的是PPT中插入图片位置的坐标要设置正确。
在下一章,将会介绍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操作中最复杂的部分,如何插入一个表格。
相关文章推荐
- 使用Docx4j操作PPT指南系列(三)
- 使用Docx4j操作PPT指南系列(二) 推荐
- 使用Docx4j操作PPT指南系列(附一)
- 使用Docx4j操作PPT指南系列(附二)
- 使用Docx4j操作PPT指南系列(一) 推荐
- 使用Docx4j操作PPT指南系列(五)
- 高效的使用空间SQL操作空间数据库系列的PPT
- 使用POI操作PPT文档
- LockWindowUpdate系列3:什么样的操作中应当使用LockWindowUpdate?
- Yii框架官方指南系列18——使用表单:创建动作
- Yii框架官方指南系列34——扩展Yii:使用扩展
- xcode 4 使用指南系列2-Int…
- Ripple安全操作系列一:使用…
- 使用iTextSharp在Asp.Net中操作PDF系列文章 目录
- Django使用mysql操作实战系列之七
- MySQLdb for Python使用指南/Python的数据库操作
- Flexigrid系列使用教程(四)同时操作选择的多条数据
- [翻译]Popfly系列课程7 –深入幕后:使用 Popfly学习XML的初学者指南
- MongoDB使用指南--基本操作
- 淘淘商城系列——使用Jedis操作集群