עבודה עם תגיות מסמכים מובנות (בקרי תוכן)
עבודה עם תגים של מסמכים מובנים (בקרי תוכן)
תג מסמך מובנה (SDT), הידוע בממשק המשתמש של Word כפקד תוכן, עוטף קטע של תוכן מסמך עם התנהגות עריכה מסוגת ומוגבלת — תיבת סימון, בורר תאריכים, רשימת נפתחת, או מציין מקום של טקסט רגיל או עשיר. Aspose.Words FOSS עבור .NET מודל את אלה דרך Aspose.Words.Markup מרחב שם, בראשות StructuredDocumentTag מחלקה. דף זה מתאר הוספת פקדי תוכן, קביעת תצורה לכל סוג, מציאת והסרתם, וקישורם לנתונים מותאמים של XML.
מודל האובייקטים של תג המסמך המובנה
StructuredDocumentTag הוא CompositeNode שגם מיישם את IMarkupNode, ITrackableNode, ו-IStructuredDocumentTag. SdtType מזהה את סוג הבקר. Tag ו-Title מחזיקים את המחרוזות המזהות שהמחברים הגדירו ב-Word; Placeholder (BuildingBlock) ו-PlaceholderName מספקים את טקסט ההנחיה שמוצג כאשר הבקר ריק, מדווח דרך IsShowingPlaceholderText. LockContentControl מונע מחיקת הבקר, ו-LockContents מונע עריכת תוכנו, באופן עצמאי זה מזה.
הוספת בקרים לתוכן
DocumentBuilder.InsertStructuredDocumentTag(SdtType) מוסיף בקר חדש במיקום הסמן, אך רק עבור שבעה ערכי SdtType: PlainText, RichText, Checkbox, DropDownList, ComboBox, Picture ו-Date. לא ניתן להכניס את RepeatingSection ו-RepeatingSectionItem במיקום סמן טקסט בצורה זו – הם עוטפים פסקאות שלמות או שורות בטבלה במקום זאת. שאר הערכים של SdtType המופיעים בקבצי Word אך אינם קיימים בממשק ה-Word כסוגים שניתן להוסיף – None, Bibliography, Citation, Equation, BuildingBlockGallery, DocPartObj, Group ו-EntityPicker – אינם נתמכים על ידי שיטת הוספה זו.
תוכן לפי סוג
מצב של פקד תיבת סימון הוא StructuredDocumentTag.Checked; SetCheckedSymbol() ו-SetUncheckedSymbol() קובעים את הסמלים המוצגים עבור כל מצב. פקד תאריך מאחסן את ערכו ב-FullDate, כאשר DateDisplayFormat ו-DateDisplayLocale שולטות באופן הצגתו, DateStorageFormat (SdtDateStorageFormat) שולט איך הוא מאוחסן כאשר קשור לנתוני XML, ו-CalendarType (SdtCalendarType) בוחר את מערכת הלוח השנה. רשימת נפתחת או תיבת משולבת מציגה את האפשרויות שלה דרך ListItems, SdtListItemCollection של SdtListItem (DisplayText, Value) עם SelectedValue. המאפיין Multiline של פקד טקסט פשוט מאפשר או מונע שבירות שורה בתוכו.
מראה ונעילה
Appearance (SdtAppearance) שולט כיצד הפקד מוגדר חזותית ב-Word. Color מגדיר את צבע ההדגשה שלו, ו-ContentsFont / EndCharacterFont שולטות בגופן המיושם על התוכן ובתו הסופי שלו. LockContentControl ו-LockContents הם מתגים עצמאיים – הראשון חוסם מחיקת הפקד עצמו, השני חוסם עריכה של מה שנמצא בתוכו.
מציאת והסרת בקרי תוכן
Range.StructuredDocumentTags מחזיר StructuredDocumentTagCollection המוגדר לטווח זה, עם GetById(), GetByTag(), ו-GetByTitle() לחיפוש ממוקד לצד Remove() ו-RemoveAt(). על StructuredDocumentTag בודד, Remove() מוחק את הפקד ואת תוכנו יחד, RemoveSelfOnly() מוחק רק את העטיפה ומשאיר את התוכן במסמך, ו-Clear() מרוקן את תוכן הפקד תוך שמירה על הפקד עצמו.
XML קישור נתונים
StructuredDocumentTag.XmlMapping הוא מופע של XmlMapping המתאר קישור לחלק XML מותאם אישית במסמך: CustomXmlPart, XPath, PrefixMappings, StoreItemId, ו-IsMapped. SetMapping() מקים את הקישור לחלק XML מותאם אישית קיים ו-Delete() מסיר אותו.
בקרי תוכן מרובי-מקטעים (טווחיים)
בקרת תוכן המתפרסת על יותר ממקטע אחד – מדווחת על ידי IsMultiSection – מיוצגת לא על-ידי צומת StructuredDocumentTag יחיד אלא על-ידי זוג צמתים StructuredDocumentTagRangeStart ו-StructuredDocumentTagRangeEnd, המחוברים דרך StructuredDocumentTagRangeStart.RangeEnd. הן הצורה עם צומת יחיד והן הצורה בטווח מממשות את הממשק המשותף IStructuredDocumentTag, ולכן קוד שזקוק רק ל-Tag, Title, SdtType, Placeholder ולתכונות זיהוי דומות יכול לפעול עם כל אחת מהצורות באופן אחיד.
טיפים ושיטות עבודה מומלצות
- בדוק את רשימת סוגי-הקוד הנתמכים של
DocumentBuilder.InsertStructuredDocumentTag()לפני שאתה מסתמך עליו – רקPlainText,RichText,Checkbox,DropDownList,ComboBox,Pictureו-Dateניתנים להוספה במצביע; סוגים אחרים זורקים חריגה. - השתמש ב-
RemoveSelfOnly()במקוםRemove()כאשר ברצונך “לשטח” בקרת תוכן – שמור את התוכן שלה במסמך אך הורד את עטיפת הבקרה. - מלא את
ListItemsלפני שאתה מצפה שבקרתDropDownListאוComboBoxתציג אפשרויות, והגדר אתSelectedValueכדי לבחור את הפעילה. - תכנת כנגד
IStructuredDocumentTagבמקוםStructuredDocumentTagישירות אם הקוד שלך צריך להתמודד עם בקרות תוכן רגילות ובקרות מרובות-מקטעים (בטווח) באותו האופן. XmlMapping.SetMapping()נקשר לחלק מותאם אישית XML שחייב כבר להיות קיים במאגר הנתונים המותאם אישית XML של המסמך – הוסף או טען את נתוני XML לפני שממפים בקרה אליו.
בעיות נפוצות
| בעיה | סיבה | תיקון |
|---|---|---|
InsertStructuredDocumentTag() זורק NotImplementedException | ה-SdtType המבוקש (למשל Citation, Equation או BuildingBlockGallery) אינו אחד משבעת הסוגים הניתנים להוספה | השתמש באחד מ-PlainText, RichText, Checkbox, DropDownList, ComboBox, Picture, Date |
InsertStructuredDocumentTag() זורק InvalidOperationException | RepeatingSection או RepeatingSectionItem התבקשו במיקום של סמן טקסט | סוגים אלו עוטפים פסקאות שלמות או שורות בטבלה, ולא מיקום של סמן |
| הסרת פקד תוכן מוחקת גם את הטקסט שבפנים | Remove() מוחק את הפקד ואת התוכן שלו יחד | קרא לRemoveSelfOnly() במקום כדי לשמור על התוכן |
| תיבת הסימון לא מציגה את הסמל הצפוי | הגליפים המותאמים למצב מסומן/לא מסומן לא הוגדרו | קרא לSetCheckedSymbol() וSetUncheckedSymbol() |
FAQ
אילו סוגי בקרת תוכן ניתן להכניס ישירות באמצעות DocumentBuilder?
PlainText, RichText, Checkbox, DropDownList, ComboBox, Picture ו-Date. ערכי SdtType אחרים אינם נתמכים על-ידי InsertStructuredDocumentTag().
איך למצוא את כל בקרות התוכן עם תגית ספציפית?
השתמש ב-Range.StructuredDocumentTags.GetByTag(), או ב-GetByTitle() / GetById() אם אתה משווה אליהם במקום זאת.
איך להסיר בקרת תוכן אך לשמור על התוכן שלה?
השתמש ב-StructuredDocumentTag.RemoveSelfOnly() במקום Remove().
איך לקשר בקרת תוכן לנתוני XML מותאמים אישית?
קרא לXmlMapping.SetMapping() על הבקרה, תוך הפנייה אל חלק XML מותאם אישית קיים וביטוי XPath בתוכו.
מה ההבדל בין StructuredDocumentTag רגיל לStructuredDocumentTag בטווח?
בקרת תוכן המתפרסת על יותר ממקטע מסמך אחד מיוצגת כזוג StructuredDocumentTagRangeStart / StructuredDocumentTagRangeEnd במקום צומת בודד; שני הצורות מיישמות את IStructuredDocumentTag.
API Reference סיכום
| מחלקה / ממשק / Enum | תיאור |
|---|---|
StructuredDocumentTag | צומת בקרת תוכן; SdtType, Tag, Title, Remove(), RemoveSelfOnly(), Clear() |
IStructuredDocumentTag | ממשק משותף בין content controls רגילים ובין content controls מרובי-חלקים |
StructuredDocumentTagCollection | Content controls בטווח, באמצעות Range.StructuredDocumentTags; GetById(), GetByTag(), GetByTitle() |
StructuredDocumentTagRangeStart / StructuredDocumentTagRangeEnd | זוג התחלה/סיום המייצג content control מרובי-חלקים |
SdtType | Enum המזהה את סוג ה-content control |
SdtAppearance | סגנון מפריד חזותי לבקרת תוכן |
SdtCalendarType / SdtDateStorageFormat | מערכת לוח שנה ותבנית אחסון לבקרת תאריך |
SdtListItem / SdtListItemCollection | אפשרויות לרשימת נפתחת או לבקרת תיבת משולבת |
XmlMapping | קישור נתונים מותאם אישית XML לבקרת תוכן; SetMapping(), Delete() |
DocumentBuilder.InsertStructuredDocumentTag | מכניס סוג של בקרת תוכן נתמכת במצב הסמן |