
AI를 사용해 C#에서 문서를 PowerPoint 프레젠테이션으로 변환하는 것은 단순한 형식 변환 그 이상입니다. 30페이지 보고서가 10장 슬라이드 덱이 된다는 것은 누군가 전체 문서를 읽고, 어떤 90%를 생략할지 결정하고, 남은 내용을 하나의 내러티브로 재구성하고, 시각 디자인을 적용했다는 뜻입니다. 이것이 바로 편집적 종합입니다 — 기존 PowerPoint 라이브러리가 하지 않는 부분입니다.
흥미로운 점은 무엇이 종합되는가입니다. 실제 워크플로에서 소스가 단일 파일인 경우는 드뭅니다. 분기별 비즈니스 리뷰는 Excel 통합 문서에서 숫자를, Word 보고서에서 서술을, PDF에서 서명된 인보이스를 가져옵니다. AI 문서 에이전트의 가치는 "하나의 .docx를 .pptx로 변환"하는 것이 아니라 "세 가지를 모두 읽고, 그 모두를 아우르는 하나의 덱을 만들어라"입니다. 이 글에서는 C#에서 Spire.Agent.Office로 이를 수행하는 가장 간단한 방법을 보여줍니다: 에이전트에 모든 문서와 하나의 지시를 전달하면 한 번의 호출로 덱을 생성합니다.
1. 하나의 지시, 여러 소스
기존 Spire.Office 코드는 각 형식을 섬처럼 다룹니다. Word 보고서와 Excel 시트로 덱을 만들려면 다음과 같이 해야 합니다:
-
Spire.Doc을 사용하여.docx를 열고 원하는 텍스트를 추출합니다. -
Spire.XLS를 사용하여 통합 문서를 읽고 수치를 계산합니다. - 소스가 PDF인 경우
Spire.Pdf를 사용합니다. -
Spire.Presentation을 사용하여 슬라이드를 하나씩 만들고, 모든 텍스트 상자와 차트의 위치를 지정하고, 레이아웃을 수동으로 계산합니다.
이는 네 개의 API 표면, 형식별 파서, 수동 레이아웃 엔진을 의미합니다. 문서 구조가 바뀌는 순간 코드가 깨집니다.
Spire.Agent.Office는 이를 하나의 지시로 축소합니다. 에이전트에 모든 소스 파일을 전달하고 덱이 어떤 이야기를 전해야 하는지 알려주기만 하면 됩니다. 에이전트는 각 형식을 읽고, 그들 사이에서 중요한 것이 무엇인지 판단하고, 슬라이드를 생성합니다 — 수동 레이아웃 코드가 없습니다.
멘탈 모델은 단일 단계입니다:

형식별 파서를 작성하는 대신, 에이전트가 모든 파일을 읽고 덱을 직접 생성하도록 합니다. 한 번의 호출, 하나의 지시 문자열, 하나의 .pptx 파일.
2. 필요한 항목
-
.NET 6+ (샘플은
net10.0을 대상으로 합니다). -
Spire.Agent.OfficeNuGet 패키지. 이 패키지는Spire.Doc,Spire.Pdf,Spire.XLS,Spire.Presentation을 전이적으로 가져오므로 별도로 설치할 필요가 없습니다. -
SpireToken(Spire.Agent.Office API 키). 에이전트가 AI 서비스와 통신하므로 실제 생성에는 유효한 토큰이 필요합니다. - 네임스페이스 가져오기:
using Spire.Agent.Office.AI; // AIOptions, AIDocumentProcessor, AIResult
using Spire.Agent.Office.Extensions;// presentation.AI(...) extension
using Spire.Presentation; // Presentation
3. 간단한 방법: 한 번의 호출, 하나의 덱
핵심 아이디어는 근본적인 단순함입니다: 모든 소스 문서를 첨부 파일로 전달하고, 하나의 자연어 지시를 작성하면 에이전트가 읽기, 이해, 종합, 레이아웃 등 모든 작업을 단일 ExecuteInstruction 호출에서 수행합니다.
string[] sources = new[]
{
Path.Combine(sampleDir, "AI-Powered Document Processing Report.docx"),
Path.Combine(sampleDir, "purchase-orders.xlsx"),
Path.Combine(sampleDir, "invoice_INV-2026-0815.pdf")
};
string instruction =
"Create a concise Q3 business review summary from the provided documents. " +
"1. Use a clean blue theme; " +
"2. Summarize business review, project status, customer pilot research, and platform performance; " +
"3. Keep each slide focused on one key finding or metric; " +
"4. Generate 5 slides.";
AIResult result = processor.ExecuteInstruction(
ppt, instruction, savePath, sources,
autonomousOutput: true, maxTurns: null);
이것이 전부입니다: 하나의 메서드 호출, 하나의 지시 문자열. 형식별 파서도, 중간 파일도, 수동 레이아웃 코드도 없습니다. 에이전트는 각 형식을 읽고, 그들 사이에서 중요한 것을 판단하고, 덱을 savePath에 직접 작성합니다.
autonomousOutput: true 플래그가 이 작업을 가능하게 합니다 — 각 단계에서 확인을 요청하지 않고 파일(최종 .pptx 포함)을 작성할 수 있음을 에이전트에 알려줍니다. maxTurns는 null(또는 큰 숫자)로 설정하여 에이전트가 작업을 완료할 충분한 턴을 갖도록 하세요.
4. 전체 예제: Word + PDF + Excel로 하나의 덱 만들기
다음은 전체 프로그램입니다. 파일이나 폴더를 지정하면 단 한 번의 AI 호출로 덱을 만듭니다:
using System;
using System.IO;
using System.Linq;
using Spire.Agent.Office.AI;
using Spire.Agent.Office.Extensions;
using Spire.Presentation;
class Program
{
static void Main()
{
string instruction =
"Create a concise Q3 business review summary from the provided documents. " +
"1. Use a clean blue theme; " +
"2. Summarize business review, project status, customer pilot research, and platform performance; " +
"3. Keep each slide focused on one key finding or metric; " +
"4. Generate 5 slides.";
AIOptions options = new AIOptions { SpireToken = "sk-YourSpireToken", TimeoutMs = 1000000 };
using (Presentation ppt = new Presentation())
{
AIResult result = ppt.AI(options).ExecuteInstruction(
ppt, instruction, @"C:\Samples\Q3_Review.pptx", ResolveInputs(@"C:\Samples"),
autonomousOutput: true, maxTurns: null);
Console.WriteLine(result.Success ? "Success" : $"Error={result.ErrorMessage}");
}
}
// Point at a file or a folder; a folder is filtered to supported document formats.
static string[] ResolveInputs(string path) =>
File.Exists(path) ? new[] { path }
: Directory.GetFiles(path).Where(IsSupported).OrderBy(f => f).ToArray();
static bool IsSupported(string file) =>
new[] { ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md" }
.Contains(Path.GetExtension(file).ToLowerInvariant());
}
이것이 전체 프로그램입니다. 에이전트 호출 자체를 제외하면 유일한 코드는 ResolveInputs이며, 이는 어떤 파일을 첨부할지만 결정합니다: 문서를 읽거나 파싱하지 않습니다. 디자인(테마, 슬라이드 수, 초점)을 설명하는 부분은 지시문뿐이며, 읽기, 판단, 레이아웃은 에이전트의 작업입니다.
한 번의 호출, 다섯 장의 슬라이드 — 위 프로그램이 생성하는 덱:

5. 내부 동작 방식
-
AIDocumentProcessor는ppt.AI(options)를 통해Presentation에서 가져옵니다.Presentation객체는 에이전트가 슬라이드를 그리는 캔버스입니다. -
AIOptions는 구성을 담습니다:SpireToken(키)과TimeoutMs(실제 문서에는 크게 설정하세요 — 큰 문서의 AI 분석에는 시간이 걸립니다). -
ExecuteInstruction은 에이전트를 실행합니다.Presentation, 자연어instruction, 출력.pptx의savePath, 그리고 소스 파일 경로의string[](Word, PDF, Excel, Markdown의 임의 조합)을 전달합니다.autonomousOutput: true이면 에이전트는 확인을 요청하지 않고 파일(최종 덱 포함)을 작성할 수 있습니다.Success,ErrorMessage,OutputFiles(에이전트가 생성한 모든 것)를 포함한AIResult를 반환합니다. -
maxTurns는 허용되는 에이전트 단계 수를 제어합니다. 제한 없음을 원하면null로, 큰 문서 집합에는 큰 숫자(예:80)로 설정하세요. -
GeneratePresentation(sourcePath, instruction, savePath)는 소스 문서가 정확히 하나일 때 사용하는 전용 단축 방법입니다.AIResult대신PPTGenerationResult(Success,GeneratedPages,TotalPages,OutputPath,ErrorMessage)를 반환합니다.sourcePath는 단일 파일이며, 이 글에서 다중 첨부ExecuteInstruction경로를 사용하는 이유가 바로 이것입니다: 한 번의 호출로 하나의 덱이 여러 소스를 활용할 수 있게 해줍니다.
먼저 Markdown으로 병합하면 안 될까요? 그렇게 할 수도 있습니다 — 섹션 6의 변형 B를 참조하세요. 하지만 대부분의 사용 사례에서는 단일 호출 방식이 더 간단하고 빠르며 동일한 결과를 생성합니다. 중간 Markdown은 덱에 토큰을 소비하기 전에 통합된 콘텐츠를 검사하거나 편집하려는 경우에만 유용합니다.
6. 정밀한 제어
위의 방법은 의도적으로 최소화되어 있습니다. 더 많은 제어가 필요할 때, 다음 변형들은 동일한 ExecuteInstruction 호출을 기반으로 합니다.
지시문을 조정하세요. 덱의 구조, 길이, 테마, 차트는 모두 지시 문자열로 제어됩니다. 명확하게 작성하세요:
// e.g. ask for a specific page count, theme, and a chart on a given slide
"Create a 12-slide deck. Light minimalist theme, accent colour #2E5AAC. " +
"Include a bar chart of monthly revenue on slide 5. Keep each slide to one key message.";
변형 A — 각 소스를 직접 요약하기(더 예측 가능). 각 문서를 개별적으로 프롬프트하는 편이 하나의 교차 문서 지시를 신뢰하는 것보다 낫다면, 단일 파일에 대한 에이전트의 요약을 string으로 반환하는 SummarizeDocument를 반복 호출하세요:
var sb = new StringBuilder();
foreach (var file in sources)
sb.AppendLine($"## {Path.GetFileName(file)}\n\n{processor.SummarizeDocument(file)}");
File.WriteAllText(Path.Combine(workDir, "consolidated.md"), sb.ToString());
그런 다음 통합된 Markdown을 유일한 소스로 ExecuteInstruction에 전달하세요 — 생성 전에 읽고 편집할 수 있는 문서별 개별 요약을 얻습니다.
변형 B — Markdown으로 통합한 후 생성(2단계). 검사 가능한 중간 파일이 필요한 경우 작업을 두 번의 호출로 나눕니다. 1단계에서는 자율 모드의 ExecuteInstruction을 사용하여 모든 소스를 하나의 Markdown 파일로 병합하고, 2단계에서는 해당 Markdown을 다시 ExecuteInstruction에 전달하여 덱을 만듭니다:
// Step 1 — merge all documents into one Markdown file
string consolidateInstruction =
"Read all the attached files. Merge their content into a SINGLE Markdown " +
"document named 'output_consolidated.md'. Use one top-level heading per source, " +
"preserve key facts / figures / tables, and drop boilerplate. Output ONLY that file.";
processor.ExecuteInstruction(ppt, consolidateInstruction,
Path.Combine(workDir, "output_consolidated.pptx"), sources,
autonomousOutput: true, maxTurns: 40);
string consolidatedMd = Path.Combine(workDir, "output_consolidated.md");
// Step 2 — generate the deck from the consolidated Markdown
string genInstruction =
"Create a 9-slide quarterly business review deck from the consolidated material. " +
"Professional corporate blue, clear hierarchy, speaker notes per slide.";
processor.ExecuteInstruction(ppt, genInstruction,
Path.Combine(workDir, "QBR_Deck.pptx"), new[] { consolidatedMd },
autonomousOutput: true, maxTurns: 40);
트레이드오프: 변형 B는 두 호출 사이에 검사 가능한 Markdown 파일을 제공하므로 디버깅이나 통합에 사람의 검토가 필요할 때 유용합니다. 섹션 3의 단일 호출 방법이 더 간단하고 빠르기 때문에 권장 기본값입니다.
다음도 참고하세요: .NET에서 AI 에이전트로 인보이스 처리 자동화하기 — 에이전트에 파일 폴더를 전달하고 완성된 문서를 받는 또 다른 문서 중심 워크플로입니다.
7. 결과 다시 읽고 검사하기
생성 후 덱을 다시 열고 프로그래밍 방식으로 확인하세요:
using (Presentation deck = new Presentation())
{
deck.LoadFromFile(savePath);
Console.WriteLine($"Total slides: {deck.Slides.Count}");
for (int i = 0; i < deck.Slides.Count; i++)
{
ISlide slide = deck.Slides[i];
string title = slide.Title ?? "(no title)";
Console.WriteLine($"Slide {i + 1}: {title}");
}
}
여기에 사람의 검토 단계도 들어갑니다: 생성된 덱을 로드하고, 제목을 확인하고, 문제가 있으면 지시문을 다듬으세요.
8. 자주 묻는 질문
생성된 덱의 슬라이드 수가 잘못되었습니다.
소스가 크면 분석이 기본 타임아웃보다 오래 걸려 에이전트가 조기에 중단될 수 있습니다. AIOptions.TimeoutMs를 큰 값(예: 약 17분에 해당하는 1000000)으로 설정하고, 지시문에 페이지 범위를 명시하세요(예: "최종 덱을 8–12장으로 유지하세요").
에이전트가 문서 중 하나의 내용을 포함하지 않습니다. 복잡한 문서는 한 번의 처리로 혼란을 줄 수 있습니다. 원하는 콘텐츠를 지시문에 명시하세요("Word 보고서의 결과를 포함하세요", "Excel 시트의 표를 보존하세요"). 문제가 지속되면 2단계 접근법(섹션 6의 변형 B)으로 생성 전에 통합 Markdown을 검사해 보세요.
호출이 "401 Invalid token"으로 실패합니다.
SpireToken이 거부되었습니다 — 유효하고 만료되지 않았으며 AIOptions.SpireToken에 올바르게 복사되었는지 확인하세요.
여러 문서를 어떻게 전달하나요?
ExecuteInstruction은 네 번째 인수로 파일 경로의 string[]을 받습니다. 모든 소스 파일 — .docx, .pdf, .xlsx, .md 등의 임의 조합 — 을 전달하면 에이전트가 한 번의 호출로 모두 읽습니다. 소스 문서가 하나인 경우 전용 단축 방법은 GeneratePresentation(sourcePath, instruction, savePath)이며, 위의 다중 첨부 호출이 여러 소스로 하나의 덱을 만들 수 있게 해줍니다.
SpireToken 키 받기 평가판 또는 상용 API 키를 요청하려면 문의하세요, 또는 임시 라이선스를 신청하세요. 코드에서 구성하세요:
AIOptions options = new AIOptions();
options.SpireToken = "sk-YourSpireToken";
options.TimeoutMs = 1000000;
함께 보기
- Spire.Agent.Office 제품 개요 — Word, Excel, PowerPoint, PDF용 AI 에이전트 SDK
- Spire.Agent.Office 시작하기 — SDK 설치 및 첫 지시 실행
- 문서에서 PPT 생성하기 — 이 글에서 사용한 프레젠테이션 API의 공식 튜토리얼
- Spire.Agent.Office로 계약서 일괄 생성 — 대량 문서 생성에 적용된 동일한 지시 기반 패턴