문서 병합기
그 Aspose.Words Document Merger for .NET 프로그램 방식으로 할 수 있게 합니다 Word 호환 문서를 원하는 만큼 결합합니다 형식, 스타일, 페이지 레이아웃, 머리글/바닥글 및 필드를 보존하면서 단일 출력으로 결합합니다. 일반적인 사용 사례로는 보고서 조합, 계약 전시물 묶음, 또는 아카이브를 위한 생성된 콘텐츠 집계가 있습니다.
Windows, Linux, macOS에서 헤드리스로 작동합니다. Microsoft Office가 필요 없습니다.
설치 및 설정
- NuGet 패키지를 설치합니다
Aspose.Words. - 앱 시작 시에 미터링 라이선스를 적용하여 평가 워터마크를 방지합니다. 참조 미터링 라이선스 .
- 프레임워크 요구 사항을 확인합니다 설치 가이드 .
IDE: Visual Studio 2017–2026, JetBrains Rider, MonoDevelop.
지원되는 입력 / 출력: DOC, DOCX, RTF, DOT, DOTX, DOTM, DOCM, Word 2003 XML, 및 Word 2007 XML.
빠른 시작: 여러 문서 추가
using Aspose.Words;
var master = new Document();
var builder = new DocumentBuilder(master);
builder.InsertBreak(BreakType.SectionBreakNewPage);
ImportFormatMode mode = ImportFormatMode.KeepSourceFormatting;
foreach (string path in new[] { "Blank.docx", "Background images.docx", "annex.rtf" })
{
var src = new Document(path);
master.AppendDocument(src, mode);
builder.MoveToDocumentEnd();
builder.InsertBreak(BreakType.SectionBreakNewPage);
}
master.UpdateFields();
master.Save("MergedOutput.docx");가져오기 형식 모드:
- KeepSourceFormatting — 각 소스의 스타일과 직접 서식을 보존합니다 (브랜드 삽입에 이상적).
- UseDestinationStyles — 동일한 스타일 이름을 대상 정의에 매핑하여 일관된 모양을 제공합니다.
제어된 섹션 & 페이지 레이아웃
각 문서를 시작합니다 새 페이지, 연속, 또는 짝/홀 페이지:
var sect = master.LastSection;
sect.PageSetup.SectionStart = SectionStart.NewPage; // Continuous, EvenPage, OddPage복사하여 여백/페이지 크기를 통합합니다 PageSetup 템플릿 섹션에서:
using Aspose.Words;
var master = new Document();
var template = new Document("template.docx");
var pageSetup = template.FirstSection.PageSetup;
foreach (Section s in master.Sections)
{
s.PageSetup.Orientation = pageSetup.Orientation;
s.PageSetup.PageWidth = pageSetup.PageWidth;
s.PageSetup.PageHeight = pageSetup.PageHeight;
s.PageSetup.TopMargin = pageSetup.TopMargin;
s.PageSetup.BottomMargin = pageSetup.BottomMargin;
s.PageSetup.LeftMargin = pageSetup.LeftMargin;
s.PageSetup.RightMargin = pageSetup.RightMargin;
}머리글, 바닥글 및 워터마크
소스 머리글/바닥글을 유지하거나 병합 후 마스터 세트로 교체:
// Copy headers/footers from a master template into every section
var hft = new Document("header-footer-template.docx");
foreach (Section s in master.Sections)
{
s.HeadersFooters.Clear();
s.HeadersFooters.AddClone(hft.FirstSection.HeadersFooters[HeaderFooterType.HeaderPrimary]);
s.HeadersFooters.AddClone(hft.FirstSection.HeadersFooters[HeaderFooterType.FooterPrimary]);
}
// Add a simple text watermark
foreach (Section s in master.Sections)
{
var header = s.HeadersFooters[HeaderFooterType.HeaderPrimary] ?? new HeaderFooter(master, HeaderFooterType.HeaderPrimary);
if (header.ParentNode == null) s.HeadersFooters.Add(header);
var shape = new Shape(master, ShapeType.TextPlainText)
{
RelativeHorizontalPosition = RelativeHorizontalPosition.Page,
RelativeVerticalPosition = RelativeVerticalPosition.Page,
WrapType = WrapType.None,
Rotation = -40,
Width = 400, Height = 100, Left = 100, Top = 200,
BehindText = true
};
shape.TextPath.Text = "CONFIDENTIAL";
header.AppendChild(shape);
}필드, 교차 참조 및 TOC
병합 후, 필드를 업데이트하여 페이지 번호, 참조 및 목차 새 레이아웃에 맞춥니다:
master.UpdateFields();
master.UpdatePageLayout(); // ensures accurate page count
master.UpdateTableLayout(); // improves complex table pagination단일 마스터 TOC를 유지한다면 한 번 삽입하고 자동으로 재구성되도록:
using Aspose.Words;
var master = new Document();
var b = new DocumentBuilder(master);
b.MoveToDocumentStart();
b.InsertTableOfContents("TOC \\$1 \\$1 \\$1 \\$1"); // classic TOC switch set
master.UpdateFields();Stream‑First / High‑Volume Merges
using System.IO;
using System.Collections.Generic;
using Aspose.Words;
using Aspose.Words.Lists;
IEnumerable<Stream> sourceStreams = new List<Stream>();
using (var output = new MemoryStream())
{
var dst = new Document();
foreach (Stream srcStream in sourceStreams)
{
using var s = srcStream; // e.g., S3/Blob stream
var src = new Document(s); // auto‑detects format
dst.AppendDocument(src, ImportFormatMode.UseDestinationStyles);
}
dst.UpdateFields();
dst.Save(output, SaveFormat.docx);
output.Position = 0;
// return/output stream
}성능 팁:
- 메모리에서 배치 추가; 호출
UpdateFields()끝에서 한 번. - 선호 UseDestinationStyles 수십 개의 입력에 걸쳐 일관된 스타일링을 원할 때.
- 제거
Document긴 파이프라인에서 인스턴스를 일찍 처리하여 피크 메모리를 감소시킵니다.
모범 사례
- 사전 검증 손상/비밀번호에 대해 부분 병합을 방지하기 위해.
- 선택 KeepSourceFormatting 브랜드 충실도가 중요할 때; 선택 UseDestinationStyles 균일한 외관을 위해.
- 삽입하십시오 섹션 구분 각 추가 전에 페이지 설정을 보호하기 위해.
- 헤더/푸터 통합 추가한 후에 단일 기업 템플릿을 원한다면.
- 필드 및 목차 업데이트 마지막 단계로.
- 매우 큰 배치의 경우, 그룹으로 나누어 병합하여 메모리를 안정적으로 유지하세요.
FAQ
- 모든 소스를 새 페이지에서 시작하도록 강제할 수 있나요? 예. 각 앞에 섹션 또는 페이지 나누기를 삽입하십시오.
AppendDocument호출 또는 설정SectionStart에NewPage. - 가져오는 동안 대상 스타일을 어떻게 유지하나요? 사용
ImportFormatMode.UseDestinationStyles에서AppendDocument. - 페이지 번호와 목차가 자동으로 업데이트되나요? 호출
UpdateFields()(및UpdatePageLayout()정확한 페이지 매김을 위해) 모든 추가 후에. - Office가 필요합니까? 아니요. Aspose.Words은 독립형 라이브러리입니다.