一、概述及环境准备

SmartArt 图形通过将文字、图形从多种不同布局、组合来表现内容和观点的逻辑关系,能够快速、有效地传达设计者的意图和信息。这种图文表达的视觉表示形式常用于PPT,Word,Excel等办公文档中。本文将以在PPT中创建SmartArt图形为例来介绍通过Java程序来添加SmartArt图形到PPT的方法,以及如何读取SmartArt图形中的文本内容。

工具:Free Spire.Presentation for Java(免费版)

Jar获取及导入:官网下载jar包,并解压将lib文件夹下的jar文件导入Java程序,或者通过maven仓库下载导入

二、代码示例

1. Java在PPT中创建SmartArt图形

这里创建SmartArt形状时,可在默认创建的形状中添加内容,也可以自定义图形节点来添加内容。

import com.spire.presentation.*;
import com.spire.presentation.diagrams.*; public class SmartArt {
public static void main(String[] args) throws Exception{
//创建PPT文档,获取一张幻灯片(创建的空白PPT文档,默认包含一张幻灯片)
Presentation ppt = new Presentation();
ISlide slide = ppt.getSlides().get(0); //创建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);
smartArtNode1.getTextFrame().setText("设计");//获取默认节点,添加内容
smartArt1.getNodes().get(1).getTextFrame().setText("模仿");
smartArt1.getNodes().get(2).getTextFrame().setText("学习");
smartArt1.getNodes().get(3).getTextFrame().setText("实践");
smartArt1.getNodes().get(4).getTextFrame().setText("创新"); //创建SmartArt图形2,自定义节点内容
ISmartArt smartArt2 = slide.getShapes().appendSmartArt(400,200,200,200,SmartArtLayoutType.BASIC_RADIAL);
smartArt2.setColorStyle(SmartArtColorType.DARK_2_OUTLINE);
smartArt2.setStyle(SmartArtStyleType.MODERATE_EFFECT);
//删除默认的节点(SmartArt中的图形)
for (Object a : smartArt2.getNodes()) {
smartArt2.getNodes().removeNode((ISmartArtNode) a);
}
//添加一个母节点
ISmartArtNode node2 = smartArt2.getNodes().addNode();
//在母节点下添加三个子节点
ISmartArtNode node2_1 = node2.getChildNodes().addNode();
ISmartArtNode node2_2 = node2.getChildNodes().addNode();
ISmartArtNode node2_3 = node2.getChildNodes().addNode();
//在节点上设置文字及文字大小
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("AddSmartArt.pptx",FileFormat.PPTX_2013);
ppt.dispose();
}
}

创建结果:

2. 读取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 GetTextOfSmartArt {
public static void main(String[] args) throws Exception{
//创建实例,加载测试文档
Presentation presentation = new Presentation();
presentation.loadFromFile("AddSmartArt.pptx"); //新建txt文档,用于写入提取出来的文本
String result = "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); //遍历所有幻灯片并获取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();
}
}

文本提取结果:

(完)

Java 在PPT中创建SmartArt图形、读取SmartArt图形中的文本的更多相关文章

  1. 编写Java程序,使用ThreadLocal类,项目中创建账户类 Account,类中包括账户名称name、 ThreadLocal 类的引用变量amount,表示存款

    查看本章节 查看作业目录 需求说明: 某用户共有两张银行卡,账户名称相同,但卡号和余额不同.模拟用户使用这两张银行卡进行消费的过程,并打印出消费明细 实现思路: 项目中创建账户类 Account,类中 ...

  2. JavaScript中创建类,赋值给ajax中的data参数

    缘由:因为要给根据是否选中checkbox来动态增加ajax中data的属性(ajax的data属性格式的几种方法,参考http://www.jb51.net/article/46676.htm) d ...

  3. 在graphviz中创建可点击的图形

    1.创建一个dot文件,在节点属性中使用URL关键字: target关键字指定链接打开的方式 //test.dot digraph Arch { A; B [URL="http://docs ...

  4. 在本机eclipse中创建maven项目,查看linux中hadoop下的文件、在本机搭建hadoop环境

    注意 第一次建立maven项目时需要在联网情况下,因为他会自动下载一些东西,不然突然终止 需要手动删除断网前建立的文件 在eclipse里新建maven项目步骤 直接新建maven项目出了错      ...

  5. springBoot框架在idea中创建流程 同时存在一个项目中

    1.新建普通maven工程 2.在父级pom中按需修改 3.删除父级src目录 4.创建公共模块common,里面只有service接口和实体类 5.构建微服务模块,provider 6.引用Zook ...

  6. 在Win8中创建热点,共享网络

    在Win8中创建热点,共享网络 办公室中,我独享10M光纤,没什么要下的,便想利用来更新下Ipad里面的程序,下点公开课.那在不利用软件[用很多wifi共享的软件],从win7开始 系统本身就自带相关 ...

  7. 在IntelliJ IDEA中创建Web项目

    在IntelliJ IDEA中创建Web项目 在IntelliJ IDEA中创建Web项目1,创建Maven WebProject选择File>New>Project 出现New Proj ...

  8. C# / VB.NET 在PPT中创建、编辑PPT SmartArt图形

    本文介绍通过C#和VB.NET程序代码来创建和编辑PPT文档中的SmartArt图形.文中将分两个操作示例来演示创建和编辑结果. 使用工具:Spire.Presentation for .NET ho ...

  9. 在命令行中运行eclipse中创建的java项目

    在命令行中运行eclipse中创建的java项目 博客分类: java相关 javaeclipse命令行  由于项目要求,需要对eclipse中的项目进行打包,似的可以在客户机上不装eclipse的情 ...

随机推荐

  1. Python之路【第二十八篇】:生成器与迭代器

    #!/usr/bin/env python # -*- coding:utf-8 -*- #只要函数的代码里面出现了yield关键字,这个函数就不再是一个普通的函数了,叫做生成器函数 #执行生成器函数 ...

  2. Mysql 字符串拆分 OR 一行转多行

    Mysql 字符串拆分 OR 一行转多行 需要了解的的几个mysql 函数: A.substring_index():字符串截取 substring_index(str,delim,count)   ...

  3. JAVA_WEB--jsp语法

    JSP声明 一个声明语句可以声明一个或多个变量.方法,供后面的Java代码使用.在JSP文件中,必须先声明这些变量和方法然后才能使用它们. JSP声明的语法格式: <%! declaration ...

  4. zabbix tigger 设置

    设置一个内存在10分钟内持续低于某值才告警: 设置方法: 修改模板的tigger   configuration - > Template OS linux Active(选择自己的模板)-&g ...

  5. Fibonacci相关问题

    公式如下: 递归的解法我就不写了,贴一个递推的. long long Fibonacci(unsigned int n) { ) ; ) ; ; ; long long res; ; i <= ...

  6. 单调队列+二分 G - Queue 小阳买水果

    B. Queue 这个题目会做的很偶然,突然想到的,因为我们要求离这只海象的最远的比他年轻的海象,这个年轻的海象可以用单调栈维护. 就是从前往后遍历一遍,单调栈里面存年龄从小往大的海象,这个为什么这么 ...

  7. [C#]基础——注意事项

    1. 静态类必须直接继承Object 2. 静态类不能实现接口,不能继承其他类(除了Object) 3.静态类中不能有实体方法 4.实体类中可以有静态方法,使用同 静态类 5.readonly属性可以 ...

  8. 深入理解CSS定位

    CSS中有3种定位机制:普通流,浮动和绝对定位.除非专门指定,否则所有框都在普通流中定位.顾名思义,普通流中元素框的位置由HTML元素的位置决定.块级框一个接一个地垂直排列,框之间的垂直距离由框的垂直 ...

  9. 架构设计 | 分布式系统调度,Zookeeper集群化管理

    本文源码:GitHub·点这里 || GitEE·点这里 一.框架简介 1.基础简介 Zookeeper基于观察者模式设计的组件,主要应用于分布式系统架构中的,统一命名服务.统一配置管理.统一集群管理 ...

  10. CF-612D The Union of k-Segments 差分

    D. The Union of k-Segments 题意 给出n个线段,以及一个数字k,让求出有哪些线段:线段上所有的点至少被覆盖了k次. 思路 假如忽略掉线段的左右端点范围,肯定是使用差分来维护每 ...