Aspose.Words 문서 병합기 for .NET

Aspose.Words Document Merger for .NET 은 프로그래밍을 통해 단일 출력에 Word-Compatible 문서의 모든 수를 추가할 수 있으며, 포맷, 스타일, 페이지 레이아웃, 헤드/포터 및 필드를 보존 할 수 있습니다.일반적인 사용은 보고서를 모으거나 계약 전시회를 묶거나 아카이브를 위해 생성된 콘텐츠를 집합합니다.

윈도우, 리눅스 및 macOS에서 잘 작동합니다.Microsoft Office가 필요하지 않습니다.

설치 및 설정

  • NuGet 패키지를 설치합니다 Aspose.Words.
  • 응용 프로그램 스타트업에서 측정 된 라이센스를 적용하여 평가 물표를 피하십시오. Metered Licensing 참조/).
  • 프레임 워크 요구 사항을 확인하십시오 설치 가이드 .

지원되는 입력 (선택): DOC, DOCX, DOTX/DOTM, RTF, ODT, HTML/MHTML, PDF, TXT, WordML.지원되는 출력: DOCX, DOC, PDF, HTML (지정/흐름), MHTML, ODT, RTF, 이미지, EPUB, XPS 등.

빠른 시작 : 여러 문서를 추가

using Aspose.Words;

// Destination (master) document
var master = new Document();
var builder = new DocumentBuilder(master);

// Start on a clean page
builder.InsertBreak(BreakType.SectionBreakNewPage);

// Append each source with chosen import mode
ImportFormatMode mode = ImportFormatMode.KeepSourceFormatting; // or UseDestinationStyles

foreach (string path in new [] { "intro.docx", "spec.docx", "annex.rtf" })
{
    var src = new Document(path);
    master.AppendDocument(src, mode);
    // Optional: force each source to start on a new page
    builder.MoveToDocumentEnd();
    builder.InsertBreak(BreakType.SectionBreakNewPage);
}

// Refresh fields (page numbers, TOC, cross‑refs)
master.UpdateFields();
master.Save("MergedOutput.pdf");

포맷 모드 수입

  • KeepSourceFormatting - 각 출처의 스타일과 직접 포맷을 보존합니다 (표시된 삽입에 이상적입니다).
  • UseDestinationStyles - 유니폼의 모습을 위해 목적지의 정의와 동일한 스타일 이름을 지도합니다.

컨트롤 섹션 & 페이지 레이아웃

각 문서를 시작하십시오 새 페이지 ** , 지속적인 ** 또는또는 추가 페이지:

var sect = master.LastSection;
sect.PageSetup.SectionStart = SectionStart.NewPage; // Continuous, EvenPage, OddPage

마진/페이지 크기를 복사함으로써 통합 PageSetup 템플릿 섹션에서:

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를 유지한다면, 그것을 한 번 삽입하고 자동으로 복구하십시오:

var b = new DocumentBuilder(master);
b.MoveToDocumentStart();
b.InsertTableOfContents("TOC \o \h \z \u");  // classic TOC switch set
master.UpdateFields();

암호 보호 입력 및 안전한 출력

using Aspose.Words.Loading;

var load = new LoadOptions { Password = "secret" };
var protectedDoc = new Document("protected.docx", load);
master.AppendDocument(protectedDoc, ImportFormatMode.KeepSourceFormatting);

// Save encrypted PDF
using Aspose.Words.Saving;
var pdf = new PdfSaveOptions
{
    EncryptionDetails = new PdfEncryptionDetails("openPwd", "ownerPwd",
        PdfEncryptionAlgorithm.RC4_128)
    { Permissions = PdfPermissions.DisallowAll }
};
master.Save("MergedEncrypted.pdf", pdf);

흐름-첫 번째 / 높은 볼륨 Merges

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.Pdf);
    output.Position = 0;
    // return/output stream
}

성과 팁

  • Batch는 메모리에 붙어있다; 전화 UpdateFields() 한 번 끝에.
  • 일관된 스타일링을 원할 때 UseDestinationStyles 를 선호합니다.
  • Dispose Document 긴 튜브에서 일찍 사례를 사용하여 피크 메모리를 줄일 수 있습니다.

혼합 형식 처리 (HTML, PDF, TXT)

  • HTML/MHTML : 스타일과 이미지와 함께 수입 (링크 또는 삽입).
  • PDF : 페이지는 가능한 경우 다시 흐르는 콘텐츠로 가져옵니다; 복잡한 레이아웃은 고정 형식으로 출력하는 동안 보존됩니다 (예 : PDF).
  • TXT : 평평한 단락으로 첨부; 일관성을 위해 수입 후 기본 스타일을 적용합니다.

모범 사례

  • 부패 / 암호에 대한 사전 유효성 부분적 합병을 피하기 위해.
  • 브랜드 충성도가 중요할 때 **KeepSourceFormatting ** 을 선택하십시오; 단일 모양을 위해 UseDestinationStyles 를 선택합니다.
  • 페이지 설정을 보호하기 위해 각 애플리케이션 전에 ** 섹션 브레이크** 를 입력합니다.
  • 단일 기업 템플릿을 원하는 경우 녹음 후 헤드/포터를 통합하십시오.
  • 최종 단계로 업데이트 필드 & TOC.
  • 매우 큰 배치를 위해 그룹으로 나누고 기억을 안정적으로 유지하기 위해 집단을 결합하십시오.

FAQ

**모든 출처를 새 페이지에서 시작하도록 강요할 수 있습니까?**예. 각 페이지 전에 섹션 또는 페이지 붕괴를 입력합니다 AppendDocument 전화 또는 설정 SectionStart 에 대 한 NewPage.

**내가 수입하는 동안 목적지 스타일을 어떻게 유지합니까?**사용하기 ImportFormatMode.UseDestinationStyles 안에서 AppendDocument.

**페이지 번호 및 TOC 업데이트를 자동으로 원하십니까?**전화 UpdateFields() (그리고 UpdatePageLayout() 정확한 페이지를 위해) 모든 첨부 후.

**암호화된 입력을 결합하고 암포화 된 출력을 생산할 수 있습니까?**예, 제공하기 LoadOptions.Password 입력 및 사용에 대 한 PdfSaveOptions.EncryptionDetails (또는 OoxmlSaveOptions.Password) 생산을 위한 것.

**사무실이 필요합니까?**No. Aspose.Words는 독립적인 도서관입니다.

 한국어