博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用Docx4j操作PPT指南系列(四)
阅读量:6720 次
发布时间:2019-06-25

本文共 2528 字,大约阅读时间需要 8 分钟。

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

                                              —— 在PPT中插入图片

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

还是先从效果图开始:

插入图片的过程很简单:

  1. 创建PPT页
  2. 将要插入的图片读取成一个byte数组
  3. 使用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=\"" "
   + "xmlns:r=\"" "
   + "xmlns:p=\"">"
   + "<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操作中最复杂的部分,如何插入一个表格。

本文转自william_xu 51CTO博客,原文链接:http://blog.51cto.com/williamx/771179,如需转载请自行联系原作者

你可能感兴趣的文章
MySQL操作-管理命令
查看>>
安装oracle数据库时的报错处理[INS-35172]
查看>>
MAC外接显示器死机问题
查看>>
SCCM2012功能测试(完整版)
查看>>
[职业生涯] 运维工程师的职责和前景
查看>>
我的友情链接
查看>>
微信登陆,支付防坑指南
查看>>
如何给PDF删除空白页面?来看看这种方法
查看>>
Java学习(一)
查看>>
Centos7快速安装haproxy
查看>>
SQL Server 获取最后一天(指定时间的月最后一天日期)
查看>>
SilverLight扩展控件RadTreeView
查看>>
登录注册接口中的忘记密码重置密码后为什么要设置token问题
查看>>
字符串删除一个字符
查看>>
hdu6097 Mindis(几何)
查看>>
求二叉树的叶子节点数目
查看>>
[转] js实现对图片的二进制流md5计算
查看>>
Oracle 序列(自增ID)
查看>>
这应该是你们想要的 DOS 命令
查看>>
浅谈ES6中的扩展运算符 (三个点...)
查看>>