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

简介:

使用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=\"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操作中最复杂的部分,如何插入一个表格。



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

相关文章
|
6月前
|
前端开发
开发过程中遇到过的docx、pptx、xlsx、pdf文件预览多种方式
开发过程中遇到过的docx、pptx、xlsx、pdf文件预览多种方式
102 0
iframe 在线预览pdf、word、excel、ppt、txt、图片、视频
iframe 在线预览pdf、word、excel、ppt、txt、图片、视频
|
前端开发
前端如何支持PDF、Excel、Word在线预览 #42
前端如何支持PDF、Excel、Word在线预览 #42
616 0
|
6月前
|
Web App开发 JavaScript 前端开发
网页VUE纯前端在线预览编辑Office,支持doc/docx、xls/xlsx、ppt/pptx、pdf等格式
随着互联网技术的不断发展,越来越多的企业开始采用在线办公模式,微软Office Word 是最好用的文档编辑工具,然而doc、docx、xls、xlsx、ppt、pptx等格式的Office文档是无法直接在浏览器中直接打开的,如果可以实现Web在线预览编辑OffIce,肯定会还带来了更高效、便捷的办公体验,为我们的工作带来了更多可能性。
1267 0
|
3月前
|
开发框架 前端开发 JavaScript
利用Spire.Pdf实现PDF添加印章的操作
利用Spire.Pdf实现PDF添加印章的操作
|
6月前
|
Apache
apache-tika从ppt-pdf-xls读取文本
apache-tika从ppt-pdf-xls读取文本
85 0
|
前端开发 JavaScript
前端实现文件预览(pdf、excel、word、图片)
前端实现文件预览(pdf、excel、word、图片)
344 0
|
存储 Linux Python
Python编程:读取pdf、pptx、docx、xlsx文件的页数
Python编程:读取pdf、pptx、docx、xlsx文件的页数
807 0
|
程序员 数据安全/隐私保护 Python