Spajanje dokumenata

The Aspose.Words Document Merger for .NET omogućuje vam programatski spojiti bilo koji broj Word‑compatible dokumenata u jedan izlaz uz očuvanje formatiranja, stilova, rasporeda stranice, zaglavlja/podnožja i polja. Tipične upotrebe uključuju sastavljanje izvješća, grupiranje dodataka ugovora ili agregiranje generiranog sadržaja za arhiviranje.

Radi bez grafičkog sučelja na Windowsu, Linuxu i macOS-u. Microsoft Office nije potreban.

Instalacija i postavljanje

  1. Instalirajte NuGet paket Aspose.Words.
  2. Primijenite metered licensing pri pokretanju aplikacije kako biste izbjegli vodene žigove evaluacije. Pogledajte Metered Licensing .
  3. Provjerite zahtjeve frameworka u Vodič za instalaciju .

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

Podržani ulazi / izlazi: DOC, DOCX, RTF, DOT, DOTX, DOTM, DOCM, Word 2003 XML i Word 2007 XML.

Brzi početak: Dodaj više dokumenata

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

Načini formata uvoza:

  • KeepSourceFormatting — očuva stilove i izravno formatiranje svakog izvora (idealno za brendirane umetke).
  • UseDestinationStyles — mapira identične nazive stilova na definicije odredišta za jedinstven izgled.

Kontrolirani odjeljak & raspored stranice

Započnite svaki dokument na Nova stranica, Kontinuirano, ili Parna/Neparna stranica:

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

Ujednačite margine/veličinu stranice kopiranjem PageSetup iz odjeljka predloška:

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

Zaglavlja, podnožja i vodeni žigovi

Zadržite zaglavlja/podnožja izvora, ili ih zamijenite glavnim skupom nakon spajanja:

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

Polja, unakrsne reference i sadržaj

Nakon spajanja, ažurirajte polja tako da brojevi stranica, reference i Kazalo sadržaja odgovaraju novom izgledu:

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

Ako održavate jedinstveni glavni TOC, umetnite ga jednom i dopustite mu da se automatski obnovi:

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 / Spajanja visokog volumena

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
}

Savjeti za performanse:

  • Grupno dodavanje u memoriji; pozovite UpdateFields() jednom na kraju.
  • Preferiraj UseDestinationStyles kada želite dosljedno stiliziranje kroz desetke ulaza.
  • Oslobodi Document instance rano u dugim cjevovodima kako bi smanjili vršnu memoriju.

Najbolje prakse

  • Pre‑validiraj za korupciju/lozinke kako bi izbjegli djelomična spajanja.
  • Odaberi KeepSourceFormatting kada je važna vjernost brenda; odaberi UseDestinationStyles za uniforman izgled.
  • Umetni prelom odjeljka prije svakog dodatka kako bi zaštitili postavke stranice.
  • Ujedini zaglavlja/podnošja nakon dodavanja ako želite jedinstveni korporativni predložak.
  • Ažuriraj polja & TOC kao posljednji korak.
  • Za vrlo velike serije, podijelite ih u grupe i spojite grupe kako biste održali stabilnost memorije.

FAQ

  1. Mogu li prisiliti svaki izvor da počne na novoj stranici? Da. Umetni odjeljak ili prijelom stranice prije svakog AppendDocument poziva ili skupa SectionStart na NewPage.
  2. Kako zadržati stilove odredišta prilikom uvoza? Koristite ImportFormatMode.UseDestinationStyles u AppendDocument.
  3. Hoće li brojevi stranica i TOC automatski ažurirati? Pozovite UpdateFields() (i UpdatePageLayout() za precizno numeriranje stranica) nakon svih dodataka.
  4. Je li Office potreban? Ne. Aspose.Words je samostalna biblioteka.
 Hrvatski