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

                                                    —— 使用xml 添加标题与副标题

在上一章节中我们尝试了创建一个新的PPT文件,并且在文件中添加了一个新页,在本章中我们将会了解到,如何在这些页面中添加标题。

首先我们来看下面的图片

使用Docx4j操作PPT指南系列(二)_第1张图片

这是一个典型的PPT封面,接下来我们就要通过xml来向封面中的标题框内添加内容。代码如下:

public static void main(String[] args) {
  try {

   // 加载一个ppt文件作为模板
   PresentationMLPackage presentationMLPackage = PresentationMLPackage
     .load(new File(PSMSConstants.REPORT_PPT2007_TEMPLATE_PATH));

   SlidePart slidePart = (SlidePart) presentationMLPackage.getParts()
     .getParts().get(new PartName("/ppt/slides/slide1.xml"));

   // 读取XML生成形状
   Shape title = (Shape) XmlUtils.unmarshalString(
     getSlideTitle("使用Docx4j操作PPT指南系列(二)"), Context.jcPML);

   // 注意,主标题与副标题的xml是不同的
   Shape subtitle = (Shape) XmlUtils.unmarshalString(
     getSubSlideTitle("使用xml 添加标题与副标题"), Context.jcPML);
   
   ((Sld) slidePart.getJaxbElement()).getCSld().getSpTree()
     .getSpOrGrpSpOrGraphicFrame().add(title);
   
   ((Sld) slidePart.getJaxbElement()).getCSld().getSpTree()
     .getSpOrGrpSpOrGraphicFrame().add(subtitle);

   String path = "c://test.pptx";

   presentationMLPackage.save(new java.io.File(path));

  } catch (Docx4JException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (JAXBException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }

/**
  * 生成标题
  *
  * @param preset
  * @return
  */
 public static String getSlideTitle(String preset) {

  return "     + "xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" "
    + "xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\">"
    + ""
    + ""
    + "
"
    + "
"
    + ""
    + ""
    + ""
    + preset
    + "
"
    + "
"
    + "
";

 }

 /**
  * 添加副标题
  *
  * @param preset
  * @return
  */
 public static String getSubSlideTitle(String preset) {

  return "     + "xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" "
    + "xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\">"
    + ""
    + ""
    + "
"
    + "
"
    + "
"
    + ""
    + ""
    + preset
    + "
"
    + "
";
 }

Docx4j通过XmlUtils.unmarshalString方法为我们提供了xml转换对象的功能,实际上这也是我们操作PPT的一种主要的方式。xml字符串可以通过将PPT另存为XML格式的文件中获取(ppt2007),大家可以多尝试一下。值得注意的是,通过另存XML文件获取的字符串是不包括XML命名空间的,需要我们自己加上

执行代码最终的结果如下图所示:

使用Docx4j操作PPT指南系列(二)_第2张图片

OK, 在这一章,我们学习了如何向PPT中添加标题与副标题,在下一章中我们将会学习如何在PPT页中插入文本框以及其他的图形元素,而且我们将会同时介绍XML方式与代码两种不同方式。