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接受Buffer、Uint8Array或ArrayBuffer。- 解析后的幻灯片可以在新的
Presentation实例中复用。 - 并非所有 PPTX 功能都能在解析过程中完全保留 — 请使用你的具体文件进行测试。
- 对于大文件,建议使用流式输入而非将整个缓冲区加载到内存中。