ฟิลด์การเปลี่ยนผ่าน
ฟิลด์แบบเปลี่ยนผ่าน
คู่มือนี้แสดงวิธีทำงานกับประเภทฟิลด์แบบเปลี่ยนผ่าน — ฟิลด์บาร์โค้ดแบบดั้งเดิมและฟิลด์ความเข้ากันได้ — ใน Aspose.Words FOSS สำหรับ .NET.
Aspose.Words FOSS สำหรับ .NET แสดงถึงประเภทฟิลด์ Word เก่าบางประเภทผ่านชุดคลาสเฉพาะใน Aspose.Words.Fields เนมสเปซ, ที่เรียกโดยไม่เป็นทางการว่า transitional ฟิลด์เหล่านี้เป็นฟิลด์ที่มีมาก่อนฟิลด์เทียบเท่า Open XML ที่ตามมาภายหลัง แต่ยังคงใช้ได้ภายใน .docx เอกสารที่เปิดจากแหล่งข้อมูลแบบดั้งเดิม แต่ละประเภทฟิลด์การเปลี่ยนผ่านมีคลาสที่มีประเภทอย่างเข้มข้นของตนเองซึ่งสืบทอดจาก Field, ควบคู่กับทั่วไป Field วัตถุที่เปิดเผยโดย Document.Range.Fields.
ฟิลด์บาร์โค้ด
คลาสฟิลด์สามประเภทสร้างหรือแสดงข้อมูลบาร์โค้ดภายในเอกสาร: FieldBarcode (ฟิลด์ BARCODE — บาร์โค้ดไปรษณีย์แบบดั้งเดิมที่มีคุณสมบัติของตนเองคือ PostalAddress, IsBookmark, FacingIdentificationMark, และ IsUSPostalAddress), FieldDisplayBarcode (ฟิลด์ DISPLAYBARCODE), และ FieldMergeBarcode (ฟิลด์ MERGEBARCODE ซึ่งยังทำการใช้งาน IMergeFieldSurrogate สำหรับการผสานจดหมาย). FieldDisplayBarcode และ FieldMergeBarcode มีคุณสมบัติการกำหนดค่าบาร์โค้ดทั่วไปเดียวกัน — BarcodeType, BarcodeValue, SymbolHeight, SymbolRotation, ScalingFactor, ForegroundColor, BackgroundColor, PosCodeStyle, CaseCodeStyle, ErrorCorrectionLevel, DisplayText, AddStartStopChar, และ FixCheckDigit — ซึ่ง FieldBarcode ไม่มี.
คลาส BarcodeParameters เป็นคอนเทนเนอร์แบบผ่านต่อที่เปิดเผยการรวมของชุดคุณสมบัติทั้งสอง (คุณสมบัติที่อยู่ไปรษณีย์และคุณสมบัติการกำหนดค่าบาร์โค้ดทั่วไป) ใช้เพื่อส่งการตั้งค่าให้กับเรนเดอร์บาร์โค้ด, และ IBarcodeGenerator คืออินเทอร์เฟซที่เรนเดอร์แบบกำหนดเองทำการใช้งาน, เปิดเผย GetBarcodeImage(parameters) และ GetOldBarcodeImage(parameters) แบบดั้งเดิม. วนซ้ำ Document.Range.Fields และตรวจสอบ Field.Type เทียบกับ FieldType.FieldBarcode, FieldType.FieldDisplayBarcode หรือ FieldType.FieldMergeBarcode เพื่อค้นหาฟิลด์เหล่านี้, จากนั้นแคสท์เป็นคลาสฟิลด์เฉพาะ — BarcodeValue และ BarcodeType จะมีให้ใช้เฉพาะหลังจากแคสท์เป็น FieldDisplayBarcode หรือ FieldMergeBarcode, ไม่ใช่ FieldBarcode.
ฟิลด์ความเข้ากันได้แบบดั้งเดิม
คลาสฟิลด์เพิ่มเติมสี่คลาสครอบคลุมรหัสฟิลด์ Word รุ่นเก่าที่พบได้น้อยลงในเอกสารที่เขียนใหม่ แต่ยังปรากฏในไฟล์ .docx แบบเก่า: FieldBidiOutline (ฟิลด์ BIDIOUTLINE สำหรับการจัดลำดับหัวข้อจากขวาไปซ้าย), FieldEQ (ฟิลด์สมการ EQ ซึ่งยังเปิดให้ AsOfficeMath() แปลงเนื้อหาเป็นอ็อบเจกต์ OfficeMath), FieldFootnoteRef (ฟิลด์ FOOTNOTEREF ที่อ้างอิงข้ามหมายเลขเชิงอรรถหรือบันทึกท้าย), และ FieldInfo (ฟิลด์ INFO ที่อ่านหรือเขียนคุณสมบัติข้อมูลสรุปของเอกสารผ่านคุณสมบัติ InfoType และ NewValue).
แต่ละคลาสฟิลด์เหล่านี้สืบทอดส่วนติดต่อ Field เดียวกัน: GetFieldCode() คืนข้อความรหัสพื้นฐานของฟิลด์, Update() ประเมินผลลัพธ์ของฟิลด์ใหม่, Unlink() แทนที่ฟิลด์ด้วยผลลัพธ์ที่คำนวณล่าสุด, และ Remove() ลบฟิลด์ออกจากเอกสาร. IFieldCodeTokenInfoProvider ถูกดำเนินการโดย FieldBarcode, FieldDisplayBarcode, FieldMergeBarcode, และ FieldInfo, เนื่องจากรหัสฟิลด์ของพวกเขามีสวิตช์โครงสร้างที่ซับซ้อนเกินกว่าข้อความคำสั่งธรรมดา.
เคล็ดลับและแนวทางปฏิบัติที่ดีที่สุด
- ควรตรวจสอบ
Field.Typeเสมอก่อนแปลงประเภทFieldทั่วไปให้เป็นหนึ่งในคลาสฟิลด์แบบเปลี่ยนผ่าน — การแปลงประเภทที่ไม่ถูกต้องจะทำให้เกิดInvalidCastException. - เรียก
Update()หลังจากเปลี่ยนแปลงคุณสมบัติของฟิลด์บาร์โค้ดเพื่อให้Resultสะท้อนการตั้งค่าใหม่ก่อนบันทึกเอกสาร. FieldEQ.AsOfficeMath()จะสำเร็จเฉพาะเมื่อฟิลด์ EQ จริง ๆ แล้วเข้ารหัสสมการ; ตรวจสอบว่าResultของฟิลด์ดูเหมือนสูตรก่อนเรียกใช้งาน.- ใช้
Unlink()เมื่อคุณต้องการตรึงค่าปัจจุบันของฟิลด์เป็นข้อความคงที่, โดยยกเลิกความสามารถในการคำนวณใหม่ในภายหลัง. - คลาสฟิลด์บาร์โค้ดจะเก็บข้อมูลเท่านั้น — รุ่น FOSS นี้ไม่มีเอนจินการแสดงผลบาร์โค้ด, ดังนั้นผลลัพธ์ของ
GetBarcodeImage()จะขึ้นอยู่กับการนำไปใช้ของIBarcodeGeneratorที่คุณจัดหา.
ปัญหาทั่วไป
| ปัญหา | สาเหตุ | แก้ไข |
|---|---|---|
InvalidCastException เมื่อทำการแคสท์ Field | สมมติ FieldType ผิด | ตรวจสอบ Field.Type กับค่าคงที่ FieldType ที่ตรงกันก่อน |
FieldEQ.AsOfficeMath() ให้ผลลัพธ์ที่ไม่คาดคิด | ฟิลด์ไม่มีคำสั่งสมการที่ถูกต้อง | ตรวจสอบผลลัพธ์ของ GetFieldCode() ก่อนการแปลง |
| ฟิลด์บาร์โค้ดไม่มีรูปภาพที่เรนเดอร์ | ไม่มีการจัดหา implementation ของ IBarcodeGenerator | จัดหาตัวสร้างที่กำหนดเองซึ่ง implements GetBarcodeImage() |
ค่า FieldInfo ไม่ได้อัปเดตหลังจากการเปลี่ยนแปลงของ NewValue | ฟิลด์ไม่ได้รีเฟรช | เรียก Update() บนฟิลด์หลังจากแก้ไข NewValue |
FAQ
คำว่า “transitional” หมายถึงอะไรสำหรับประเภทฟิลด์เหล่านี้?
นี่ไม่ใช่คำศัพท์อย่างเป็นทางการของ Word — มันจัดกลุ่มคลาสฟิลด์ในเนมสเปซ Aspose.Words.Fields ของฉบับนี้ที่ทำการทำงานของโค้ดฟิลด์เก่า (barcode และฟิลด์ความเข้ากันได้ก่อนเปิด-XML) ผ่านคลาสที่มีชนิดข้อมูลแน่นหนาของตนเอง แทนที่จะถูกจัดการเฉพาะผ่านวัตถุ Field แบบทั่วไป.
ฉบับนี้สามารถแสดงภาพ barcode ได้หรือไม่?
ไม่ใช่. FieldBarcode, FieldDisplayBarcode และ FieldMergeBarcode เก็บข้อมูล barcode และเปิดเผยอินเทอร์เฟซ IBarcodeGenerator แต่ไม่มีเอนจินการแสดง barcode ในตัวที่มาพร้อมกับฉบับนี้ — คุณต้องจัดหา implementation IBarcodeGenerator ของคุณเอง.
ฉันสามารถแปลงฟิลด์ EQ เป็นสมการ OfficeMath ได้หรือไม่?
ใช่, ผ่าน FieldEQ.AsOfficeMath(), โดยที่โค้ดของฟิลด์จริง ๆ แล้วเข้ารหัสเป็นสมการ.
ฉันจะค้นหาฟิลด์การเปลี่ยนแปลงทั้งหมดในเอกสารได้อย่างไร?
นับรายการ Document.Range.Fields และเปรียบเทียบแต่ละ Field.Type กับค่าคงที่ FieldType ที่เกี่ยวข้อง (FieldBarcode, FieldDisplayBarcode, FieldMergeBarcode, FieldBidiOutline, FieldEQ, FieldFootnoteRef, FieldInfo).
API Reference สรุป
| คลาส / เมธอด | คำอธิบาย |
|---|---|
FieldBarcode | implements ฟิลด์ BARCODE |
FieldDisplayBarcode | ทำงานกับฟิลด์ DISPLAYBARCODE |
FieldMergeBarcode | ทำงานกับฟิลด์บาร์โค้ดการรวมจดหมาย MERGEBARCODE |
BarcodeParameters | คอนเทนเนอร์สำหรับการตั้งค่าบาร์โค้ดที่ส่งให้ตัวสร้าง |
IBarcodeGenerator | อินเทอร์เฟซสำหรับตัวเรนเดอร์ภาพบาร์โค้ดแบบกำหนดเอง |
FieldBidiOutline | ดำเนินการฟิลด์ BIDIOUTLINE |
FieldEQ | ดำเนินการฟิลด์สมการ EQ; AsOfficeMath() แปลงเป็น OfficeMath |
FieldFootnoteRef | ดำเนินการฟิลด์ FOOTNOTEREF |
FieldInfo | ดำเนินการฟิลด์คุณสมบัติเอกสาร INFO |