Dokumenttien yhdistäjä

Se Aspose.Words Document Merger for .NET antaa sinun ohjelmallisesti liittää mihin tahansa määrään Word‑yhteensopivia asiakirjoja yhdeksi tulosteeksi säilyttäen muotoilun, tyylit, sivun asettelun, ylä- ja alatunnisteet sekä kentät. Tyypillisiä käyttötarkoituksia ovat raporttien kokoaminen, sopimusliitteiden paketoiminen tai luodun sisällön kerääminen arkistointia varten.

Toimii ilman käyttöliittymää Windowsissa, Linuxissa ja macOSissa. Microsoft Officea ei tarvita.

Asennus ja käyttöönotto

  1. Asenna NuGet-paketti Aspose.Words.
  2. Käytä mittaustekijälisenssiä sovelluksen käynnistyksessä välttääksesi arviointivedenmerkit. Katso Mittaustekijälisenssi .
  3. Vahvista kehysvaatimukset kohteessa Asennusopas .

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

Tuetut syötteet / tulosteet: DOC, DOCX, RTF, DOT, DOTX, DOTM, DOCM, Word 2003 XML, ja Word 2007 XML.

Pika-aloitus: Lisää useita asiakirjoja

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

Tuontimuodon tilat:

  • KeepSourceFormatting — säilyttää jokaisen lähteen tyylit ja suoran muotoilun (ihanteellinen brändättyihin lisäyksiin).
  • UseDestinationStyles — kartoittaa identtiset tyylinimet kohteen määritelmiin yhtenäisen ulkoasun saavuttamiseksi.

Hallittu osio & sivuasettelu

Aloita jokainen asiakirja Uusi sivu, Jatkuva, tai Parillinen/Pariton sivu:

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

Yhtenäistä marginaalit/sivukoko kopioimalla PageSetup malliosasta:

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

Ylätunnisteet, alatunnisteet ja vesileimat

Säilytä lähteen ylätunnisteet/alatunnisteet tai korvaa ne pääasetuksella yhdistämisen jälkeen:

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

Kentät, ristiinviitteet ja sisällysluettelo

Yhdistämisen jälkeen päivitä kentät, jotta sivunumerot, viitteet ja Sisällysluettelo sopivat uuteen asetteluun:

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

Jos ylläpidät yhtä pää‑sisällysluetteloa, lisää se kerran ja anna sen automaattisesti uudelleenrakentaa:

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 / Suuri‑määräiset yhdistämiset

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
}

Suorituskykyvinkit:

  • Erälisäykset muistiin; kutsu UpdateFields() kerran lopussa.
  • Suosi UseDestinationStyles kun haluat yhdenmukaisen tyylin kymmenien syötteiden välillä.
  • Poista Document instansseja varhaisessa vaiheessa pitkissä putkistoissa vähentääksesi huippumuistia.

Parhaat käytännöt

  • Esivalidoi korruptiota/salasanoja varten välttääksesi osittaisia yhdistämisiä.
  • Valitse KeepSourceFormatting kun brändin uskollisuus on tärkeää; valitse UseDestinationStyles yhtenäisen ulkonäön vuoksi.
  • Lisää osioerotus ennen jokaista lisäystä suojellaksesi sivun asetuksia.
  • Yhdistä ylä- ja alatunnisteet lisäyksen jälkeen, jos haluat yhden yritysmallin.
  • Päivitä kentät & sisällysluettelo viimeisenä askeleena.
  • Erittäin suurille eräille jaa ne ryhmiin ja yhdistä ryhmät pitääksesi muistin vakaana.

FAQ

  1. Voinko pakottaa jokaisen lähteen alkamaan uudelle sivulle? Kyllä. Lisää osio- tai sivunvaihto ennen jokaista AppendDocument kutsu tai asetus SectionStart kohteeseen NewPage.
  2. Kuinka pidän kohdestyylit tallessa tuonnin aikana? Käytä ImportFormatMode.UseDestinationStyles kohteessa AppendDocument.
  3. Päivittävätkö sivunumerot ja sisällysluettelo automaattisesti? Kutsu UpdateFields() (ja UpdatePageLayout() tarkkaa sivutusta varten) kaikkien lisäysten jälkeen.
  4. Tarvitaanko Officea? Ei. Aspose.Words on itsenäinen kirjasto.
 Suomi