pptx

 
 

PowerPoint 开源 JavaScript 库

在 Node.js 与浏览器中创建、编辑、验证和动画 PPTX 文件,完全符合 ECMA-376 标准。

pptx是什么?

@office-kit/pptx 是一个现代的、带类型的 JavaScript 库,用于在 Node.js 和浏览器环境中生成和编辑 PowerPoint(.pptx)文件。它基于 ECMA-376 PresentationML 规范构建,提供了一个与官方 XML 架构相对应的强大对象模型。与许多替代方案不同,它提供了一个在所有环境中一致工作的单一 ESM 包,避免了脆弱的基于字符串的 XML,并生成通过 Microsoft 的 Open XML SDK 验证器验证的文件。

该库支持两种工作流:编辑现有模板和从头创建演示文稿。它能够处理幻灯片、形状、文本、表格、图表、动画、批注和过渡,并提供强类型和 tree-shaking 支持,以实现最小的捆绑体积(基本加载/保存约 60 KB)。其设计确保往返安全——未建模的内容会被保留,而不是被剥离——使其在生产环境中理想,尤其是在模式有效性和跨平台兼容性(PowerPoint、Keynote、Google Slides、LibreOffice)至关重要的情况下。

Previous Next

pptx 入门指南

通过 npm、pnpm 或 yarn 安装 @office-kit/pptx。该库以 ESM 包的形式分发,并支持 tree-shaking,以实现最小体积。安装后,导入诸如 `loadPresentation`、`savePresentation` 或 `createPresentation` 等函数,即可开始创建或编辑 PPTX 文件。API 在 Node.js 和浏览器环境中保持一致,官方 [pptx GitHub](https://github.com/office-kit/pptx) 仓库提供了详细的使用示例、验证工具以及 AI 辅助开发的技能指南。

通过 NPM、pnpm 或 Yarn 安装 pptx

# npm
npm install @office-kit/pptx

# pnpm
pnpm add @office-kit/pptx

# yarn
yarn add @office-kit/pptx

编辑 PowerPoint 模板

模板编辑是 @office-kit/pptx 的核心优势。您可以加载已有的 PPTX 文件,定位占位符(例如标题、正文),并以编程方式替换文本——非常适合动态报告生成。该库支持基于令牌的跨所有幻灯片的替换,使批量更新轻松自如。它保持布局完整性,并确保输出兼容 PowerPoint、Keynote 和 Google Slides。此工作流特别适用于模板化演示文稿,仅在每次运行时更改内容。

如何在 PowerPoint 文件中替换模板文本?

import {
  findSlidePlaceholder,
  getSlides,
  loadPresentation,
  savePresentation,
  setShapeText,
} from '@office-kit/pptx';

const pres = await loadPresentation(existingPptxBytes);
const cover = getSlides(pres)[0]!;
const title = findSlidePlaceholder(cover, 'title');
if (title) setShapeText(title, 'Q3 Review');
const body = findSlidePlaceholder(cover, 'body');
if (body) setShapeText(body, 'Numbers up and to the right.');
const out: Uint8Array = await savePresentation(pres);

从头创建演示文稿

使用 `createPresentation()`,您可以从零开始构建完整的 PowerPoint 演示文稿——无需模板。该函数返回一个结构完整的演示文稿,包含母版、主题和默认布局(`Blank`、`Title Slide`、`Title and Content`)。随后,您可以使用类型化 API 添加幻灯片、插入文本框、图像、表格和图表。此方法提供对设计和内容的完全控制,使得能够以编程方式生成用于仪表板、报告或 AI 驱动的幻灯片演示文稿,同时保持 ECMA-376 合规性。

如何从头创建新的 PowerPoint 演示文稿?

import {
  addTitleSlide,
  createPresentation,
  savePresentation,
} from '@office-kit/pptx';

const pres = createPresentation();
addTitleSlide(pres, 'Q3 Business Review');
const out: Uint8Array = await savePresentation(pres);

图表、动画和批注

@office-kit/pptx 支持丰富的幻灯片元素,包括图表(柱形图、折线图、饼图、面积图)、动画(fadeIn、fadeOut、appear)和批注。图表嵌入实时的 Excel 数据,可在 PowerPoint 中进行编辑,而动画使用可配置时长的预设效果。批注允许您添加带有作者元数据和可选定位的审阅者备注。这些功能使该库适用于创建交互式、数据丰富的演示文稿,符合专业标准并通过模式验证。

如何向幻灯片添加图表和动画?

import {
  addSlideChart,
  getSlides,
  loadPresentation,
  setShapeAnimation,
  savePresentation,
  inches,
} from '@office-kit/pptx';

const pres = await loadPresentation(templateBytes);
const slide = getSlides(pres)[0]!;
addSlideChart(slide!, {
  x: inches(0.5),
  y: inches(0.5),
  w: inches(8),
  h: inches(4.5),
  spec: {
    kind: 'column',
    categories: ['Q1', 'Q2', 'Q3', 'Q4'],
    series: [
      { name: 'Revenue', values: [120, 180, 240, 300] },
      { name: 'Cost', values: [80, 90, 130, 160] },
    ],
    title: 'FY26 plan',
  },
});
const shape = getSlideShapes(slide)[0]!;
setShapeAnimation(shape, { effect: 'fadeIn', durationMs: 800 });
await savePresentation(pres);

验证与模式合规性

确保 PPTX 文件符合 ECMA-376 标准对于跨工具的兼容性至关重要。@office-kit/pptx 包含 `validatePresentation()` 用于检测缺失关系、无效幻灯片 ID 或损坏的布局引用等问题。它还在可用的 CI 环境中使用 `xmllint` 对生成的 XML 进行官方模式验证。此验证层帮助在分发前捕获细微错误,确保演示文稿在 PowerPoint、Keynote、Google Slides 和 LibreOffice 中可靠打开——无需依赖 "open and pray" 行为。

如何验证 PowerPoint 演示文稿?

import { validatePresentation } from '@office-kit/pptx';

const issues = validatePresentation(pres);
for (const i of issues) console.error(i.severity, i.message);
// Catches missing rels, dangling slide ids, layouts without masters, etc.
 中国人