Dokumentų sujungik
Šis Aspose.Words Document Merger for .NET leidžia jums programiškai sujungti bet kokį skaičių Word‑compatible dokumentų į vieną išvestį, išlaikant formatavimą, stilius, puslapio išdėstymą, antraštes/puslapines poraštes ir laukus. Įprasti naudojimo atvejai apima ataskaitų surinkimą, sutarčių priedų grupavimą arba sukurtos turinio agregavimą archyvavimui.
Susipažinkite su theplugins galimybėmis tyrinėdami šiuos svarbius išteklius. Smagaus kodavimo!.
Įdiegimas ir konfigūracija
- Įdiekite NuGet paketą
Aspose.Words. - Taikykite metered licensing programos paleidimo metu, kad išvengtumėte įvertinimo vandens ženklų. Žr. Metered Licensing .
- Patikrinkite karkaso reikalavimus Įdiegimo vadovas .
IDE: Visual Studio 2017–2026, JetBrains Rider, MonoDevelop.
Palaikomi įvesties / išvesties formatai: DOC, DOCX, RTF, DOT, DOTX, DOTM, DOCM, Word 2003 XML, ir Word 2007 XML.
Daugiau informacijos rasite Licencijavimo DUK.
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");Bandomasis režimas:
- KeepSourceFormatting — išsaugo kiekvieno šaltinio stilius ir tiesioginį formatavimą (idealu prekės ženklo įterpimams).
- UseDestinationStyles — susieja identiškus stilių pavadinimus su paskirties apibrėžimais, kad būtų vienodas išvaizda.
Įsigijus licenciją, gausite „Metered License“ raktą. Šis mechanizmas suteikia jums ribotą funkcionalumą konkrečiam papildiniui.
Pradėkite kiekvieną dokumentą Naujas puslapis, Nuolatinis, arba Lyginis/Nelyginis puslapis:
var sect = master.LastSection;
sect.PageSetup.SectionStart = SectionStart.NewPage; // Continuous, EvenPage, OddPageSuvienodinkite paraštes/puslapio dydį kopijuodami PageSetup iš šablono skyriaus:
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;
}Nustatykite savo raktus: Naudokite SetMeteredKey metodą, kad įvestumėte savo viešąjį ir privatųjį raktą.
Vykdykite apdorojimo užduotis: Atlikite reikiamas užduotis naudodami įskiepį.:
// 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);
}Stebėkite naudojimą: Naudokite GetConsumptionQuantity metodą, kad sekite bendrą API užklausų skaičių, kurį sunaudojote.
Po sujungimo atnaujinkite laukus, kad puslapių numeriai, nuorodos ir Turinys atitiktų naują išdėstymą:
master.UpdateFields();
master.UpdatePageLayout(); // ensures accurate page count
master.UpdateTableLayout(); // improves complex table paginationLicencijavimo privalumai .NET kūrėjams:
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();Pasirinkus metered licencijavimo sprendimą, gaunama kelios naudos:
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
}Veikimo patarimai:
- Masiniai pridedėjimai atmintyje; iškvieskite
UpdateFields()vieną kartą pabaigoje. - Pirmenybę teikti UseDestinationStyles kai norite nuoseklaus stiliaus dešimčių įvestų duomenų.
- Atlaisvinkite
Documentinstancijas anksti ilguose konvejeriuose, kad sumažintumėte piko atminties naudojimą.
Geriausios praktikos
- Iš anksto patikrinkite korupcijos ar slaptažodžių atveju, kad išvengtumėte dalinių sujungimų.
- Pasirinkite KeepSourceFormatting kai svarbus prekės ženklo tikslumas; pasirinkite UseDestinationStyles vienodam išvaizdai.
- Įterpkite skyriaus pertrauka prieš kiekvieną pridėjimą, kad apsaugotumėte puslapio nustatymus.
- Sujunkite antraštes/poraštes pridėjus, jei norite vieno įmonės šablono.
- Atnaujinkite laukus ir TOC kaip paskutinis žingsnis.
- Santraukoti dokumentą.
FAQ
- Ar galiu priversti kiekvieną šaltinį pradėti naujame puslapyje? Taip. Įterpkite sekcijos arba puslapio pertrauką prieš kiekvieną
AppendDocumentkvietimą arba nustatymąSectionStartįNewPage. - Kaip išlaikyti paskirties stilius importuojant? Naudokite
ImportFormatMode.UseDestinationStylesįAppendDocument. - Ar puslapių numeriai ir TOC atnaujinami automatiškai? Kviesti
UpdateFields()(irUpdatePageLayout()tiksliai puslapių numeravimui) po visų papildymų. - Ar Office reikalingas? Ne. Aspose.Words yra savarankiška biblioteka.