当前位置: 首页 > article >正文

java,poi,提取ppt文件中的文字内容

注意,不涉及图片处理。

先上pom依赖:

        <!-- 处理PPTX文件 -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>5.2.3</version>
        </dependency>
        <!-- 处理PPT文件 -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-scratchpad</artifactId>
            <version>5.2.3</version>
        </dependency>

代码:

public static void main(String[] args) {
        String filePath = "C:\\xx.pptx"; // 待处理ppt全路径
        try {
            IOUtils.setByteArrayMaxOverride(160000000);//分配内存160M
            String content = readPresentation(filePath);
            System.out.println(content);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static String readPresentation(String filePath) throws Exception {
        if (filePath.toLowerCase().endsWith(".pptx")) {
            return readPPTX(filePath);
        } else if (filePath.toLowerCase().endsWith(".ppt")) {
            return readPPT(filePath);
        }
        throw new IllegalArgumentException("Unsupported file format");
    }

    // 处理PPTX文件
    private static String readPPTX(String filePath) throws Exception {
        StringBuilder content = new StringBuilder();
        XMLSlideShow ppt = new XMLSlideShow(new FileInputStream(filePath));

            for (XSLFSlide slide : ppt.getSlides()) {
                for (XSLFShape shape : slide.getShapes()) {
                    if (shape instanceof XSLFTextShape) {
                        content.append(((XSLFTextShape) shape).getText()).append("\n");
                    }
                }
            }

        return content.toString();
    }

    // 处理PPT文件
    private static String readPPT(String filePath) throws Exception {
        StringBuilder content = new StringBuilder();
        try (HSLFSlideShow ppt = new HSLFSlideShow(new FileInputStream(filePath))) {
            for (HSLFSlide slide : ppt.getSlides()) {
                // 读取幻灯片中的形状
                for (HSLFShape shape : slide.getShapes()) {
                    if (shape instanceof HSLFTextShape) {
                        HSLFTextShape textShape = (HSLFTextShape) shape;
                        content.append(textShape.getText()).append("\n");
                    }
                }
                // 读取幻灯片中的文本框(兼容旧版本)
                for (List<HSLFTextParagraph> textParagraphs : slide.getTextParagraphs()) {
                    for (HSLFTextParagraph para : textParagraphs) {
                        content.append(para).append("\n");
                    }
                }
            }
        }
        return content.toString();
    }

 最终效果与wps自带的ppt转word只勾选文本差不多。


http://www.kler.cn/a/589487.html

相关文章:

  • LLaMA-Factory微调sft Qwen2.5-VL-7B-Instruct
  • 【etcd】
  • 【通义千问】蓝耘智算 | 智启未来:蓝耘MaaS×通义QwQ-32B引领AI开发生产力
  • 本地部署DeepSeek-R1(Dify升级最新版本、新增插件功能)
  • 【嵌入式硬件】三款DCDC调试笔记
  • 【地图 Map】——8
  • C++进阶——AVL树的实现
  • FPGA中级项目3——IP核之时钟管理单元
  • [Linux]进程控制
  • 视频孪生技术赋能桥梁智慧化检测管理与数字化建设
  • android 后台下载任务,断点续传
  • 【数据分析】.loc和.iloc的应用2
  • 数据结构——串、数组和广义表
  • 【MM】2025投稿重点记录
  • AcWing 5960:输出前k大的数 ← 小根堆
  • 快速方便的Docker下载,包含Win、Mac
  • 汇编基础知识
  • 东方通TongHttpServer:企业级服务代理中间件的卓越之选
  • 泛型主要是用于静态类型检查的工具,它并不会在运行时自动验证返回值类型和传入类型是否一致
  • Linux驱动学习笔记(二)