Dokument‑samler

Den Aspose.Words Document Merger for .NET lar deg programmessig slå sammen et vilkårlig antall Word‑kompatible dokumenter til ett enkelt output mens formatering, stiler, sideoppsett, headers/footers og felter bevares. Vanlige bruksområder inkluderer å sette sammen rapporter, samle kontraktvedlegg, eller aggregere generert innhold for arkivering.

Fungerer uten brukergrensesnitt på Windows, Linux og macOS. Microsoft Office er ikke nødvendig.

Installasjon og oppsett

  1. Installer NuGet‑pakken Aspose.Words.
  2. Bruk metered licensing ved app-oppstart for å unngå evaluerings‑vannmerker. Se Metered Licensing .
  3. Bekreft framework‑krav i Installasjonsveiledning .

IDEer: Visual Studio 2017–2026, JetBrains Rider, MonoDevelop.

Støttede inndata / utdata: DOC, DOCX, RTF, DOT, DOTX, DOTM, DOCM, Word 2003 XML, og Word 2007 XML.

Rask start: Legg til flere dokumenter

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");

Importformat-moduser:

  • KeepSourceFormatting — bevarer hver kildes stiler og direkte formatering (ideelt for merkede innsettinger).
  • UseDestinationStyles — kartlegger identiske stilnavn til destinasjonens definisjoner for et ensartet utseende.

Kontrollert seksjon & sideoppsett

Start hvert dokument på Ny side, Kontinuerlig, eller Partall/oddetall side:

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

Enhetlige marger/sidestørrelse ved å kopiere PageSetup fra en malseksjon:

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;
}

Topptekster, bunntekster og vannmerker

Behold kilde‑topptekster/bunntekster, eller erstatt dem med et master‑sett etter sammenslåingen:

// 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);
}

Felter, kryss‑referanser og TOC

Etter sammenslåing, oppdater feltene slik at sidetall, referanser, og Innholdsfortegnelse matcher den nye layouten:

master.UpdateFields();
master.UpdatePageLayout();        // ensures accurate page count
master.UpdateTableLayout();       // improves complex table pagination

Hvis du vedlikeholder en enkelt master TOC, sett den inn én gang og la den auto‑rebuild:

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
}

Ytelsestips:

  • Batch-tillegg i minnet; kall UpdateFields() én gang på slutten.
  • Foretrekk UseDestinationStyles når du ønsker konsistent styling på tvers av dusinvis av input.
  • Disponer Document instanser tidlig i lange pipelines for å redusere maksimal minnebruk.

Beste praksis

  • Forhåndsvalider for korrupsjon/passord for å unngå delvise sammenslåinger.
  • Velg KeepSourceFormatting når merkevaretrofasthet er viktig; velg UseDestinationStyles for et ensartet utseende.
  • Sett inn en seksjonsbrytning før hver innsetting for å beskytte sideoppsettet.
  • Enhetliggjør topptekster/bunntekster etter å legge til hvis du vil ha en enkelt bedriftsmal.
  • Oppdater felter & innholdsfortegnelse som det siste trinnet.
  • For svært store batcher, del dem i grupper og slå sammen gruppene for å holde minnet stabilt.

FAQ

  1. Kan jeg tvinge hver kilde til å starte på en ny side? Ja. Sett inn en seksjon eller sideskift før hver AppendDocument kall eller sett SectionStart til NewPage.
  2. Hvordan beholder jeg destinasjonsstiler ved import? Bruk ImportFormatMode.UseDestinationStyles i AppendDocument.
  3. Vil sidetall og TOC oppdateres automatisk? Kall UpdateFields() (og UpdatePageLayout() for presis paginering) etter alle vedlegg.
  4. Er Office påkrevd? Nei. Aspose.Words er et frittstående bibliotek.
 Norsk