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

简介:

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

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

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

首先我们来看下面的图片

这是一个典型的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 "<p:sp 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:nvSpPr><p:cNvPr id=\"2\" name=\"标题 1\"/>"
    + "<p:cNvSpPr><a:spLocks noGrp=\"1\"/>"
    + "</p:cNvSpPr><p:nvPr><p:ph type=\"title\"/>"
    + "</p:nvPr></p:nvSpPr><p:spPr/><p:txBody>"
    + "<a:bodyPr/><a:lstStyle/><a:p><a:r>"
    + "<a:rPr lang=\"en-US\" altLang=\"zh-CN\" dirty=\"0\" err=\"1\" smtClean=\"0\"/>"
    + "<a:t>"
    + preset
    + "</a:t></a:r>"
    + "<a:endParaRPr lang=\"zh-CN\" altLang=\"en-US\" dirty=\"0\"/></a:p>"
    + "</p:txBody></p:sp>";

 }

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

  return "<p:sp  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:nvSpPr><p:cNvPr id=\"4\" name=\"副标题 3\"/>"
    + "<p:cNvSpPr><a:spLocks noGrp=\"1\"/>"
    + "</p:cNvSpPr><p:nvPr><p:ph type=\"subTitle\" idx=\"1\"/>"
    + "</p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr>"
    + "<a:normAutofit lnSpcReduction=\"10000\"/></a:bodyPr>"
    + "<a:lstStyle/><a:p><a:r><a:rPr lang=\"en-US\" altLang=\"zh-CN\" dirty=\"0\" smtClean=\"0\"/>"
    + "<a:t>"
    + preset
    + "</a:t></a:r><a:endParaRPr lang=\"zh-CN\" altLang=\"en-US\" dirty=\"0\"/>"
    + "</a:p></p:txBody></p:sp>";
 }

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

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

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


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

相关文章
|
5月前
|
传感器 自然语言处理 资源调度
AR 交互与自动感应技术的博物馆智慧导览系统功能解析
本系统结合AR图像识别、自动感应与多语言资源管理,实现虚拟内容与文物精准叠加、自动讲解与智能导航,提升博物馆导览体验智能化、互动性。
468 1
|
9月前
|
JSON 监控 API
1688商品列表API接口指南
1688 商品列表 API 可帮助开发者和商家获取商品基本信息(如 ID、名称、价格等)、支持筛选排序(类目、价格、销量等条件)、分页查询及指定店铺商品获取,便于商品管理与竞品分析。调用流程包括:注册账号创建应用以获取 App Key 和 App Secret、生成签名确保请求合法性、构造请求参数(含 app_key、sign 等)、发送 HTTP 请求并处理 JSON 响应数据。
369 19
|
存储 Shell Linux
Linux 如何更改默认 Shell
Linux 如何更改默认 Shell
Linux 如何更改默认 Shell
|
Java BI API
spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具
这篇文章介绍了如何在Spring Boot项目中整合iTextPDF库来导出PDF文件,包括写入大文本和HTML代码,并分析了几种常用的Java PDF导出工具。
3200 0
spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具
|
机器学习/深度学习 弹性计算 人工智能
大模型进阶微调篇(三):微调GPT2大模型实战
本文详细介绍了如何在普通个人电脑上微调GPT2大模型,包括环境配置、代码实现和技术要点。通过合理设置训练参数和优化代码,即使在无独显的设备上也能完成微调,耗时约14小时。文章还涵盖了GPT-2的简介、数据集处理、自定义进度条回调等内容,适合初学者参考。
2537 6
|
存储 缓存 图形学
Vulkan 围炉夜话3
Vulkan 围炉夜话
190 9
Vulkan 围炉夜话3
|
Java 索引
Java判断一个字符串是否包含某个字符
Java判断一个字符串是否包含某个字符
1676 0
|
JavaScript
Vue.js中使用作用域插槽实现自定义表格组件
Vue.js中使用作用域插槽实现自定义表格组件
255 1
|
运维 Devops
全球与中国DevOps市场现状及未来发展趋势
本文研究全球及中国市场DevOps现状及未来发展趋势,侧重分析全球及中国市场的主要企业,同时对比北美、欧洲、中国、日本、东南亚和印度等地区的现状及未来发展趋势
全球与中国DevOps市场现状及未来发展趋势
|
JSON Linux 测试技术
使用Elasticsearch Template实现新索引创建的自动管理
Elasticsearch Template是一种将预定义模板应用于新索引的功能。在索引创建时,它可以自动为新索引应用已定义的模板。Template功能可用于定义索引的映射、设置和别名等。它是一种自动化管理索引创建的方式,使用户可以在大量索引上快速而一致地应用模板。
750 0