Cách làm việc với các trường chuyển tiếp trong .NET
Cách làm việc với các trường chuyển tiếp trong .NET
Aspose.Words FOSS cho .NET đại diện cho một nhóm các loại trường Word cũ — các trường mã vạch và một vài trường tương thích trước Open-XML — thông qua các lớp chuyên dụng trong Aspose.Words.Fields không gian tên, thường được gọi là transitional các trường ở đây. Hướng dẫn này chỉ ra cách tìm, đọc và cấu hình chúng. Mọi lớp trường chuyển tiếp đều kế thừa từ loại base Field type, cùng với generic Field đối tượng được phơi bày bởi Document.Range.Fields.
Hướng dẫn từng bước
Bước 1: Tìm các trường chuyển tiếp trong tài liệu
Liệt kê Document.Range.Fields và so sánh Type của mỗi trường (một giá trị FieldType) với các hằng số liên quan — FieldBarcode, FieldDisplayBarcode, FieldMergeBarcode, FieldBidiOutline, FieldEQ, FieldFootnoteRef hoặc FieldInfo — sau đó cast đối tượng Field chung sang lớp phù hợp để truy cập các thuộc tính cụ thể của nó. Luôn kiểm tra Type trước khi cast: việc cast sang lớp trường sai sẽ gây ra một InvalidCastException.
Bước 2: Cấu hình trường DISPLAYBARCODE hoặc MERGEBARCODE
FieldDisplayBarcode (trường DISPLAYBARCODE) và FieldMergeBarcode (trường MERGEBARCODE, cũng thực hiện IMergeFieldSurrogate cho mail merge) chia sẻ cùng một tập các thuộc tính cấu hình mã vạch: BarcodeType, BarcodeValue, SymbolHeight, SymbolRotation, ScalingFactor, ForegroundColor, BackgroundColor, PosCodeStyle, CaseCodeStyle, ErrorCorrectionLevel, DisplayText, AddStartStopChar, và FixCheckDigit. Đặt các giá trị này trên thể hiện trường, sau đó gọi Update() để Result phản ánh cấu hình mới trước khi tài liệu được lưu.
Bước 3: Đọc Dữ liệu Trường BARCODE (Bưu chính) Cũ
FieldBarcode triển khai trường BARCODE cũ, là một trường mã vạch bưu chính US (POSTNET) thay vì mã vạch đa năng — nó không chia sẻ các thuộc tính BarcodeType/BarcodeValue từ Bước 2. Thay vào đó, nó công khai PostalAddress (địa chỉ mà mã vạch mã hoá), FacingIdentificationMark, IsUSPostalAddress, và IsBookmark. Kiểm tra Field.Type so với FieldType.FieldBarcode một cách cụ thể trước khi đọc các thuộc tính này, vì việc ép kiểu một trường DISPLAYBARCODE hoặc MERGEBARCODE sang FieldBarcode sẽ không công khai các thuộc tính mà bạn mong đợi.
Bước 4: Kết xuất Hình ảnh Mã vạch bằng Trình tạo Tùy chỉnh
Phiên bản FOSS này chứa dữ liệu trường mã vạch nhưng không bao gồm một động cơ kết xuất mã vạch. BarcodeParameters là container truyền qua hợp nhất các thiết lập từ bất kỳ họ trường mã vạch nào — các thuộc tính DISPLAYBARCODE/MERGEBARCODE từ Bước 2 và các thuộc tính bưu chính từ Bước 3 — thành một đối tượng duy nhất được chuyển cho trình kết xuất. Triển khai IBarcodeGenerator, công khai GetBarcodeImage(parameters) và GetOldBarcodeImage(parameters) legacy, để cung cấp việc thực tế kết xuất hình ảnh; nếu không có triển khai được cung cấp, các trường mã vạch chỉ mang dữ liệu cấu hình.
Bước 5: Làm việc với Các Trường Tương thích Legacy
Bốn lớp khác bao phủ các mã trường cũ vẫn được tìm thấy trong các tệp legacy .docx. FieldBidiOutline triển khai trường BIDIOUTLINE cho việc đánh số đề mục từ phải sang trái và không công khai bất kỳ thuộc tính nào ngoài bề mặt chung Field. FieldEQ triển khai trường phương trình EQ và bổ sung công khai AsOfficeMath() để chuyển nội dung của nó thành một đối tượng OfficeMath — việc này chỉ thành công khi trường thực sự mã hoá một phương trình. FieldFootnoteRef triển khai trường FOOTNOTEREF, trường này tham chiếu chéo một dấu chú thích dưới footnote hoặc endnote, và cũng không công khai bất kỳ thuộc tính nào ngoài bề mặt chung Field. FieldInfo triển khai trường INFO, đọc hoặc ghi một thuộc tính thông tin tóm tắt tài liệu thông qua các thuộc tính InfoType và NewValue của nó.
Bước 6: Cập nhật hoặc Đóng băng Giá trị của Trường Chuyển tiếp
Mỗi lớp trường chuyển tiếp kế thừa GetFieldCode() (văn bản mã nguồn cơ bản của trường), Update() (tính lại kết quả), Unlink() (thay thế trường bằng kết quả đã tính cuối cùng dưới dạng văn bản tĩnh), và Remove() (xóa trường). Gọi Update() sau khi thay đổi cấu hình bất kỳ trường nào để Result phản ánh thay đổi, và sử dụng Unlink() khi giá trị hiện tại của trường nên được đóng băng thay vì vẫn có thể tính lại.
Các vấn đề thường gặp và cách khắc phục
InvalidCastException khi ép một Field đến một lớp trường chuyển tiếp. Sai FieldType được giả định. Kiểm tra Field.Type đối chiếu với việc khớp FieldType hằng số trước khi ép kiểu.
A DISPLAYBARCODE/MERGEBARCODE các thuộc tính của trường bị thiếu sau khi ép kiểu. Trường đã được ép kiểu thành FieldBarcode thay vì FieldDisplayBarcode/FieldMergeBarcode (hoặc ngược lại) — các lớp này cung cấp các bộ thuộc tính khác nhau mặc dù cả ba đều đại diện cho dữ liệu mã vạch. Xác nhận Field.Type trước khi ép kiểu.
Các trường mã vạch chứa dữ liệu nhưng không hiển thị hình ảnh. Không IBarcodeGenerator không có triển khai nào được cung cấp. Cung cấp một trình tạo tùy chỉnh thực hiện GetBarcodeImage(parameters) — phiên bản này không đi kèm với công cụ hiển thị mã vạch tích hợp.
FieldEQ.AsOfficeMath() trả về kết quả không mong đợi. Trường không chứa một chỉ thị phương trình hợp lệ. Kiểm tra GetFieldCode() đầu ra trước khi thực hiện chuyển đổi.
FieldInfo’s value không được cập nhật sau khi thiết lập NewValue. Trường không được làm mới sau khi thay đổi. Call Update() trên trường sau khi chỉnh sửa NewValue.
Câu hỏi thường gặp
“Transitional” có nghĩa là gì đối với các loại trường này?
Đây không phải là thuật ngữ chính thức của Word — nó nhóm các lớp trường trong không gian tên Aspose.Words.Fields của phiên bản này, những lớp này thực thi các mã trường cũ (các trường mã vạch và các trường tương thích trước Open-XML) thông qua các lớp kiểu mạnh riêng của chúng thay vì chỉ được xử lý bằng đối tượng chung Field.
Liệu FieldBarcode có sử dụng cùng các thuộc tính với FieldDisplayBarcode không?
Không. FieldBarcode triển khai trường BARCODE (postal/POSTNET) di sản và cung cấp PostalAddress, FacingIdentificationMark, IsUSPostalAddress và IsBookmark. FieldDisplayBarcode và FieldMergeBarcode chia sẻ một bộ thuộc tính khác — BarcodeType, BarcodeValue, SymbolHeight và các cài đặt hiển thị liên quan.
Phiên bản này có hiển thị hình ảnh mã vạch không?
Không. FieldBarcode, FieldDisplayBarcode và FieldMergeBarcode lưu trữ dữ liệu cấu hình mã vạch và cung cấp giao diện IBarcodeGenerator, nhưng không có engine render mã vạch nào được cung cấp trong phiên bản này — cần một triển khai IBarcodeGenerator tùy chỉnh để tạo ra hình ảnh.
Tôi có thể chuyển một trường EQ thành một phương trình OfficeMath không?
Có, thông qua FieldEQ.AsOfficeMath(), với điều kiện mã của trường thực sự mã hoá một phương trình.
Làm sao tôi có thể tìm tất cả các trường chuyển tiếp trong một tài liệu?
Liệt kê Document.Range.Fields và so sánh từng Field.Type với các hằng số FieldType liên quan (FieldBarcode, FieldDisplayBarcode, FieldMergeBarcode, FieldBidiOutline, FieldEQ, FieldFootnoteRef, FieldInfo).