.NET에서 필드 작업 방법

.NET에서 필드 작업 방법

이 가이드는 .NET용 Aspose.Words FOSS에서 Word 필드 — DATE, IF, REF, DATABASE 및 수십 가지 기타 필드 — 를 작업하는 방법을 보여줍니다: 필드를 삽입하고 결과를 읽기, 프로그래밍 방식 편집 후 필드 업데이트, 업데이트 동작 구성, 콜백을 통한 업데이트 추적, 그리고 필드 변환 또는 제거. .NET용 Aspose.Words FOSS는 NuGet를 통해 또는 소스에서 빌드하여 이용할 수 있습니다.

단계별 가이드

1단계: 라이브러리 가져오기

레포지토리를 복제하고 빌드합니다 Aspose.Words.sln Release 구성으로 빌드한 뒤, 프로젝트 참조를 추가합니다 Aspose.Words.csproj 자신의 .NET 프로젝트에서, 설치 가이드에 설명된 대로 설치 가이드. 추가 using Aspose.Words; and using Aspose.Words.Fields; 필드와 작업하는 모든 파일의 맨 위에.


2단계: 필드 삽입 및 결과 읽기

DocumentBuilder.InsertField()은 커서 위치에 새 필드를 삽입합니다. 이 메서드는 필드 결과를 즉시 업데이트하거나 나중에 업데이트하도록 남겨두는 오버로드를 제공합니다. 모든 필드는 세 개의 마커 노드 — FieldStart, Separator, FieldEnd — 로 구성된 Field 인스턴스로, Field.Start / Field.Separator / Field.End 로 노출됩니다. Field.Type은 해당 필드가 나타내는 FieldType을 식별하고, Field.Result과 Field.DisplayResult은 마지막으로 계산된 값을 보관하며, Field.Format는 코드에 연결된 모든 포맷 스위치를 보관하고, Field.GetFieldCode()은 원시 필드 코드 텍스트를 반환합니다.


단계 3: 프로그래밍 방식 편집 후 필드 업데이트

Aspose.Words FOSS는 문서가 로드되거나 저장될 때 필드를 다시 계산하지 않습니다. 필드 결과가 변경되어야 하는 편집 후에는 Range.UpdateFields()를 호출하여 해당 범위의 모든 필드를 다시 계산합니다 — 전체 문서의 경우 Document.Range.UpdateFields()을 사용하고 — 단일 필드의 경우 Field.Update()를 사용합니다. Range.UnlinkFields()은 한 번의 호출로 범위 내 모든 필드를 정적 텍스트로 변환하고, Range.NormalizeFieldTypes()는 수동 편집 후 필드의 저장된 유형 코드를 실제 필드 코드와 맞춥니다.


단계 4: FieldOptions을(를) 사용하여 필드 업데이트 동작 구성

Document.FieldOptions (a FieldOptions 인스턴스)는 업데이트 중 전체 문서의 필드 동작을 제어합니다: CurrentUser (a UserInformation 인스턴스 — Name, Initials, Address)는 저자 및 사용자 이름 관련 필드가 읽는 식별자를 제공하고, DefaultDocumentAuthor은 저자 관련 결과를 시드하며, LegacyNumberFormat / UseInvariantCultureNumberFormat / PreProcessCulture / FieldUpdateCultureSource은 숫자 및 날짜 형식을 제어합니다. 무인 파이프라인의 경우, FieldOptions.UserPromptRespondent (an IFieldUserPromptRespondent)를 할당하여 ASK와 FILLIN와 같은 프롬프트 기반 필드가 대화형 입력을 기다리며 차단되지 않도록 하고, IFieldDatabaseProvider을 사용자 정의로 FieldOptions.FieldDatabaseProvider에 할당하여 실제 데이터베이스 연결 대신 자체 데이터 소스에서 DATABASE 필드의 행을 제공하도록 합니다.


단계 5: 콜백으로 필드 업데이트 추적

IFieldUpdatingCallback (FieldUpdating 및 FieldUpdated)을 구현하고 이를 FieldOptions에 할당하여 각 필드가 다시 계산되기 전후에 코드를 즉시 실행합니다 — 배치 작업에서 어떤 필드가 정확히 변경되었는지 감사할 때 유용합니다. 대형 문서 전체에 대한 진행 상황 보고를 위해서는 IFieldUpdatingProgressCallback (Notify)를 구현합니다. 이 구현은 FieldUpdatingProgressArgs를 받아 TotalFieldsCount, UpdatedFieldsCount, UpdateCompleted을 노출합니다.


단계 6: 필드 변환 또는 제거

Field.Unlink()은 필드를 마지막으로 계산된 결과로 일반 정적 텍스트로 교체하여 기본 필드 코드를 버립니다 — 값이 문서에 영구적으로 고정되길 원할 때 사용합니다. Field.Remove()은 FieldStart, Separator, FieldEnd 노드를 필드 코드와 결과와 함께 삭제하여 필드를 완전히 제거합니다. 필드 구조의 일부만 수동으로 제거하면 문서 트리가 일관성을 잃을 수 있으므로, 마커 노드를 직접 삭제하기보다 이 두 방법을 선호하십시오.

일반적인 문제 및 해결책

문서를 편집한 후 필드의 표시 결과가 오래된 상태가 됩니다. Aspose.Words FOSS는 로드 또는 저장 시 필드를 자동으로 업데이트하지 않습니다. 호출 Range.UpdateFields() or Field.Update() 편집 후에 명시적으로.

PAGE, NUMPAGES, 또는 목차 페이지 번호는 항상 표시됩니다 0. 페이지 레이아웃/렌더링은 이 판에 포함되지 않으므로, 페이지 매김에 따라 결과가 달라지는 필드는 자리표시자로 평가됩니다 0. 이 동작은 이 판에서 예상되는 동작입니다.

배치 필드 업데이트가 중단된 것으로 보입니다. 프롬프트 기반 필드 (ASK, FILLIN)가 없습니다 IFieldUserPromptRespondent 할당되었습니다. 할당하십시오 FieldOptions.UserPromptRespondent, 또는 설정 DefaultResponse 개별 필드 인스턴스에 대해.

그 DATABASE 필드가 행을 생성하지 않습니다. 없음 IFieldDatabaseProvider 에 할당됩니다 FieldOptions.FieldDatabaseProvider. 인터페이스를 구현하고 호출하기 전에 할당하십시오 Range.UpdateFields().

자주 묻는 질문

Aspose.Words FOSS가 모든 Word 필드 유형을 평가합니까?

Field 객체 모델은 모든 FieldType 값을 나타내며 대부분을 업데이트하지만, 페이지 레이아웃에 따라 결과가 달라지는 필드—예를 들어 PAGE와 NUMPAGES—는 이 버전에는 레이아웃/렌더링 엔진이 포함되지 않으므로 자리표시자 0로 평가됩니다.

프로그래밍 방식으로 편집한 후 필드를 다시 평가하려면 어떻게 해야 하나요?

편집된 내용을 포함하는 범위에 대해 Range.UpdateFields()를 호출하거나, 전체 문서에 대해서는 Document.Range.UpdateFields()를 호출하십시오.

필드를 일반적인 정적 텍스트로 변환할 수 있나요?

예 — Field.Unlink()는 필드를 마지막으로 계산된 결과를 일반 텍스트로 교체합니다.

필드와 그 결과를 포함하여 완전히 제거하려면 어떻게 해야 하나요?

Field.Remove()를 호출하십시오. 이 메서드는 필드의 코드와 결과 내용을 포함하여 FieldStart, Separator, FieldEnd 노드를 함께 삭제합니다.

맞춤 데이터를 DATABASE 필드에 제공하려면 어떻게 해야 하나요?

IFieldDatabaseProvider을 구현하고 Document.FieldOptions.FieldDatabaseProvider에 할당합니다. 그 GetQueryResult() 구현은 FieldDatabaseDataRow 인스턴스로부터 구축된 FieldDatabaseDataTable을 반환합니다.

참조

 한국어