Aspose.Words 문서 병합기 for .NET
Aspose.Words Document Merger for .NET 은 프로그래밍을 통해 단일 출력에 Word-Compatible 문서의 모든 수를 추가할 수 있으며, 포맷, 스타일, 페이지 레이아웃, 헤드/포터 및 필드를 보존 할 수 있습니다.일반적인 사용은 보고서를 모으거나 계약 전시회를 묶거나 아카이브를 위해 생성된 콘텐츠를 집합합니다.
윈도우, 리눅스 및 macOS에서 잘 작동합니다.Microsoft Office가 필요하지 않습니다.
설치 및 설정
- NuGet 패키지를 설치합니다
Aspose.Words
. - 응용 프로그램 스타트업에서 측정 된 라이센스를 적용하여 평가 물표를 피하십시오. Metered Licensing 참조/).
- 프레임 워크 요구 사항을 확인하십시오 설치 가이드 .
지원되는 입력 (선택): DOC, DOCX, DOTX/DOTM, RTF, ODT, HTML/MHTML, PDF, TXT, WordML.지원되는 출력: DOCX, DOC, PDF, HTML (지정/흐름), MHTML, ODT, RTF, 이미지, EPUB, XPS 등.
빠른 시작 : 여러 문서를 추가
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");
포맷 모드 수입
- KeepSourceFormatting - 각 출처의 스타일과 직접 포맷을 보존합니다 (표시된 삽입에 이상적입니다).
- UseDestinationStyles - 유니폼의 모습을 위해 목적지의 정의와 동일한 스타일 이름을 지도합니다.
컨트롤 섹션 & 페이지 레이아웃
각 문서를 시작하십시오 새 페이지 ** , 지속적인 ** 또는또는 추가 페이지:
var sect = master.LastSection;
sect.PageSetup.SectionStart = SectionStart.NewPage; // Continuous, EvenPage, OddPage
마진/페이지 크기를 복사함으로써 통합 PageSetup
템플릿 섹션에서:
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;
}
머리, 발자국 및 물 표지판
소스 헤드 / 피트를 유지하거나 합병 후 마스터 세트로 대체하십시오:
// 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);
}
필드, 크로스 참조 및 TOC
합병 후, 업데이트 필드는 페이지 번호, 참조 및 ** 테이블 콘텐츠** 새 배열과 일치합니다:
master.UpdateFields();
master.UpdatePageLayout(); // ensures accurate page count
master.UpdateTableLayout(); // improves complex table pagination
만약 당신이 단일 마스터 TOC를 유지한다면, 그것을 한 번 삽입하고 자동으로 복구하십시오:
var b = new DocumentBuilder(master);
b.MoveToDocumentStart();
b.InsertTableOfContents("TOC \o \h \z \u"); // classic TOC switch set
master.UpdateFields();
암호 보호 입력 및 안전한 출력
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);
흐름-첫 번째 / 높은 볼륨 Merges
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
}
성과 팁
- Batch는 메모리에 붙어있다; 전화
UpdateFields()
한 번 끝에. - 일관된 스타일링을 원할 때 UseDestinationStyles 를 선호합니다.
- Dispose
Document
긴 튜브에서 일찍 사례를 사용하여 피크 메모리를 줄일 수 있습니다.
혼합 형식 처리 (HTML, PDF, TXT)
- HTML/MHTML : 스타일과 이미지와 함께 수입 (링크 또는 삽입).
- PDF : 페이지는 가능한 경우 다시 흐르는 콘텐츠로 가져옵니다; 복잡한 레이아웃은 고정 형식으로 출력하는 동안 보존됩니다 (예 : PDF).
- TXT : 평평한 단락으로 첨부; 일관성을 위해 수입 후 기본 스타일을 적용합니다.
모범 사례
- 부패 / 암호에 대한 사전 유효성 부분적 합병을 피하기 위해.
- 브랜드 충성도가 중요할 때 **KeepSourceFormatting ** 을 선택하십시오; 단일 모양을 위해 UseDestinationStyles 를 선택합니다.
- 페이지 설정을 보호하기 위해 각 애플리케이션 전에 ** 섹션 브레이크** 를 입력합니다.
- 단일 기업 템플릿을 원하는 경우 녹음 후 헤드/포터를 통합하십시오.
- 최종 단계로 업데이트 필드 & TOC.
- 매우 큰 배치를 위해 그룹으로 나누고 기억을 안정적으로 유지하기 위해 집단을 결합하십시오.
FAQ
**모든 출처를 새 페이지에서 시작하도록 강요할 수 있습니까?**예. 각 페이지 전에 섹션 또는 페이지 붕괴를 입력합니다 AppendDocument
전화 또는 설정 SectionStart
에 대 한 NewPage
.
**내가 수입하는 동안 목적지 스타일을 어떻게 유지합니까?**사용하기 ImportFormatMode.UseDestinationStyles
안에서 AppendDocument
.
**페이지 번호 및 TOC 업데이트를 자동으로 원하십니까?**전화 UpdateFields()
(그리고 UpdatePageLayout()
정확한 페이지를 위해) 모든 첨부 후.
**암호화된 입력을 결합하고 암포화 된 출력을 생산할 수 있습니까?**예, 제공하기 LoadOptions.Password
입력 및 사용에 대 한 PdfSaveOptions.EncryptionDetails
(또는 OoxmlSaveOptions.Password
) 생산을 위한 것.
**사무실이 필요합니까?**No. Aspose.Words는 독립적인 도서관입니다.