Sloučení dokumentů

Tento Aspose.Words Document Merger for .NET umožňuje vám programově sloučit libovolný počet dokumentů kompatibilních s Wordem do jediného výstupu při zachování formátování, stylů, rozvržení stránky, záhlaví/patiček a polí. Typické použití zahrnuje sestavování zpráv, seskupování příloh smluv nebo shromažďování generovaného obsahu pro archivaci.

Funguje bez grafického rozhraní na Windows, Linuxu a macOS. Microsoft Office není vyžadován.

Instalace a nastavení

  1. Nainstalujte balíček NuGet Aspose.Words.
  2. Použijte metered licensing při spuštění aplikace, aby se předešlo vodotiskům hodnocení. Viz Metered Licensing .
  3. Ověřte požadavky frameworku v Instalační příručka .

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

Podporované vstupy / výstupy: DOC, DOCX, RTF, DOT, DOTX, DOTM, DOCM, Word 2003 XML a Word 2007 XML.

Rychlý start: Připojit více dokumentů

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

Režimy importu formátu:

  • KeepSourceFormatting — zachovává styly a přímé formátování každého zdroje (ideální pro značkové vložky).
  • UseDestinationStyles — mapuje identické názvy stylů na definice cíle pro jednotný vzhled.

Řízená sekce a rozvržení stránky

Začněte každý dokument na Nová stránka, Souvislé, nebo Sudá/lichá stránka:

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

Zjednotit okraje/velikost stránky kopírováním PageSetup z části šablony:

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

Záhlaví, zápatí a vodoznaky

Ponechte původní záhlaví/zápatí nebo je po sloučení nahraďte hlavním souborem.:

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

Pole, křížové odkazy a TOC

Po sloučení aktualizujte pole, aby čísla stránek, odkazy a Obsah odpovídaly novému rozvržení:

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

Pokud udržujete jediný hlavní TOC, vložte jej jednou a nechte jej automaticky přestavět:

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 / vysokokapacitní sloučení

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
}

Tipy pro výkon:

  • Dávkové přidávání v paměti; zavolejte UpdateFields() jednou na konci.
  • Preferovat UseDestinationStyles když chcete konzistentní stylování napříč desítkami vstupů.
  • Uvolněte Document instance brzy v dlouhých pipelinech, aby se snížila špičková paměť.

Nejlepší postupy

  • Předvalidovat pro poškození/hesla, aby se předešlo částečným sloučením.
  • Vyberte KeepSourceFormatting když je důležitá věrnost značky; vyberte UseDestinationStyles pro jednotný vzhled.
  • Vložte přerušení sekce před každým přidáním, aby se chránilo nastavení stránky.
  • Zjednotit záhlaví/patky po připojení, pokud chcete jednotnou firemní šablonu.
  • Aktualizovat pole a obsah jako poslední krok.
  • U velmi velkých dávek rozdělte do skupin a sloučte skupiny, aby byla paměť stabilní.

FAQ

  1. Mohu vynutit, aby každý zdroj začínal na nové stránce? Ano. Vložte před každým oddíl nebo zalomení stránky AppendDocument volání nebo nastavení SectionStart na NewPage.
  2. Jak zachovat cílové styly při importu? Použijte ImportFormatMode.UseDestinationStyles v AppendDocument.
  3. Aktualizují se automaticky čísla stránek a obsah? Zavolejte UpdateFields() (a UpdatePageLayout() pro přesné stránkování) po všech připojeních.
  4. Je vyžadován Office? Ne. Aspose.Words je samostatná knihovna.
 Čeština