PPTX

解析

使用 parsePptx 和 PptxDocument 读取和修改现有 .pptx 文件

使用 parsePptx 读取现有的 .pptx 文件并检查或修改其内容。

解析文件

import { parsePptx } from "@office-open/pptx";
import fs from "node:fs";

const buffer = fs.readFileSync("existing.pptx");
const doc = await parsePptx(buffer);

PptxDocument API

返回的 PptxDocument 提供对演示文稿数据的访问:

const doc = await parsePptx(buffer);

// 演示文稿元数据
doc.title; // string
doc.creator; // string

// 幻灯片数量
doc.slides.length;

// 访问单张幻灯片
const firstSlide = doc.slides[0];

检查幻灯片

for (const slide of doc.slides) {
    // 访问幻灯片属性
    console.log("Slide children:", slide.children);
    console.log("Slide notes:", slide.notes);
    console.log("Slide background:", slide.background);
}

修改并重新导出

解析文件、修改后导出:

import {
    parsePptx,
    Presentation,
    Slide,
    Shape,
    Paragraph,
    TextRun,
    Packer,
} from "@office-open/pptx";
import fs from "node:fs";

// 解析现有文件
const buffer = fs.readFileSync("template.pptx");
const doc = await parsePptx(buffer);

// 使用解析的数据创建新演示文稿
const pres = new Presentation({
    title: doc.title,
    creator: doc.creator,
    slides: [
        // 保留原始幻灯片
        ...doc.slides,

        // 添加新幻灯片
        new Slide({
            children: [
                new Shape({
                    x: 1,
                    y: 1,
                    width: 8,
                    height: 5,
                    paragraphs: [
                        new Paragraph({
                            alignment: "center",
                            children: [
                                new TextRun({ text: "New Slide Added", fontSize: 36, bold: true }),
                            ],
                        }),
                    ],
                }),
            ],
        }),
    ],
});

// 导出修改后的演示文稿
const newBuffer = await Packer.toBuffer(pres);
fs.writeFileSync("modified.pptx", newBuffer);

从 Blob 解析(浏览器)

const fileInput = document.querySelector("input[type=file]");
const file = fileInput.files[0];
const arrayBuffer = await file.arrayBuffer();

const doc = await parsePptx(new Uint8Array(arrayBuffer));
console.log("Slides:", doc.slides.length);

提示

  • parsePptx 接受 BufferUint8ArrayArrayBuffer
  • 解析后的幻灯片可以在新的 Presentation 实例中复用。
  • 并非所有 PPTX 功能都能在解析过程中完全保留 — 请使用你的具体文件进行测试。
  • 对于大文件,建议使用流式输入而非将整个缓冲区加载到内存中。
Copyright © 2026