一、前言及環(huán)境構建
SmartArt圖形常用于將文字量少篷角、層次較明顯的文本轉換為具有各種附屬關系焊刹、并列關系等關系結構的文檔插圖,以此來快速恳蹲、輕松虐块、有效地傳達信息。本文將通過Java程序來介紹為PPT文檔添加SmartArt圖形的方法嘉蕾,并演示如何提取文檔中SmartArt圖形的文本信息贺奠。
此次教程所用工具為Free Spire.Presentation for Java(免費版),可通過官網(wǎng)下載獲取错忱。工具下載后進行解壓儡率,然后將lib文件夾下的Spire.Presentation.jar 文件導入Java程序∫郧澹或者也可直接通過maven倉庫進行工具的下載導入儿普。
二、代碼演示
示例1 添加SmartArt圖形到PPT
以下代碼里包含了添加默認SmartArt圖形及創(chuàng)建自定義圖形節(jié)點兩種方式掷倔。
import com.spire.presentation.*;
import com.spire.presentation.diagrams.*;
public class AddSmartArt {
public static void main(String[] args) throws Exception {
//創(chuàng)建PPT文檔眉孩,獲取默認生成的第一張幻燈片
Presentation ppt = new Presentation();
ISlide slide =ppt.getSlides().get(0);
//創(chuàng)建SmartArt圖形1
ISmartArt smartArt1 =slide.getShapes().appendSmartArt(50,50,200,200, SmartArtLayoutType.BASIC_CYCLE);//在幻燈片指定位置添加指定大小和布局類型的SmartArt圖形smartArt1.setColorStyle(SmartArtColorType.COLORFUL_ACCENT_COLORS_4_TO_5);//設置SmartArt圖形顏色類型
smartArt1.setStyle(SmartArtStyleType.INTENCE_EFFECT);//設置SmartArt圖形樣式
ISmartArtNode smartArtNode1 =smartArt1.getNodes().get(0);//獲取默認節(jié)點,添加內容
smartArtNode1.getTextFrame().setText("信息");
smartArt1.getNodes().get(1).getTextFrame().setText("溝通");
smartArt1.getNodes().get(2).getTextFrame().setText("分析");
smartArt1.getNodes().get(3).getTextFrame().setText("優(yōu)化");
smartArt1.getNodes().get(4).getTextFrame().setText("執(zhí)行");
//創(chuàng)建SmartArt圖形2今魔,自定義節(jié)點內容
ISmartArt smartArt2 =
slide.getShapes().appendSmartArt(400,200,200,200,SmartArtLayoutType.BASIC_RADIAL);
smartArt2.setColorStyle(SmartArtColorType.?DARK_2_OUTLINE);
smartArt2.setStyle(SmartArtStyleType.?MODERATE_EFFECT);
//刪除默認的節(jié)點(SmartArt中的圖形)
for (Objecta : smartArt2.getNodes()) {
smartArt2.getNodes().removeNode((ISmartArtNode)a);
??????????????? }
//添加一個母節(jié)點
ISmartArtNode node2 =smartArt2.getNodes().addNode();
//在母節(jié)點下添加三個子節(jié)點
ISmartArtNode node2_1 =node2.getChildNodes().addNode();
ISmartArtNode node2_2 =node2.getChildNodes().addNode();
ISmartArtNode node2_3 =node2.getChildNodes().addNode();
//在節(jié)點上設置文字及文字大小
node2.getTextFrame().setText("生物");
node2.getTextFrame().getTextRange().setFontHeight(14f);
node2_1.getTextFrame().setText("動物");
node2_1.getTextFrame().getTextRange().setFontHeight(12f);
node2_2.getTextFrame().setText("植物");
node2_2.getTextFrame().getTextRange().setFontHeight(12f);
node2_3.getTextFrame().setText("微生物");
node2_3.getTextFrame().getTextRange().setFontHeight(12f);
//保存文檔
ppt.saveToFile("output/AddSmartArt.pptx",FileFormat.PPTX_2013);
ppt.dispose();
??????????? }
?????? }
添加效果:
示例2? 從PPT中提取SmartArt圖形的文本信息
import com.spire.presentation.*;
import com.spire.presentation.diagrams.ISmartArt;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
public class ExtractTextFromSmartart {
public static void main(String[] args) throws Exception{
//創(chuàng)建實例勺像,加載測試文檔
Presentation presentation = new Presentation();
presentation.loadFromFile("C:\\Users\\Test1\\Desktop\\AddSmartArt.pptx");
//新建txt文檔,用于寫入提取出來的文本
String result = "output/extractTextOfSmartArt.txt";
File file=?new File(result);
if(file.exists()){
file.delete();
? ??????????????}
file.createNewFile();
FileWriter fw =?new FileWriter(file,true);
BufferedWriter bw =?new BufferedWriter(fw);
bw.write("以下是從SmarArt圖形中提取出的文本信息:"+"\r\n");
//遍歷所有幻燈片并獲取SmartArt圖形.
for (int i = 0; i < presentation.getSlides().getCount(); i++)
???? ???????????{
for (int j = 0; j < presentation.getSlides().get(i).getShapes().getCount();j++)
??????????? ????????{
if (presentation.getSlides().get(i).getShapes().get(j)instanceof ISmartArt)
????????????????????? ??{
ISmartArt smartArt =(ISmartArt)presentation.getSlides().get(i).getShapes().get(j);
//提取SmartArt中的文本错森,并寫入txt
for (int k = 0; k < smartArt.getNodes().getCount(); k++)
?????????????????????? {
bw.write(smartArt.getNodes().get(k).getTextFrame().getText()+?"\r\n");
??????????????????????????? }
??????????????????????? }
??????????????????? }
? ??????????????}
?bw.flush();
?bw.close();
?fw.close();
??????????? }
??????? }
提取效果:
(本文完)