Cara Bekerja dengan Bidang Transisional di .NET

Cara Bekerja dengan Bidang Transisional di .NET

Cara Bekerja dengan Bidang Transisional di .NET

Aspose.Words FOSS untuk .NET mewakili sekelompok tipe bidang Word lama — bidang kode batang dan sejumlah bidang kompatibilitas pra-Open-XML — melalui kelas khusus di dalam Aspose.Words.Fields namespace, secara informal disebut transitional fields di sini. Panduan ini menunjukkan cara menemukan, membaca, dan mengkonfigurasinya. Setiap kelas bidang transisional diturunkan dari tipe dasar Field tipe, bersama dengan generic Field objek yang dipaparkan oleh Document.Range.Fields.


Panduan Langkah-demi-Langkah

Langkah 1: Temukan Bidang Transisional dalam Dokumen

Enumerasikan Document.Range.Fields dan bandingkan Type masing-masing field (nilai FieldType) dengan konstanta yang relevan — FieldBarcode, FieldDisplayBarcode, FieldMergeBarcode, FieldBidiOutline, FieldEQ, FieldFootnoteRef, atau FieldInfo — kemudian cast Field generik ke kelas yang cocok untuk mengakses properti spesifiknya. Selalu periksa Type sebelum melakukan cast: melakukan cast ke kelas field yang salah akan menghasilkan InvalidCastException.


Langkah 2: Konfigurasikan Field DISPLAYBARCODE atau MERGEBARCODE

FieldDisplayBarcode (field DISPLAYBARCODE) dan FieldMergeBarcode (field MERGEBARCODE, yang juga mengimplementasikan IMergeFieldSurrogate untuk mail merge) berbagi set properti konfigurasi barcode yang sama: BarcodeType, BarcodeValue, SymbolHeight, SymbolRotation, ScalingFactor, ForegroundColor, BackgroundColor, PosCodeStyle, CaseCodeStyle, ErrorCorrectionLevel, DisplayText, AddStartStopChar, dan FixCheckDigit. Tetapkan ini pada instance field, kemudian panggil Update() sehingga Result mencerminkan konfigurasi baru sebelum dokumen disimpan.


Langkah 3: Baca Data Field BARCODE (Pos) Legacy

FieldBarcode mengimplementasikan field BARCODE yang lebih lama, yang secara khusus merupakan field barcode pos AS (POSTNET) bukan barcode serbaguna — ia tidak berbagi properti BarcodeType/BarcodeValue dari Langkah 2. Sebaliknya, ia mengekspos PostalAddress (alamat yang dikodekan barcode), FacingIdentificationMark, IsUSPostalAddress, dan IsBookmark. Periksa Field.Type terhadap FieldType.FieldBarcode secara khusus sebelum membaca properti ini, karena meng-cast field DISPLAYBARCODE atau MERGEBARCODE menjadi FieldBarcode tidak akan mengekspos properti yang Anda harapkan.


Langkah 4: Render Gambar Barcode dengan Generator Kustom

Versi FOSS ini menyertakan data field barcode tetapi tidak menyertakan mesin render barcode. BarcodeParameters adalah kontainer pass-through yang mengkonsolidasikan pengaturan dari keluarga field barcode — properti DISPLAYBARCODE/MERGEBARCODE dari Langkah 2 dan properti pos dari Langkah 3 — menjadi satu objek yang diberikan ke renderer. Implementasikan IBarcodeGenerator, mengekspos GetBarcodeImage(parameters) dan GetOldBarcodeImage(parameters) legacy, untuk menyediakan rendering gambar yang sebenarnya; tanpa implementasi yang disediakan, field barcode hanya membawa data konfigurasi.


Langkah 5: Bekerja dengan Field Kompatibilitas Legacy

Empat kelas lainnya mencakup kode field lama yang masih ditemukan dalam file .docx legacy. FieldBidiOutline mengimplementasikan field BIDIOUTLINE untuk penomoran outline kanan-ke-kiri dan tidak mengekspos properti apa pun di luar permukaan umum Field. FieldEQ mengimplementasikan field persamaan EQ dan tambahan mengekspos AsOfficeMath() untuk mengonversi isinya menjadi objek OfficeMath — ini hanya berhasil ketika field benar-benar mengkodekan persamaan. FieldFootnoteRef mengimplementasikan field FOOTNOTEREF, yang merujuk silang ke tanda catatan kaki atau catatan akhir, dan juga tidak mengekspos properti apa pun di luar permukaan umum Field. FieldInfo mengimplementasikan field INFO, membaca atau menulis properti informasi ringkasan dokumen melalui properti InfoType dan NewValue.


Langkah 6: Perbarui atau Bekukan Nilai Field Transisional

Setiap kelas bidang transisional mewarisi GetFieldCode() (teks kode dasar bidang), Update() (mengevaluasi ulang hasil), Unlink() (mengganti bidang dengan hasil perhitungan terakhir sebagai teks statis), dan Remove() (menghapus bidang). Panggil Update() setelah mengubah konfigurasi bidang apa pun sehingga Result mencerminkan perubahan, dan gunakan Unlink() ketika nilai saat ini dari bidang harus dibekukan alih-alih tetap dapat dihitung ulang.


Masalah Umum dan Solusi

InvalidCastException ketika melakukan casting pada Field ke kelas bidang transisional. Yang salah FieldType diasumsikan. Periksa Field.Type terhadap yang cocok FieldType konstanta sebelum casting.

A DISPLAYBARCODE/MERGEBARCODE properti field tidak ada setelah casting. Field tersebut di-cast ke FieldBarcode daripada FieldDisplayBarcode/FieldMergeBarcode (atau sebaliknya) — kelas-kelas ini mengekspos set properti yang berbeda meskipun ketiganya mewakili data barcode. Konfirmasi Field.Type sebelum casting.

Bidang barcode membawa data tetapi tidak ada gambar yang dirender. Tidak IBarcodeGenerator implementasi telah disediakan. Sediakan generator khusus yang mengimplementasikan GetBarcodeImage(parameters) — edisi ini tidak menyertakan mesin rendering barcode bawaan.

FieldEQ.AsOfficeMath() mengembalikan hasil yang tidak terduga. Bidang tidak berisi instruksi persamaan yang valid. Periksa field’s GetFieldCode() output sebelum mencoba konversi.

FieldInfo’s nilai tidak diperbarui setelah pengaturan NewValue. Bidang tidak diperbarui setelah perubahan. Panggil Update() pada bidang setelah memodifikasi NewValue.


Pertanyaan yang Sering Diajukan

Apa arti “transitional” untuk tipe bidang ini?

Ini bukan terminologi resmi Word — ini mengelompokkan kelas bidang dalam namespace Aspose.Words.Fields edisi ini yang mengimplementasikan kode bidang lama (bidang barcode dan bidang kompatibilitas pra-Open-XML) melalui kelas mereka yang strongly-typed alih-alih hanya ditangani melalui objek generik Field.

Apakah FieldBarcode menggunakan properti yang sama dengan FieldDisplayBarcode?

Tidak. FieldBarcode mengimplementasikan bidang warisan BARCODE (postal/POSTNET) dan mengekspos PostalAddress, FacingIdentificationMark, IsUSPostalAddress, serta IsBookmark. FieldDisplayBarcode dan FieldMergeBarcode berbagi set properti yang berbeda — BarcodeType, BarcodeValue, SymbolHeight, dan pengaturan rendering terkait.

Apakah edisi ini merender gambar barcode?

Tidak. FieldBarcode, FieldDisplayBarcode, dan FieldMergeBarcode menyimpan data konfigurasi barcode dan mengekspos antarmuka IBarcodeGenerator, tetapi tidak ada mesin rendering barcode yang disertakan dalam edisi ini — diperlukan implementasi IBarcodeGenerator khusus untuk menghasilkan gambar.

Bisakah saya mengonversi bidang EQ menjadi persamaan OfficeMath?

Ya, melalui FieldEQ.AsOfficeMath(), asalkan kode bidang tersebut memang mengkodekan persamaan.

Bagaimana cara saya menemukan semua bidang transisional dalam dokumen?

Enumerasikan Document.Range.Fields dan bandingkan setiap Field.Type dengan konstanta FieldType yang relevan (FieldBarcode, FieldDisplayBarcode, FieldMergeBarcode, FieldBidiOutline, FieldEQ, FieldFootnoteRef, FieldInfo).


Lihat Juga

 Bahasa Indonesia