您的位置:首页 > 职场人生

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

2012-01-10 09:38 405 查看
使用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方式与代码两种不同方式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息