Dokument Sammenlægning

Den Aspose.Words Document Merger for .NET lader dig programmæssigt sammenkæde et vilkårligt antal Word‑kompatible dokumenter til et enkelt output, mens formatering, stilarter, sideopsætning, sidehoveder/-fødder og felter bevares. Typiske anvendelser omfatter samling af rapporter, pakning af kontraktbilag eller aggregering af genereret indhold til arkivering.

Fungerer uden brugergrænseflade på Windows, Linux og macOS. Ingen Microsoft Office påkrævet.

Installation og opsætning

  1. Installer NuGet-pakken Aspose.Words.
  2. Anvend metered licensing ved app-start for at undgå evalueringsvandmærker. Se Metered Licensing .
  3. Bekræft framework-krav i den Installationsvejledning .

IDE’er: Visual Studio 2017–2026, JetBrains Rider, MonoDevelop.

Understøttede input / output: DOC, DOCX, RTF, DOT, DOTX, DOTM, DOCM, Word 2003 XML, og Word 2007 XML.

Hurtig start: Tilføj 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-tilstande:

  • KeepSourceFormatting — bevarer hver kildes stilarter og direkte formatering (ideelt til mærkede indsatser).
  • UseDestinationStyles — kortlægger identiske stilnavne til destinationens definitioner for et ensartet udseende.

Kontrolleret sektion & sideopsætning

Start hvert dokument på Ny side, Kontinuerlig, eller Lige/Ulige side:

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

Ensret margener/sidestørrelse ved at kopiere PageSetup fra en skabelonsektion:

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

Sidehoveder, sidefødder og vandmærker

Behold kilde sidehoveder/sidefødder, eller erstat dem med et master‑sæt efter sammenlægningen:

// 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, krydsreferencer og TOC

Efter sammenlægning, opdater felter så sidetal, referencer og Indholdsfortegnelse matcher det nye layout:

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

Hvis du vedligeholder en enkelt master-TOC, indsæt den én gang og lad den automatisk genopbygge:

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 / Høj‑volumen-sammenlægninger

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
}

Ydelsestips:

  • Batch-tilføjelser i hukommelsen; kald UpdateFields() en gang i slutningen.
  • Foretræk UseDestinationStyles når du vil have ensartet styling på tværs af dusinvis af input.
  • Frigør Document instanser tidligt i lange pipelines for at reducere spidshukommelsen.

Bedste praksis

  • For‑valider for korruption/adgangskoder for at undgå delvise sammenfletninger.
  • Vælg KeepSourceFormatting når brand‑trofasthed er vigtig; vælg UseDestinationStyles for ensartet udseende.
  • Indsæt en afsnitsbrud før hver tilføjelse for at beskytte sideopsætningen.
  • Ensret sidehoveder/sidefødder efter tilføjelse, hvis du vil have en enkelt virksomhedsskabelon.
  • Opdater felter & indholdsfortegnelse som det sidste trin.
  • For meget store batcher, del dem op i grupper og sammenslå grupperne for at holde hukommelsen stabil.

FAQ

  1. Kan jeg tvinge hver kilde til at starte på en ny side? Ja. Indsæt et afsnit eller sideskift før hver AppendDocument kald eller indstilling SectionStart til NewPage.
  2. Hvordan bevarer jeg destinationsstile, mens jeg importerer? Brug ImportFormatMode.UseDestinationStyles i AppendDocument.
  3. Vil sidetal og indholdsfortegnelse blive opdateret automatisk? Kald UpdateFields() (og UpdatePageLayout() for præcis paginering) efter alle tilføjelser.
  4. Er Office påkrævet? Nej. Aspose.Words er et selvstændigt bibliotek.
 Dansk