문서 병합기

Aspose.Words Document Merger for .NET 프로그램 방식으로 할 수 있게 합니다 Word 호환 문서를 원하는 만큼 결합합니다 형식, 스타일, 페이지 레이아웃, 머리글/바닥글 및 필드를 보존하면서 단일 출력으로 결합합니다. 일반적인 사용 사례로는 보고서 조합, 계약 전시물 묶음, 또는 아카이브를 위한 생성된 콘텐츠 집계가 있습니다.

Windows, Linux, macOS에서 헤드리스로 작동합니다. Microsoft Office가 필요 없습니다.

설치 및 설정

  1. NuGet 패키지를 설치합니다 Aspose.Words.
  2. 앱 시작 시에 미터링 라이선스를 적용하여 평가 워터마크를 방지합니다. 참조 미터링 라이선스 .
  3. 프레임워크 요구 사항을 확인합니다 설치 가이드 .

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

  1. 모든 소스를 새 페이지에서 시작하도록 강제할 수 있나요? 예. 각 앞에 섹션 또는 페이지 나누기를 삽입하십시오. AppendDocument 호출 또는 설정 SectionStartNewPage.
  2. 가져오는 동안 대상 스타일을 어떻게 유지하나요? 사용 ImportFormatMode.UseDestinationStyles 에서 AppendDocument.
  3. 페이지 번호와 목차가 자동으로 업데이트되나요? 호출 UpdateFields() (및 UpdatePageLayout() 정확한 페이지 매김을 위해) 모든 추가 후에.
  4. Office가 필요합니까? 아니요. Aspose.Words은 독립형 라이브러리입니다.
 한국어