Document Merger

De Aspose.Words Document Merger for .NET laat je programmatisch voegt een willekeurig aantal Word‑compatibele documenten samen naar één enkele output terwijl de opmaak, stijlen, paginalay-out, kop‑ en voetteksten, en velden behouden blijven. Typische toepassingen omvatten het samenstellen van rapporten, het bundelen van contractbijlagen, of het aggregeren van gegenereerde inhoud voor archivering.

Werkt headless op Windows, Linux en macOS. Microsoft Office is niet vereist.

Installatie en configuratie

  1. Installeer het NuGet‑pakket Aspose.Words.
  2. Pas metered licensing toe bij het opstarten van de app om evaluatiewatermerken te vermijden. Zie Metered Licensing .
  3. Controleer de framework‑vereisten in de Installatiehandleiding .

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

Ondersteunde invoer / uitvoer: DOC, DOCX, RTF, DOT, DOTX, DOTM, DOCM, Word 2003 XML, en Word 2007 XML.

Snelstart: Meerdere documenten toevoegen

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

Importformaatmodi:

  • KeepSourceFormatting — behoudt de stijlen en directe opmaak van elke bron (ideaal voor merkgebonden inserts).
  • UseDestinationStyles — map identieke stijlnamen naar de definities van de bestemming voor een uniform uiterlijk.

Geregelde sectie & paginalay-out

Begin elk document op Nieuwe pagina, Continu, of Even/Oneven pagina:

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

Uniformeer marges/paginaformaat door te kopiëren PageSetup van een sjabloonsectie:

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

Koppen, voetteksten en watermerken

Bewaar bronkoppen/voetteksten, of vervang ze door een masterset na het samenvoegen:

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

Velden, kruisverwijzingen en TOC

Na het samenvoegen, werk velden bij zodat paginanummers, verwijzingen, en Inhoudsopgave overeenkomen met de nieuwe lay-out:

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

Als je een enkele master TOC bijhoudt, voeg deze dan één keer in en laat hem automatisch opnieuw opbouwen:

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 samenvoegingen

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
}

Prestatie‑tips:

  • Batch-append in het geheugen; roep UpdateFields() eenmalig aan het einde.
  • Voorkeur UseDestinationStyles wanneer je consistente styling wilt over tientallen invoerbestanden.
  • Verwijder Document instanties vroeg in lange pipelines om piekgeheugen te verminderen.

Best practices

  • Pre‑valideren op corruptie/wachtwoorden om gedeeltelijke samenvoegingen te voorkomen.
  • Kies KeepSourceFormatting wanneer merktrouw belangrijk is; kies UseDestinationStyles voor een uniforme uitstraling.
  • Voeg een sectie‑einde voor elke toevoeging om de paginainstelling te beschermen.
  • Koppen/voetteksten uniformeren na het toevoegen als je één corporate-sjabloon wilt.
  • Velden & inhoudsopgave bijwerken als de laatste stap.
  • Voor zeer grote batches, splits in groepen en voeg de groepen samen om het geheugen stabiel te houden.

FAQ

  1. Kan ik elke bron dwingen op een nieuwe pagina te beginnen? Ja. Voeg een sectie- of pagina-einde in vóór elke AppendDocument aanroep of set SectionStart naar NewPage.
  2. Hoe behoud ik de bestemmingsstijlen bij het importeren? Gebruik ImportFormatMode.UseDestinationStyles in AppendDocument.
  3. Worden paginanummers en inhoudsopgave automatisch bijgewerkt? Roep UpdateFields() (en UpdatePageLayout() voor precieze paginering) na alle toevoegingen.
  4. Is Office vereist? Nee. Aspose.Words is een zelfstandige bibliotheek.
 Nederlands