Gộp tài liệu Aspose.Words cho .NET

Aspose.Words Document Merger for .NET cho phép bạn lập trình một số tài liệu tương thích với Word vào một bản phát hành duy nhất trong khi duy trì định dạng, phong cách, bố trí trang, tiêu đề / chân, và các trường.

Nó hoạt động trên Windows, Linux và macOS. Không cần Microsoft Office.

Cài đặt & Setup

  • Cài đặt gói NuGet Aspose.Words.
  • Ứng dụng giấy phép đo lường tại ứng dụng khởi động để tránh đánh giá. Xem Metered Licensing .
  • Kiểm tra các yêu cầu khung trong Quản lý cài đặt .

Hỗ trợ nhập (được chọn): DOC, DOCX, DOTX/DOTM, RTF, ODT, HTML/MHTML, PDF, TXT, WordML.Các kết quả được hỗ trợ: DOCX, DOC, PDF, HTML (tính / dòng), MHTML, ODT, RTF, hình ảnh, EPUB, XPS, và nhiều hơn nữa.

Khởi động nhanh: Thêm nhiều tài liệu

using Aspose.Words;

// Destination (master) document
var master = new Document();
var builder = new DocumentBuilder(master);

// Start on a clean page
builder.InsertBreak(BreakType.SectionBreakNewPage);

// Append each source with chosen import mode
ImportFormatMode mode = ImportFormatMode.KeepSourceFormatting; // or UseDestinationStyles

foreach (string path in new [] { "intro.docx", "spec.docx", "annex.rtf" })
{
    var src = new Document(path);
    master.AppendDocument(src, mode);
    // Optional: force each source to start on a new page
    builder.MoveToDocumentEnd();
    builder.InsertBreak(BreakType.SectionBreakNewPage);
}

// Refresh fields (page numbers, TOC, cross‑refs)
master.UpdateFields();
master.Save("MergedOutput.pdf");

Định dạng nhập khẩu

  • KeepSourceFormatting – bảo tồn các phong cách của mỗi nguồn và định dạng trực tiếp (tốt nhất cho các nhãn hiệu).
  • UseDestinationStyles – bản đồ tên phong cách tương tự với định nghĩa của điểm đến cho một cái nhìn đồng nhất.

Phần kiểm soát & Page Layout

Bắt đầu mỗi tài liệu bằng ** Trang mới ** , ** Continuous ** hoặc ** Even/Odd Page**:

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

Unify margins/page size bằng cách sao chép PageSetup Từ một phần template:

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

Headers, Footers và Watermarks

Giữ đầu nguồn / chân, hoặc thay thế chúng bằng một thiết lập chủ sau khi hợp nhất:

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

Các lĩnh vực, Cross-References và TOC

Sau khi kết hợp, các trường cập nhật để số trang, tham chiếu, và Table of Contents phù hợp với bố trí mới:

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

Nếu bạn duy trì một TOC chủ duy nhất, hãy nhập nó một lần và để nó tự động khôi phục lại:

var b = new DocumentBuilder(master);
b.MoveToDocumentStart();
b.InsertTableOfContents("TOC \o \h \z \u");  // classic TOC switch set
master.UpdateFields();

Password-Protected Inputs & Secure Output (Tập khẩu được bảo vệ và xuất khẩu an toàn

using Aspose.Words.Loading;

var load = new LoadOptions { Password = "secret" };
var protectedDoc = new Document("protected.docx", load);
master.AppendDocument(protectedDoc, ImportFormatMode.KeepSourceFormatting);

// Save encrypted PDF
using Aspose.Words.Saving;
var pdf = new PdfSaveOptions
{
    EncryptionDetails = new PdfEncryptionDetails("openPwd", "ownerPwd",
        PdfEncryptionAlgorithm.RC4_128)
    { Permissions = PdfPermissions.DisallowAll }
};
master.Save("MergedEncrypted.pdf", pdf);

Stream-First / Merges khối lượng cao

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.Pdf);
    output.Position = 0;
    // return/output stream
}

Chế độ hiệu suất

  • Batch appends trong bộ nhớ; gọi UpdateFields() Một lần cuối cùng.
  • Thích UseDestinationStyles khi bạn muốn phong cách liên tục trên hàng chục bước.
  • Dispose Document trường hợp sớm trong các ống dài để giảm ký ức đỉnh.

Quản lý các định dạng hỗn hợp (HTML, PDF, TXT)

  • HTML/MHTML: nhập khẩu với các phong cách và hình ảnh (được liên kết hoặc tích hợp).
  • PDF : các trang được nhập như nội dung tái lưu trữ khi có thể; các bố trí phức tạp được giữ trong quá trình xuất sang định dạng (ví dụ, PDF).
  • TXT : được bổ sung như các đoạn thẳng; áp dụng một phong cách cơ bản sau khi nhập khẩu để tuân thủ.

Thực hành tốt nhất

  • Thuyết minh trước cho tham nhũng / mật khẩu để tránh hỗn hợp một phần.
  • Chọn **KeepSourceFormatting ** khi thương hiệu trung thành quan trọng; chọn UseDestinationStyles để trông giống nhau.
  • Nhập một section break trước mỗi ứng dụng để bảo vệ cài đặt trang.
  • Unify headers/footers sau khi mở nếu bạn muốn một mẫu công ty duy nhất.
  • Cập nhật các trường & TOC như bước cuối cùng.
  • Đối với các trận đấu rất lớn, chia thành nhóm và kết hợp các nhóm để giữ bộ nhớ ổn định.

FAQ

**Tôi có thể buộc mọi nguồn để bắt đầu trên một trang mới không?**Nhập một phần hoặc page break trước mỗi AppendDocument Call hoặc Set SectionStart để NewPage.

**Làm thế nào để tôi giữ các phong cách đích trong khi nhập khẩu?**Sử dụng ImportFormatMode.UseDestinationStyles trong AppendDocument.

**Những số trang và TOC sẽ được cập nhật tự động?**Lời gọi UpdateFields() (và UpdatePageLayout() cho trang chính xác) sau khi tất cả các appends.

**Tôi có thể kết hợp nhập mã hóa và tạo ra kết quả mã hoá không?**Có. cung cấp LoadOptions.Password Đối với inputs và sử dụng PdfSaveOptions.EncryptionDetails (hoặc OoxmlSaveOptions.Password) Đối với sản xuất.

**Văn phòng có cần thiết không?**No. Aspose.Words là một thư viện độc lập.

 Tiếng Việt