用poi的XSLF创建ppt,添加文本的时候多了空行

2024-02-01 02:48
文章标签 创建 文本 ppt poi 空行 xslf

本文主要是介绍用poi的XSLF创建ppt,添加文本的时候多了空行,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

poi版本3.14.

根据poi的demo写了个简单的生成ppt的例子:

    public static void makePpt(String path) throws Exception {if (path == null) {path = "e:/text.pptx";}XMLSlideShow ppt = new XMLSlideShow();XSLFSlide slide1 = ppt.createSlide();XSLFTextBox shape1 = slide1.createTextBox();Rectangle anchor = new Rectangle(10, 100, 300, 100);shape1.setAnchor(anchor);XSLFTextParagraph p1 = shape1.addNewTextParagraph();XSLFTextRun r1 = p1.addNewTextRun();r1.setFontColor(new Color(0, 200, 160));shape1.setFillColor(Color.red);r1.setText("text1");XSLFTextBox shape2 = slide1.createTextBox();Rectangle anchor2 = new Rectangle(210, 200, 300, 100);shape2.setAnchor(anchor2);shape2.setText("text2");FileOutputStream out = new FileOutputStream(path);ppt.write(out);out.close();ppt.close();}
发现text1的文本框多了一个空行。text2文本框没有多空行。

使用如下代码看看到底生成了什么东西:

    public static void readPpt() throws Exception {XMLSlideShow ppt = new XMLSlideShow(new FileInputStream("e:/text.pptx"));XSLFSlide slide1 = ppt.getSlides().get(0);for (XSLFShape shape : slide1.getShapes()) {if (shape instanceof XSLFTextBox) {XSLFTextBox box = (XSLFTextBox) shape;java.util.List<XSLFTextParagraph> ps = box.getTextParagraphs();if (ps.size() > 0) {java.util.List<XSLFTextRun> rs = ps.get(0).getTextRuns();if (!rs.isEmpty()) {System.out.println(rs.get(0).getRawText());}}}}}

发现shape1的那个XSLFTextBox其实有两个XSLFTextParagraph对象。

查看相应的代码,问题应该是出在XSLFTextParagraph p1 = shape1.addNewTextParagraph();这一句。原因应该是XSLFTextBox本身就有一个TextParagraph了。

这一行代码改成:

        XSLFTextParagraph p1 =shape1.getTextParagraphs().isEmpty() ?shape1.addNewTextParagraph() : shape1.getTextParagraphs().get(0);

就可以了。




这篇关于用poi的XSLF创建ppt,添加文本的时候多了空行的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/665855

相关文章

JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)

《JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)》:本文主要介绍如何在IntelliJIDEA2020.1中创建和部署一个JavaWeb项目,包括创建项目、配置Tomcat服务... 目录简介:一、创建项目二、tomcat部署1、将tomcat解压在一个自己找得到路径2、在idea中添加

Java利用Spire.Doc for Java实现在模板的基础上创建Word文档

《Java利用Spire.DocforJava实现在模板的基础上创建Word文档》在日常开发中,我们经常需要根据特定数据动态生成Word文档,本文将深入探讨如何利用强大的Java库Spire.Do... 目录1. Spire.Doc for Java 库介绍与安装特点与优势Maven 依赖配置2. 通过替换

java创建xls文件放到指定文件夹中实现方式

《java创建xls文件放到指定文件夹中实现方式》本文介绍了如何在Java中使用ApachePOI库创建和操作Excel文件,重点是如何创建一个XLS文件并将其放置到指定文件夹中... 目录Java创建XLS文件并放到指定文件夹中步骤一:引入依赖步骤二:创建XLS文件总结Java创建XLS文件并放到指定文件

C#自动化生成PowerPoint(PPT)演示文稿

《C#自动化生成PowerPoint(PPT)演示文稿》在当今快节奏的商业环境中,演示文稿是信息传递和沟通的关键工具,下面我们就深入探讨如何利用C#和Spire.Presentationfor.NET... 目录环境准备与Spire.Presentation安装核心操作:添加与编辑幻灯片元素添加幻灯片文本操

基于Java实现PPT到PDF的高效转换详解

《基于Java实现PPT到PDF的高效转换详解》在日常开发中,经常会遇到将PPT文档批量或单文件转换为PDF的需求,本文将详细介绍其使用流程、核心代码与常见问题解决方案,希望对大家有所帮助... 目录一、环境配置Maven 配置Gradle 配置二、核心实现:3步完成PPT转PDF1. 单文件转换(基础版)

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

k8s按需创建PV和使用PVC详解

《k8s按需创建PV和使用PVC详解》Kubernetes中,PV和PVC用于管理持久存储,StorageClass实现动态PV分配,PVC声明存储需求并绑定PV,通过kubectl验证状态,注意回收... 目录1.按需创建 PV(使用 StorageClass)创建 StorageClass2.创建 PV

Linux创建服务使用systemctl管理详解

《Linux创建服务使用systemctl管理详解》文章指导在Linux中创建systemd服务,设置文件权限为所有者读写、其他只读,重新加载配置,启动服务并检查状态,确保服务正常运行,关键步骤包括权... 目录创建服务 /usr/lib/systemd/system/设置服务文件权限:所有者读写js,其他

idea+spring boot创建项目的搭建全过程

《idea+springboot创建项目的搭建全过程》SpringBoot是Spring社区发布的一个开源项目,旨在帮助开发者快速并且更简单的构建项目,:本文主要介绍idea+springb... 目录一.idea四种搭建方式1.Javaidea命名规范2JavaWebTomcat的安装一.明确tomcat

C++中处理文本数据char与string的终极对比指南

《C++中处理文本数据char与string的终极对比指南》在C++编程中char和string是两种用于处理字符数据的类型,但它们在使用方式和功能上有显著的不同,:本文主要介绍C++中处理文本数... 目录1. 基本定义与本质2. 内存管理3. 操作与功能4. 性能特点5. 使用场景6. 相互转换核心区别