.NET에서 문서 작업하기
이 가이드는 Aspose.Words FOSS의 .NET 객체 모델을 사용하여 빈 문서를 만들고, 기존 문서를 안전하게 로드하며, 섹션/본문 구조를 탐색하고, 문서를 결합하고, 편집 제한을 적용하는 방법을 보여줍니다. Aspose.Words FOSS는 .NET을 통해 또는 소스에서 빌드하여 사용할 수 있습니다.
단계별 가이드
1단계: 라이브러리 가져오기
저장소를 복제하고 빌드합니다 Aspose.Words.sln Release 구성으로 빌드한 후, 다음에 프로젝트 참조를 추가합니다 Aspose.Words.csproj 귀하의 .NET 프로젝트에서. 전체 복제 및 빌드 명령은 설치 가이드. 참조가 완료되면, 다음을 추가합니다 using Aspose.Words; 문서와 작업하는 모든 파일의 상단에.
2단계: 문서 만들기 또는 로드하기
빈 문서를 만들려면 new Document()를 호출하고, 기존 문서를 열려면 파일 경로나 Stream을 Document(fileName)/Document(stream) 생성자에 전달합니다. LoadOptions 인수를 받는 오버로드를 사용하면 암호화된 파일에 대한 비밀번호를 제공할 수 있습니다. 아직 신뢰하지 않는 형식의 파일을 로드하기 전에 FileFormatUtil.DetectFileFormat(fileName)를 호출하십시오 — 이 메서드는 감지된 LoadFormat와 파일이 IsEncrypted, HasDigitalSignature, 또는 HasMacros인지 여부를 보고하는 FileFormatInfo을 반환하므로, Document이 파싱을 시도하기 전에 예상치 못한 입력을 거부할 수 있습니다.
3단계: DocumentBuilder으로 콘텐츠 작성
DocumentBuilder은(는) 콘텐츠를 삽입하면서 트리를 따라 이동하는 커서를 가진 Document을(를) 감쌉니다. Write(text)와 Writeln(text)은 커서 위치에 텍스트를 삽입하고, InsertParagraph()는 새 단락을 시작합니다. 빌더의 Font, ParagraphFormat, ListFormat, PageSetup 속성에 설정된 서식은 이후에 작성하는 모든 내용에 적용됩니다. 커서는 MoveToDocumentStart(), MoveToDocumentEnd(), MoveToSection(sectionIndex), MoveToBookmark(bookmarkName), MoveToParagraph(paragraphIndex, characterIndex)으로 재배치할 수 있으며, CurrentNode / CurrentParagraph / CurrentSection을(를) 읽어 빌더의 현재 위치를 확인합니다.
4단계: 섹션 및 본문 구조 검사
A Document은(는) Document.Sections를 통해 SectionCollection을(를) 노출합니다(또는 FirstSection / LastSection 포함). 각 Section는 정확히 하나의 Body를 가지고 있으며, 그 주요 콘텐츠는 Body.Paragraphs(일종의 ParagraphCollection)와 Body.Tables를 통해 접근할 수 있습니다. 노드를 직접 탐색하지 않고 텍스트를 읽거나 검색하려면 Document, Section, Paragraph 및 기타 노드에서 사용할 수 있는 Range을(를) 사용하십시오 — Range.Text는 순수 텍스트를 반환하고, Range.Replace(pattern, replacement)는 해당 범위에만 적용되는 찾기·바꾸기를 수행합니다.
5단계: 두 문서 결합
전체 문서를 복사하려면 Document.Clone()을(를) 호출하십시오. 하나의 Document 인스턴스에서 특정 콘텐츠를 다른 인스턴스로 가져오려면 대상 문서에서 ImportNode(srcNode, isImportChildren)를 호출하거나, 소스 문서의 모든 섹션을 현재 문서 끝에 추가하려면 Document.AppendDocument(srcDoc, importFormatMode)을(를) 호출하십시오. DocumentBuilder.InsertDocument(srcDoc, importFormatMode)는 동일한 작업을 수행하지만 끝이 아니라 빌더의 커서 위치에 삽입합니다. 세 경우 모두 ImportFormatMode 값을 — KeepSourceFormatting, UseDestinationStyles, KeepDifferentStyles — 신중히 선택해야 합니다. 이는 두 문서가 충돌할 때 어느 문서의 스타일이 우선할지를 결정하기 때문입니다.
6단계: 편집 제한 적용
Document.Protect(type, password)을(를) ProtectionType 값 — ReadOnly, AllowOnlyComments, AllowOnlyRevisions, AllowOnlyFormFields — 과 함께 호출하여 문서에 대해 Word가 허용하는 편집을 제한합니다. Unprotect()(일치하는 비밀번호 유무에 관계없이)는 제한을 해제합니다. 이는 Word 내부에서의 편집에만 영향을 미치며 저장된 파일을 암호화하지는 않습니다. 파일을 열 때 비밀번호가 필요하도록 하려면 저장 시 OoxmlSaveOptions.Password을(를) 설정하십시오.
일반적인 문제 및 해결 방법
Document(fileName) Word에서는 정상적으로 열리는 파일에 대해 예외를 발생시킵니다. 파일 형식이 이 버전 로더에서 지원되지 않습니다. Call FileFormatUtil.DetectFileFormat(fileName) 먼저 확인하고 반환된 LoadFormat 로드를 시도하기 전에.
문서 간에 복사된 내용이 잘못된 글꼴이나 스타일을 적용합니다. 그 ImportFormatMode 전달된 AppendDocument or InsertDocument 예상과 일치하지 않습니다. 전달하세요 KeepSourceFormatting or UseDestinationStyles 기본값에 의존하기보다 명시적으로.
Unprotect() 효과가 없는 것으로 보입니다. 문서가 비밀번호로 보호되지 않았거나 (호출 Unprotect() 인수가 없이 호출되었거나, 제공된 비밀번호가 일치하지 않습니다 Protect() 와 함께 호출된 경우.
다음에 의해 적용된 서식 DocumentBuilder 예상한 위치에 표시되지 않습니다. 빌더 수준 서식 (Font, ParagraphFormat) 은(는) 작성된 콘텐츠에만 적용됩니다. after 설정된 경우. 커서를 이동하고 호출하기 전에 서식을 설정하십시오. Write/Writeln, 이후는 안 됩니다.
자주 묻는 질문
새로운 빈 Word 문서는 어떻게 만들나요?
new Document()를 호출하세요. 즉시 콘텐츠 삽입을 시작하려면 DocumentBuilder로 감싸세요.
Document.Clone()와 ImportNode의 차이점은 무엇인가요?
Clone()는 전체 문서를 새로운 Document 인스턴스로 복사합니다. ImportNode(srcNode, isImportChildren)는 하나의 노드와 선택적으로 그 자식들을 한 문서 트리에서 다른 문서 트리로 가져오며, 이는 전체 문서가 아니라 특정 콘텐츠를 결합할 때 사용하는 기능입니다.
파일을 로드하기 전에 형식을 안전하게 확인하려면 어떻게 해야 하나요?
FileFormatUtil.DetectFileFormat(fileName)를 호출하세요(또는 Stream 오버로드). 파일을 Document에 전달하기 전에 반환된 FileFormatInfo의 LoadFormat, IsEncrypted, HasDigitalSignature, HasMacros 속성을 확인하세요.
문서 본문 안의 단락만 읽으려면 어떻게 해야 하나요?
섹션의 Body에서 Body.Paragraphs 컬렉션을 사용하거나, 다른 노드 유형의 경우 Body.GetChildNodes(nodeType, isDeep)를 사용하세요.
Document.Protect가 저장된 파일을 암호화합니까?
아니요 — 파일이 열릴 때 Word가 적용하는 편집 제한입니다. 파일 자체를 열 때 비밀번호를 요구하려면 OoxmlSaveOptions.Password을(를) Document.Save 호출 시 설정하십시오.