
pptx
PowerPoint용 오픈 소스 JavaScript 라이브러리
Node.js와 브라우저에서 완전한 ECMA-376 준수를 갖춘 PPTX 파일을 생성, 편집, 검증 및 애니메이션합니다.
pptx란 무엇인가요?
@office-kit/pptx는 Node.js와 브라우저 환경 모두에서 PowerPoint(.pptx) 파일을 생성하고 편집하기 위한 최신 타입스크립트 JavaScript 라이브러리입니다. ECMA-376 PresentationML 사양을 기반으로 하여 공식 XML 스키마를 그대로 반영하는 견고한 객체 모델을 제공합니다. 많은 대안과 달리, 단일 ESM 번들을 제공하여 환경 간 일관되게 작동하고, 취약한 문자열 기반 XML을 피하며, Microsoft의 Open XML SDK 검증기를 통해 검증된 파일을 출력합니다.
이 라이브러리는 두 가지 워크플로를 지원합니다: 기존 템플릿을 편집하고 처음부터 데크를 작성하는 것. 슬라이드, 도형, 텍스트, 표, 차트, 애니메이션, 댓글 및 전환을 강력한 타입과 트리 쉐이킹 지원으로 처리하여 최소 번들 크기(~60 KB 기본 로드/저장)를 제공합니다. 설계는 라운드 트립 안전성을 보장합니다—모델에 포함되지 않은 콘텐츠가 제거되지 않고 보존되어—스키마 유효성 및 크로스 플랫폼 호환성(PowerPoint, Keynote, Google Slides, LibreOffice)이 중요한 프로덕션 사용에 이상적입니다.
pptx 시작하기
npm, pnpm 또는 yarn을 사용하여 @office-kit/pptx를 설치하십시오. 이 라이브러리는 ESM 번들로 배포되며 최소한의 용량을 위해 트리 쉐이킹을 지원합니다. 설치 후 `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), 댓글 등을 포함한 풍부한 슬라이드 요소를 지원합니다. 차트는 PowerPoint에서 편집할 수 있도록 실시간 Excel 데이터를 삽입하고, 애니메이션은 설정 가능한 지속 시간의 사전 정의 효과를 사용합니다. 댓글을 통해 작성자 메타데이터와 선택적 위치 정보를 포함한 검토자 메모를 추가할 수 있습니다. 이러한 기능 덕분에 이 라이브러리는 전문 표준을 충족하고 스키마 검증을 통과하는 인터랙티브하고 데이터가 풍부한 프레젠테이션을 만드는 데 적합합니다.
슬라이드에 차트와 애니메이션을 추가하는 방법?
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);
검증 및 스키마 준수
ECMA-376 규격을 준수하도록 PPTX 파일을 보장하는 것은 도구 간 호환성에 필수적입니다. @office-kit/pptx는 `validatePresentation()`을 포함하여 누락된 관계, 잘못된 슬라이드 ID, 또는 손상된 레이아웃 참조와 같은 문제를 감지합니다. 또한 사용 가능한 경우 CI에서 `xmllint`를 사용하여 생성된 XML을 공식 스키마에 대해 검증합니다. 이 검증 레이어는 배포 전에 미묘한 오류를 포착하는 데 도움이 되며, 프레젠테이션이 PowerPoint, Keynote, Google Slides, LibreOffice에서 신뢰성 있게 열리도록 보장합니다—"열고 기도하기"에 의존하지 않고.
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.
