使用Docx4j操作PPT指南系列(二)
—— 使用xml 添加标題與副标題
在上一章節中我們嘗試了建立一個新的PPT檔案,并且在檔案中添加了一個新頁,在本章中我們将會了解到,如何在這些頁面中添加标題。
首先我們來看下面的圖檔
<a target="_blank" href="http://blog.51cto.com/attachment/201201/092113858.png"></a>
這是一個典型的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);
.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) {
} catch (Exception e) {
}
}
/**
* 生成标題
*
* @param preset
* @return
*/
public static String getSlideTitle(String preset) {
+ "<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>";
/**
* 添加副标題
public static String getSubSlideTitle(String preset) {
+ "<p:nvSpPr><p:cNvPr id=\"4\" name=\"副标題 3\"/>"
+ "</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></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,如需轉載請自行聯系原作者