Dokumenten‑Zusammenführer

Der Aspose.Words Document Merger for .NET ermöglicht es Ihnen, programmgesteuert beliebig viele Word‑kompatible Dokumente zusammenführen in eine einzige Ausgabe, wobei Formatierung, Stile, Seitenlayout, Kopf‑/Fußzeilen und Felder erhalten bleiben. Typische Anwendungsfälle umfassen das Zusammenstellen von Berichten, das Bündeln von Vertragsanhängen oder das Aggregieren von erzeugten Inhalten für die Archivierung.

Funktioniert kopflos (headless) unter Windows, Linux und macOS. Microsoft Office ist nicht erforderlich.

Installation und Einrichtung

  1. Installieren Sie das NuGet-Paket Aspose.Words.
  2. Wenden Sie die nutzungsbasierte Lizenzierung beim Anwendungsstart an, um Evaluationswasserzeichen zu vermeiden. Siehe Nutzungsbasierte Lizenzierung .
  3. Überprüfen Sie die Framework‑Anforderungen in der Installationsanleitung .

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

Unterstützte Eingaben / Ausgaben: DOC, DOCX, RTF, DOT, DOTX, DOTM, DOCM, Word 2003 XML und Word 2007 XML.

Schnellstart: Mehrere Dokumente anhängen

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

Importformatmodi:

  • KeepSourceFormatting — bewahrt die Stile und die direkte Formatierung jeder Quelle (ideal für gebrandete Einfügungen).
  • UseDestinationStyles — ordnet identische Stilnamen den Definitionen des Ziels zu, um ein einheitliches Erscheinungsbild zu erzielen.

Gesteuerter Abschnitt‑ und Seitenlayout

Beginne jedes Dokument auf Neue Seite, Durchlaufend, oder Gerade/Ungerade Seite:

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

Ränder/Seitengröße durch Kopieren vereinheitlichen PageSetup aus einem Vorlagenabschnitt:

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

Kopf‑ und Fußzeilen sowie Wasserzeichen

Quell‑Kopf‑/Fußzeilen beibehalten oder nach dem Zusammenführen durch ein Master‑Set ersetzen:

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

Felder, Querverweise und Inhaltsverzeichnis

Nach dem Zusammenführen aktualisieren Sie die Felder, sodass Seitenzahlen, Verweise und Inhaltsverzeichnis dem neuen Layout entsprechen:

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

Wenn Sie ein einzelnes Master‑TOC pflegen, fügen Sie es einmal ein und lassen es automatisch neu erstellen:

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
}

Performance-Tipps:

  • Batch-Anhänge im Speicher; rufen Sie UpdateFields() einmal am Ende.
  • Bevorzugen Sie UseDestinationStyles wenn Sie ein konsistentes Styling über Dutzende von Eingaben hinweg wünschen.
  • Entsorgen Document Instanzen früh in langen Pipelines freigeben, um den Spitzen‑Speicherverbrauch zu reduzieren.

Best Practices

  • Vorvalidieren für Beschädigungen/Passwörter, um Teilzusammenführungen zu vermeiden.
  • Wählen KeepSourceFormatting wenn Markentreue wichtig ist; wählen UseDestinationStyles für ein einheitliches Aussehen.
  • Fügen Sie ein Abschnittswechsel vor jedem Anfügen, um das Seitenlayout zu schützen.
  • Kopf- und Fußzeilen vereinheitlichen nach dem Anhängen, falls Sie eine einzelne Unternehmensvorlage wünschen.
  • Felder & Inhaltsverzeichnis aktualisieren als letzter Schritt.
  • Bei sehr großen Stapeln teilen Sie sie in Gruppen auf und fügen die Gruppen zusammen, um den Speicher stabil zu halten.

FAQ

  1. Kann ich jede Quelle dazu zwingen, auf einer neuen Seite zu beginnen? Ja. Fügen Sie vor jedem einen Abschnitts- oder Seitenumbruch ein. AppendDocument Aufruf oder Setzen SectionStart zu NewPage.
  2. Wie kann ich die Zielstile beim Import beibehalten? Verwenden ImportFormatMode.UseDestinationStyles in AppendDocument.
  3. Werden Seitenzahlen und das Inhaltsverzeichnis automatisch aktualisiert? Aufrufen UpdateFields() (und UpdatePageLayout() für präzise Seitennummerierung) nach allen Anhängen.
  4. Ist Office erforderlich? Nein. Aspose.Words ist eine eigenständige Bibliothek.
 Deutsch