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.