.NET에서 전환 필드 작업하는 방법
.NET에서 전환 필드 작업 방법
Aspose.Words FOSS for .NET는 전용 클래스들을 통해 오래된 Word 필드 유형 그룹—바코드 필드와 일부 pre-Open-XML 호환성 필드—을 나타냅니다 the Aspose.Words.Fields 네임스페이스, 비공식적으로는 transitional 여기 필드들. 이 가이드는 이를 찾고, 읽고, 구성하는 방법을 보여줍니다. 모든 전환 필드 클래스는 기본 Field 형식, 일반적인 Field 객체가 노출되는 Document.Range.Fields.
단계별 가이드
Step 1: 문서에서 전환 필드 찾기
Document.Range.Fields를 열거하고 각 필드의 Type ( FieldType 값) 을 관련 상수 — FieldBarcode, FieldDisplayBarcode, FieldMergeBarcode, FieldBidiOutline, FieldEQ, FieldFootnoteRef, 또는 FieldInfo — 와 비교한 다음, 일반 Field를 해당 클래스에 캐스팅하여 특정 속성에 접근합니다. 캐스팅하기 전에 항상 Type를 확인하세요: 잘못된 필드 클래스로 캐스팅하면 InvalidCastException가 발생합니다.
Step 2: DISPLAYBARCODE 또는 MERGEBARCODE 필드 구성
FieldDisplayBarcode(DISPLAYBARCODE 필드)와 FieldMergeBarcode(MERGEBARCODE 필드, 메일 병합을 위해 IMergeFieldSurrogate도 구현함)은 동일한 바코드 구성 속성 집합을 공유합니다: BarcodeType, BarcodeValue, SymbolHeight, SymbolRotation, ScalingFactor, ForegroundColor, BackgroundColor, PosCodeStyle, CaseCodeStyle, ErrorCorrectionLevel, DisplayText, AddStartStopChar, 및 FixCheckDigit. 필드 인스턴스에 이를 설정한 다음 Update()을 호출하여 문서를 저장하기 전에 Result가 새 구성을 반영하도록 하세요.
단계 3: 레거시 BARCODE(우편) 필드 데이터 읽기
FieldBarcode은 이전 BARCODE 필드를 구현하며, 이는 일반 목적 바코드가 아니라 미국 우편 바코드(POSTNET) 필드입니다 — Step 2에서의 BarcodeType/BarcodeValue 속성을 공유하지 않습니다. 대신 PostalAddress(바코드가 인코딩하는 주소), FacingIdentificationMark, IsUSPostalAddress, IsBookmark을 노출합니다. 이러한 속성을 읽기 전에 Field.Type을 FieldType.FieldBarcode와 특히 비교하십시오. DISPLAYBARCODE 또는 MERGEBARCODE 필드를 FieldBarcode로 캐스팅하면 기대하는 속성이 노출되지 않기 때문입니다.
단계 4: 사용자 지정 생성기로 바코드 이미지 렌더링
이 FOSS 에디션은 바코드 필드 데이터를 포함하지만 바코드 렌더링 엔진은 포함하지 않습니다. BarcodeParameters은 바코드 필드 계열 중 어느 쪽의 설정—Step 2의 DISPLAYBARCODE/MERGEBARCODE 속성 및 Step 3의 우편 속성—을 하나의 객체로 통합하여 렌더러에 전달하는 패스스루 컨테이너입니다. 실제 이미지 렌더링을 제공하려면 IBarcodeGenerator을 구현하고, GetBarcodeImage(parameters)와 레거시 GetOldBarcodeImage(parameters)를 노출하십시오; 구현이 제공되지 않으면 바코드 필드는 구성 데이터만 보유합니다.
단계 5: 레거시 호환성 필드 작업
레거시 .docx 파일에서 아직도 발견되는 오래된 필드 코드를 다루는 네 개의 다른 클래스가 있습니다. FieldBidiOutline은 오른쪽에서 왼쪽으로 개요 번호 매기기를 위한 BIDIOUTLINE 필드를 구현하며, 공통 Field 표면 외에는 속성을 노출하지 않습니다. FieldEQ는 EQ 방정식 필드를 구현하고 추가로 AsOfficeMath()을 노출하여 내용을 OfficeMath 객체로 변환합니다 — 이는 필드가 실제로 방정식을 인코딩한 경우에만 성공합니다. FieldFootnoteRef은 각주 또는 미주 표식을 교차 참조하는 FOOTNOTEREF 필드를 구현하며, 공통 Field 표면 외에는 속성을 노출하지 않습니다. FieldInfo은 INFO 필드를 구현하여, InfoType 및 NewValue 속성을 통해 문서 요약 정보 속성을 읽고 씁니다.
단계 6: 전환 필드 값 업데이트 또는 고정
모든 전환 필드 클래스는 GetFieldCode()(필드의 기본 코드 텍스트), Update()(결과를 다시 평가함), Unlink()(필드를 마지막으로 계산된 결과를 정적 텍스트로 교체함), Remove()(필드를 삭제함)를 상속합니다. 필드 구성을 변경한 후에는 Update()를 호출하여 Result가 변경을 반영하도록 하고, 필드의 현재 값을 재계산 가능하게 두지 않고 고정시켜야 할 경우에는 Unlink()을 사용하십시오.
일반적인 문제 및 해결 방법
InvalidCastException 캐스팅할 때 Field 전환 필드 클래스로. 잘못된 FieldType 가 가정되었습니다. 확인 Field.Type 대응되는 항목과 비교 FieldType 캐스팅하기 전에 상수.
A DISPLAYBARCODE/MERGEBARCODE 캐스팅 후 필드 속성이 누락되었습니다. 필드가 다음으로 캐스팅되었습니다 FieldBarcode 대신 FieldDisplayBarcode/FieldMergeBarcode (또는 그 반대) — 이 클래스들은 모두 세 가지가 바코드 데이터를 나타내지만 서로 다른 속성 집합을 노출합니다. 확인하십시오 Field.Type 캐스팅하기 전.
바코드 필드는 데이터를 포함하지만 이미지가 렌더링되지 않습니다. 아니오 IBarcodeGenerator 구현이 제공되었습니다. 구현하는 사용자 정의 생성기를 제공하십시오. GetBarcodeImage(parameters) — 이 버전은 내장된 바코드 렌더링 엔진을 제공하지 않습니다.
FieldEQ.AsOfficeMath() 예상치 못한 결과를 반환합니다. 필드에 유효한 수식 명령이 포함되어 있지 않습니다. 필드의 GetFieldCode() 변환을 시도하기 전에 출력을 확인하십시오.
FieldInfo’s 값은 설정 후 업데이트되지 않습니다 NewValue. 필드가 변경 후 새로 고쳐지지 않았습니다. Call Update() 수정 후 필드에 NewValue.
자주 묻는 질문
“transitional"은 이러한 필드 유형에서 무엇을 의미합니까?
공식적인 Word 용어는 아니지만 — 이 에디션의 Aspose.Words.Fields 네임스페이스에서 필드 클래스를 그룹화하여, 구식 필드 코드 (barcode fields and pre-Open-XML compatibility fields)를 자체 강타입 클래스를 통해 구현하고, 일반 Field 객체만으로 처리되지 않도록 합니다.
FieldBarcode이 FieldDisplayBarcode와 동일한 속성을 사용합니까?
아니요. FieldBarcode은 레거시 BARCODE (postal/POSTNET) 필드를 구현하고 PostalAddress, FacingIdentificationMark, IsUSPostalAddress, IsBookmark를 노출합니다. FieldDisplayBarcode과 FieldMergeBarcode은 다른 속성 집합을 공유합니다 — BarcodeType, BarcodeValue, SymbolHeight 및 관련 렌더링 설정.
이 에디션은 barcode images를 렌더링합니까?
아니요. FieldBarcode, FieldDisplayBarcode, FieldMergeBarcode는 barcode 구성 데이터를 보유하고 IBarcodeGenerator 인터페이스를 노출하지만, 이 에디션에는 barcode rendering engine이 포함되어 있지 않습니다 — 이미지를 생성하려면 사용자 정의 IBarcodeGenerator 구현이 필요합니다.
EQ 필드를 OfficeMath 방정식으로 변환할 수 있나요?
예, FieldEQ.AsOfficeMath()를 통해 가능하지만, 해당 필드의 코드가 실제로 방정식을 인코딩하고 있어야 합니다.
문서에서 모든 전이 필드를 찾으려면 어떻게 해야 하나요?
Document.Range.Fields을 열거하고 각 Field.Type을 관련 FieldType 상수(FieldBarcode, FieldDisplayBarcode, FieldMergeBarcode, FieldBidiOutline, FieldEQ, FieldFootnoteRef, FieldInfo)와 비교하십시오.