วิธีทำงานกับฟิลด์การเปลี่ยนผ่านใน .NET

วิธีทำงานกับฟิลด์การเปลี่ยนผ่านใน .NET

วิธีทำงานกับฟิลด์แบบเปลี่ยนผ่านใน .NET

Aspose.Words FOSS สำหรับ .NET แสดงถึงกลุ่มของประเภทฟิลด์ Word เก่ารุ่น — ฟิลด์บาร์โค้ดและฟิลด์ความเข้ากันได้ก่อน Open-XML — ผ่านคลาสเฉพาะใน the Aspose.Words.Fields namespace, เรียกโดยไม่เป็นทางการว่า transitional fields here. คู่มือฉบับนี้แสดงวิธีการค้นหา อ่าน และกำหนดค่าให้กับพวกมัน ทุกคลาสฟิลด์แบบเปลี่ยนผ่านสืบทอดมาจาก base Field ประเภท, ควบคู่กับทั่วไป Field อ็อบเจ็กต์ที่เปิดเผยโดย Document.Range.Fields.


คู่มือแบบทีละขั้นตอน

ขั้นตอนที่ 1: ค้นหาฟิลด์แบบเปลี่ยนผ่านในเอกสาร

วนซ้ำ Document.Range.Fields และเปรียบเทียบ Type ของแต่ละฟิลด์ (ค่า FieldType) กับค่าคงที่ที่เกี่ยวข้อง — FieldBarcode, FieldDisplayBarcode, FieldMergeBarcode, FieldBidiOutline, FieldEQ, FieldFootnoteRef, หรือ FieldInfo — แล้วแคสต์ Field ทั่วไปเป็นคลาสที่ตรงกันเพื่อเข้าถึงคุณสมบัติเฉพาะของมัน เสมอให้ตรวจสอบ Type ก่อนทำการแคสต์: การแคสต์เป็นคลาสฟิลด์ที่ไม่ถูกต้องจะทำให้เกิด InvalidCastException.


ขั้นตอนที่ 2: กำหนดค่าฟิลด์ DISPLAYBARCODE หรือ MERGEBARCODE

FieldDisplayBarcode (ฟิลด์ DISPLAYBARCODE) และ FieldMergeBarcode (ฟิลด์ MERGEBARCODE, ซึ่งยัง implements IMergeFieldSurrogate สำหรับการรวมเมล) มีชุดคุณสมบัติการกำหนดค่าบาร์โค้ดเดียวกัน: BarcodeType, BarcodeValue, SymbolHeight, SymbolRotation, ScalingFactor, ForegroundColor, BackgroundColor, PosCodeStyle, CaseCodeStyle, ErrorCorrectionLevel, DisplayText, AddStartStopChar, และ FixCheckDigit. ตั้งค่าเหล่านี้บนอินสแตนซ์ของฟิลด์ แล้วเรียก Update() เพื่อให้ Result สะท้อนการกำหนดค่าใหม่ก่อนบันทึกเอกสาร.


ขั้นตอน 3: อ่านข้อมูลฟิลด์ BARCODE (ไปรษณีย์) แบบ Legacy

FieldBarcode implements ฟิลด์ BARCODE รุ่นเก่า ซึ่งเป็นฟิลด์ US postal barcode (POSTNET) โดยเฉพาะ ไม่ใช่บาร์โค้ดทั่วไป — มันไม่แชร์คุณสมบัติ BarcodeType/BarcodeValue จากขั้นตอนที่ 2. แทนที่จะนั้น มันเปิดเผย PostalAddress (ที่อยู่ที่บาร์โค้ดเข้ารหัส), FacingIdentificationMark, IsUSPostalAddress, และ IsBookmark. ตรวจสอบ Field.Type กับ FieldType.FieldBarcode อย่างเฉพาะก่อนอ่านคุณสมบัติเหล่านี้ เนื่องจากการแคสท์ฟิลด์ DISPLAYBARCODE หรือ MERGEBARCODE ไปเป็น FieldBarcode จะไม่เปิดเผยคุณสมบัติที่คุณคาดหวัง.


ขั้นตอน 4: เรนเดอร์ภาพ Barcode ด้วย Custom Generator

รุ่น FOSS นี้บรรจุข้อมูลฟิลด์บาร์โค้ดแต่ไม่ได้รวมเอาเอนจินการเรนเดอร์บาร์โค้ดไว้ BarcodeParameters เป็นคอนเทนเนอร์ pass-through ที่รวบรวมการตั้งค่าจากตระกูลฟิลด์บาร์โค้ดทั้งสอง — คุณสมบัติ DISPLAYBARCODE/MERGEBARCODE จากขั้นตอนที่ 2 และคุณสมบัติไปรษณีย์จากขั้นตอนที่ 3 — เข้าเป็นอ็อบเจ็กต์เดียวที่ส่งให้ renderer. Implement IBarcodeGenerator, เปิดเผย GetBarcodeImage(parameters) และ GetOldBarcodeImage(parameters) รุ่น legacy, เพื่อจัดหาการเรนเดอร์ภาพจริง; หากไม่มีการ implement ที่จัดหาไว้ ฟิลด์บาร์โค้ดจะมีเพียงข้อมูลการกำหนดค่าเท่านั้น.


ขั้นตอน 5: ทำงานกับฟิลด์ Legacy Compatibility

อีกสี่คลาสครอบคลุมโค้ดฟิลด์เก่าที่ยังพบในไฟล์ .docx รุ่น Legacy. FieldBidiOutline implements ฟิลด์ BIDIOUTLINE สำหรับการนับเลขโครงร่างจากขวาไปซ้ายและไม่เปิดเผยคุณสมบัติใดนอกจากพื้นผิวทั่วไป Field. FieldEQ implements ฟิลด์สมการ EQ และเพิ่มเติมเปิดเผย AsOfficeMath() เพื่อแปลงเนื้อหาเป็นอ็อบเจ็กต์ OfficeMath — การแปลงนี้จะสำเร็จเฉพาะเมื่อฟิลด์เข้ารหัสสมการจริง ๆ. FieldFootnoteRef implements ฟิลด์ FOOTNOTEREF, ซึ่งอ้างอิงข้ามหมายเหตุเท้า (footnote) หรือหมายเหตุท้าย (endnote) และก็ไม่เปิดเผยคุณสมบัติใดนอกจากพื้นผิวทั่วไป Field. FieldInfo implements ฟิลด์ INFO, อ่านหรือเขียนคุณสมบัติสรุปข้อมูลเอกสารผ่านคุณสมบัติ InfoType และ NewValue ของมัน.


ขั้นตอน 6: อัปเดตหรือแช่ค่าของฟิลด์ Transitional

แต่ละคลาสฟิลด์แบบเปลี่ยนผ่านสืบทอด GetFieldCode() (ข้อความโค้ดพื้นฐานของฟิลด์), Update() (ประเมินผลใหม่), Unlink() (แทนที่ฟิลด์ด้วยผลลัพธ์ที่คำนวณครั้งสุดท้ายเป็นข้อความคงที่), และ Remove() (ลบฟิลด์). เรียก Update() หลังจากเปลี่ยนการกำหนดค่าของฟิลด์ใด ๆ เพื่อให้ Result สะท้อนการเปลี่ยนแปลง, และใช้ Unlink() เมื่อค่าปัจจุบันของฟิลด์ควรจะถูกแช่แข็งแทนที่จะคำนวณได้อีก.


ปัญหาทั่วไปและวิธีแก้ไข

InvalidCastException when casting a Field ไปยังคลาสฟิลด์แบบเปลี่ยนผ่าน. สิ่งที่ผิด FieldType ถูกสมมติไว้ ตรวจสอบ Field.Type เทียบกับการจับคู่ FieldType ค่าคงที่ก่อนการแคสท์.

A DISPLAYBARCODE/MERGEBARCODE คุณสมบัติของฟิลด์หายไปหลังจากทำการแคสท์. ฟิลด์ถูกแคสท์เป็น FieldBarcode แทนที่จะเป็น FieldDisplayBarcode/FieldMergeBarcode (หรือกลับกัน) — คลาสเหล่านี้เปิดเผยชุดคุณสมบัติที่แตกต่างกันแม้ว่าทั้งสามจะเป็นข้อมูลบาร์โค้ดเดียวกัน ยืนยัน Field.Type ก่อนทำการแคสต์.

ฟิลด์บาร์โค้ดบรรจุข้อมูลแต่ไม่มีภาพแสดงผล. ไม่ IBarcodeGenerator implementation ถูกจัดหาแล้ว โปรดจัดเตรียม generator แบบกำหนดเองที่ทำการ implement GetBarcodeImage(parameters) — รุ่นนี้ไม่ได้มาพร้อมกับเอนจินการแสดงบาร์โค้ดในตัว.

FieldEQ.AsOfficeMath() ส่งคืนผลลัพธ์ที่ไม่คาดคิด. ฟิลด์ไม่มีคำสั่งสมการที่ถูกต้อง ตรวจสอบฟิลด์ของ GetFieldCode() ผลลัพธ์ก่อนพยายามแปลง.

FieldInfoค่าของ ’s ไม่ได้อัปเดตหลังจากตั้งค่า NewValue. ฟิลด์ไม่ได้รับการรีเฟรชหลังจากการเปลี่ยนแปลง. Call Update() บนฟิลด์หลังจากการแก้ไข NewValue.


คำถามที่พบบ่อย

คำว่า “transitional” มีความหมายอย่างไรสำหรับประเภทฟิลด์เหล่านี้?

นี่ไม่ใช่คำศัพท์อย่างเป็นทางการของ Word — มันจัดกลุ่มคลาสฟิลด์ใน namespace Aspose.Words.Fields ของฉบับนี้ที่ดำเนินการโค้ดฟิลด์เก่า (ฟิลด์บาร์โค้ดและฟิลด์ความเข้ากันได้ก่อน Open-XML) ผ่านคลาสที่มีประเภทที่กำหนดอย่างชัดเจนของตนเอง แทนที่จะถูกจัดการเฉพาะผ่านอ็อบเจกต์ทั่วไป Field.

FieldBarcode ใช้คุณสมบัติเช่นเดียวกับ FieldDisplayBarcode หรือไม่?

ไม่. FieldBarcode ใช้การทำงานของฟิลด์ BARCODE รุ่นเก่า (postal/POSTNET) และเปิดเผย PostalAddress, FacingIdentificationMark, IsUSPostalAddress, และ IsBookmark. FieldDisplayBarcode และ FieldMergeBarcode มีชุดคุณสมบัติที่แตกต่างกัน — BarcodeType, BarcodeValue, SymbolHeight, และการตั้งค่าการแสดงผลที่เกี่ยวข้อง.

ฉบับนี้เรนเดอร์ภาพบาร์โค้ดหรือไม่?

ไม่. FieldBarcode, FieldDisplayBarcode และ FieldMergeBarcode เก็บข้อมูลการกำหนดค่าบาร์โค้ดและเปิดเผยอินเทอร์เฟซ IBarcodeGenerator แต่ไม่มีเอนจินการเรนเดอร์บาร์โค้ดที่มาพร้อมกับฉบับนี้ — จำเป็นต้องมีการนำไปใช้ IBarcodeGenerator แบบกำหนดเองเพื่อสร้างภาพ.

ฉันสามารถแปลงฟิลด์ EQ ให้เป็นสมการ OfficeMath ได้หรือไม่?

ใช่, ผ่าน FieldEQ.AsOfficeMath(), โดยที่โค้ดของฟิลด์ต้องเข้ารหัสสมการจริง ๆ.

ฉันจะหาฟิลด์การเปลี่ยนผ่านทั้งหมดในเอกสารได้อย่างไร?

ทำการนับ Document.Range.Fields และเปรียบเทียบแต่ละ Field.Type กับค่าคงที่ FieldType ที่เกี่ยวข้อง (FieldBarcode, FieldDisplayBarcode, FieldMergeBarcode, FieldBidiOutline, FieldEQ, FieldFootnoteRef, FieldInfo).


ดูเพิ่มเติม

 ภาษาไทย