הוספת שדות
ישנן מספר דרכים שונות להכניס שדות למסמך:
- שימוש DocumentBuilder
- שימוש FieldBuilder
- שימוש Aspose.Words מודל אובייקט מסמך (DOM)
במאמר זה, נבחן כל דרך בפירוט רב יותר ולנתח כיצד להוסיף שדות מסוימים באמצעות אפשרויות אלה.
הוספת שדות למסמך באמצעות DocumentBuilder
ב Aspose.Words ה InsertField השיטה משמשת להכנסת שדות חדשים למסמך. הפרמטר הראשון מקבל את קוד השדה המלא של השדה שיוכנס. הפרמטר השני הוא אופציונלי ומאפשר להגדיר את תוצאת השדה של השדה באופן ידני. אם זה לא מסופק אז השדה מתעדכן באופן אוטומטי. אתה יכול להעביר אפס או ריק לפרמטר זה כדי להוסיף שדה עם ערך שדה ריק. אם אינך בטוח לגבי תחביר קוד השדה המסוים, צור תחילה את השדה ב Microsoft Word ועבר לראות את קוד השדה שלו.
דוגמת הקוד הבאה מראה כיצד להוסיף שדה מיזוג למסמך באמצעות DocumentBuilder:
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
auto doc = MakeObject<Document>(); | |
auto builder = MakeObject<DocumentBuilder>(doc); | |
builder->InsertField(u"MERGEFIELD MyFieldName \\* MERGEFORMAT"); | |
doc->Save(ArtifactsDir + u"WorkingWithFields.InsertField.docx"); |
אותה טכניקה משמשת להכנסת שדות המקוננים בשדות אחרים.
דוגמת הקוד הבאה מראה כיצד להוסיף שדות מקוננים בתוך שדה אחר באמצעות DocumentBuilder:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
auto doc = MakeObject<Document>(); | |
auto builder = MakeObject<DocumentBuilder>(doc); | |
// Insert a few page breaks (just for testing) | |
for (int i = 0; i < 5; i++) | |
{ | |
builder->InsertBreak(BreakType::PageBreak); | |
} | |
// Move the DocumentBuilder cursor into the primary footer. | |
builder->MoveToHeaderFooter(HeaderFooterType::FooterPrimary); | |
// We want to insert a field like this: | |
// { IF {PAGE} <> {NUMPAGES} "See Next Page" "Last Page" } | |
System::SharedPtr<Field> field = builder->InsertField(u"IF "); | |
builder->MoveTo(field->get_Separator()); | |
builder->InsertField(u"PAGE"); | |
builder->Write(u" <> "); | |
builder->InsertField(u"NUMPAGES"); | |
builder->Write(u" \"See Next Page\" \"Last Page\" "); | |
field->Update(); | |
doc->Save(ArtifactsDir + u"WorkingWithFields.InsertNestedFields.docx"); |
ציין אזור ברמת השדה
מזהה שפה הוא קיצור מספרי בינלאומי סטנדרטי לשפה במדינה או באזור גיאוגרפי. באמצעות Aspose.Words, ניתן לציין את האזור ברמת השדה באמצעות המאפיין LocaleId, שמקבל או מגדיר את אזור השדה ID.
דוגמת הקוד הבאה מראה כיצד להשתמש באפשרות זו:
//For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
auto builder = MakeObject<DocumentBuilder>(); | |
SharedPtr<Field> field = builder->InsertField(FieldType::FieldDate, true); | |
field->set_LocaleId(1049); | |
builder->get_Document()->Save(ArtifactsDir + u"WorkingWithFields.SpecifylocaleAtFieldlevel.docx"); |
הכנס שדה לא מקליד / ריק
אם ברצונך להוסיף שדות לא מוקלדים/ריקים ({}) בדיוק כמו Microsoft Word מאפשר, אתה יכול להשתמש בשיטת InsertField עם הפרמטר FieldType.FieldNone. כדי להוסיף שדה למסמך Word, אתה יכול ללחוץ על" שילוב מקשים + F9".
דוגמת הקוד הבאה מראה כיצד להוסיף שדה ריק למסמך:
//For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
auto doc = MakeObject<Document>(); | |
auto builder = MakeObject<DocumentBuilder>(doc); | |
auto field = System::DynamicCast<FieldUnknown>(builder->InsertField(FieldType::FieldNone, false)); | |
doc->Save(ArtifactsDir + u"WorkingWithFields.InsertFieldNone.docx"); |
הוספת שדות למסמך באמצעות FieldBuilder
הדרך האלטרנטיבית להכניס שדות ב Aspose.Words היא הכיתה FieldBuilder. הוא מספק ממשק שוטף כדי לציין בוררי שדה וערכי ארגומנט כטקסט, צמתים או אפילו שדות מקוננים.
דוגמת הקוד הבאה מראה כיצד להוסיף שדה למסמך באמצעות FieldBuilder:
//For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
auto doc = MakeObject<Document>(); | |
auto firstName = MakeObject<FieldBuilder>(FieldType::FieldMergeField); | |
firstName->AddArgument("firstname"); | |
auto lastName = MakeObject<FieldBuilder>(FieldType::FieldMergeField); | |
lastName->AddArgument("lastname"); | |
auto firstnameArgumentBuilder = MakeObject<FieldArgumentBuilder>(); | |
firstnameArgumentBuilder->AddText(u"Firstname: "); | |
firstnameArgumentBuilder->AddField(firstName); | |
auto lastnameArgumentBuilder = MakeObject<FieldArgumentBuilder>(); | |
lastnameArgumentBuilder->AddText(u"Lastname: "); | |
lastnameArgumentBuilder->AddField(lastName); | |
// Prepare IF field with two nested MERGEFIELD fields: { IF "left expression" = "right expression" "Firstname: { MERGEFIELD firstname }" "Lastname: { MERGEFIELD lastname }"} | |
auto fieldBuilder = MakeObject<FieldBuilder>(FieldType::FieldIf); | |
fieldBuilder->AddArgument(u"left expression"); | |
fieldBuilder->AddArgument(u"="); | |
fieldBuilder->AddArgument(u"right expression"); | |
fieldBuilder->AddArgument(firstnameArgumentBuilder); | |
fieldBuilder->AddArgument(lastnameArgumentBuilder); | |
auto field = fieldBuilder->BuildAndInsert(doc->get_FirstSection()->get_Body()->AppendParagraph(String::Empty)); | |
field->Update(); | |
doc->Save(ArtifactsDir + u"Field.InsertFieldUsingFieldBuilder.docx"); |
הוספת שדות באמצעות DOM
ניתן גם להוסיף סוגים שונים של שדות באמצעות Aspose.Words מודל אובייקט מסמך (DOM). בחלק זה נבחן כמה דוגמאות.
הוספת שדה מיזוג למסמך באמצעות DOM
השדה MERGEFIELD
במסמך Word יכול להיות מיוצג על ידי הכיתה FieldMergeField. אתה יכול להשתמש בכיתה FieldMergeField כדי לבצע את הפעולות הבאות:
- ציין את שם שדה המיזוג
- ציין את העיצוב של שדה המיזוג
- ציין את הטקסט שנמצא בין מפריד השדות לסוף השדה של שדה המיזוג
- ציין את הטקסט שיוכנס לאחר שדה המיזוג אם השדה אינו ריק
- ציין את הטקסט שיוכנס לפני שדה המיזוג אם השדה אינו ריק
דוגמת הקוד הבאה מראה כיצד להוסיף את השדה MERGE
באמצעות DOM לפסקה במסמך:
//For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
auto doc = MakeObject<Document>(); | |
auto builder = MakeObject<DocumentBuilder>(doc); | |
auto para = System::DynamicCast<Paragraph>(doc->GetChildNodes(NodeType::Paragraph, true)->idx_get(0)); | |
builder->MoveTo(para); | |
// We want to insert a merge field like this: | |
// { " MERGEFIELD Test1 \\b Test2 \\f Test3 \\m \\v" } | |
auto field = System::DynamicCast<FieldMergeField>(builder->InsertField(FieldType::FieldMergeField, false)); | |
// { " MERGEFIELD Test1" } | |
field->set_FieldName(u"Test1"); | |
// { " MERGEFIELD Test1 \\b Test2" } | |
field->set_TextBefore(u"Test2"); | |
// { " MERGEFIELD Test1 \\b Test2 \\f Test3 } | |
field->set_TextAfter(u"Test3"); | |
// { " MERGEFIELD Test1 \\b Test2 \\f Test3 \\m" } | |
field->set_IsMapped(true); | |
// { " MERGEFIELD Test1 \\b Test2 \\f Test3 \\m \\v" } | |
field->set_IsVerticalFormatting(true); | |
field->Update(); | |
doc->Save(ArtifactsDir + u"WorkingWithFields.InsertMergeFieldUsingDOM.docx"); |
הוספת שדה בלוק כתובת Mail Merge למסמך באמצעות DOM
השדה ADDRESSBLOCK
משמש להכנסת בלוק כתובת Mail Merge במסמך Word. ADDRESSBLOCK
שדה במסמך Word יכול להיות מיוצג על ידי הכיתה FieldAddressBlock. אתה יכול להשתמש בכיתה FieldAddressBlock כדי לבצע את הפעולות הבאות:
- ציין אם לכלול את שם המדינה/האזור בשדה
- ציין אם לעצב את הכתובת בהתאם למדינה / אזור הנמען כפי שהוגדר על ידי POST * CODE (איחוד הדואר האוניברסלי 2006)
- ציין את שם המדינה/האזור שלא נכלל
- ציין את תבנית השם והכתובת
- ציין את השפה ID המשמשת לעיצוב הכתובת
דוגמת הקוד הבאה מראה כיצד להוסיף את השדה Mail Merge ADDRESSBLOCK
באמצעות DOM לפסקה במסמך:
//For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
auto doc = MakeObject<Document>(); | |
auto builder = MakeObject<DocumentBuilder>(doc); | |
auto para = System::DynamicCast<Paragraph>(doc->GetChildNodes(NodeType::Paragraph, true)->idx_get(0)); | |
builder->MoveTo(para); | |
// We want to insert a mail merge address block like this: | |
// { ADDRESSBLOCK \\c 1 \\d \\e Test2 \\f Test3 \\l \"Test 4\" } | |
auto field = System::DynamicCast<FieldAddressBlock>(builder->InsertField(FieldType::FieldAddressBlock, false)); | |
// { ADDRESSBLOCK \\c 1" } | |
field->set_IncludeCountryOrRegionName(u"1"); | |
// { ADDRESSBLOCK \\c 1 \\d" } | |
field->set_FormatAddressOnCountryOrRegion(true); | |
// { ADDRESSBLOCK \\c 1 \\d \\e Test2 } | |
field->set_ExcludedCountryOrRegionName(u"Test2"); | |
// { ADDRESSBLOCK \\c 1 \\d \\e Test2 \\f Test3 } | |
field->set_NameAndAddressFormat(u"Test3"); | |
// { ADDRESSBLOCK \\c 1 \\d \\e Test2 \\f Test3 \\l \"Test 4\" } | |
field->set_LanguageId(u"Test 4"); | |
field->Update(); | |
doc->Save(ArtifactsDir + u"WorkingWithFields.InsertMailMergeAddressBlockFieldUsingDOM.docx"); | |
הוספת שדה מראש למסמך ללא שימוש DocumentBuilder
השדה ADVANCE
משמש לקיזוז טקסט עוקב בתוך שורה שמאלה, ימינה, למעלה או למטה. השדה ADVANCE
במסמך Word יכול להיות מיוצג על ידי הכיתה FieldAdvance. אתה יכול להשתמש בכיתה FieldAdvance כדי לבצע את הפעולות הבאות:
- ציין את מספר הנקודות שבאמצעותן יש להעביר את הטקסט העוקב אחר השדה אנכית מהקצה העליון של הדף
- ציין את מספר הנקודות שבאמצעותן יש להזיז את הטקסט העוקב אחר השדה אופקית מהקצה השמאלי של העמודה, המסגרת או תיבת הטקסט
- ציין את מספר הנקודות שבאמצעותן יש להזיז את הטקסט העוקב אחר השדה שמאלה, ימינה, למעלה או למטה
דוגמת הקוד הבאה מראה כיצד להוסיף את השדה ADVANCE
באמצעות DOM לפסקה במסמך:
//For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
auto doc = MakeObject<Document>(); | |
auto para = System::DynamicCast<Paragraph>(doc->GetChildNodes(NodeType::Paragraph, true)->idx_get(0)); | |
// We want to insert an Advance field like this: | |
// { ADVANCE \\d 10 \\l 10 \\r -3.3 \\u 0 \\x 100 \\y 100 } | |
auto field = System::DynamicCast<FieldAdvance>(para->AppendField(FieldType::FieldAdvance, false)); | |
// { ADVANCE \\d 10 " } | |
field->set_DownOffset(u"10"); | |
// { ADVANCE \\d 10 \\l 10 } | |
field->set_LeftOffset(u"10"); | |
// { ADVANCE \\d 10 \\l 10 \\r -3.3 } | |
field->set_RightOffset(u"-3.3"); | |
// { ADVANCE \\d 10 \\l 10 \\r -3.3 \\u 0 } | |
field->set_UpOffset(u"0"); | |
// { ADVANCE \\d 10 \\l 10 \\r -3.3 \\u 0 \\x 100 } | |
field->set_HorizontalPosition(u"100"); | |
// { ADVANCE \\d 10 \\l 10 \\r -3.3 \\u 0 \\x 100 \\y 100 } | |
field->set_VerticalPosition(u"100"); | |
field->Update(); | |
doc->Save(ArtifactsDir + u"WorkingWithFields.InsertAdvanceFieldWithOutDocumentBuilder.docx"); |
הוספת שדה ASK
למסמך ללא שימוש DocumentBuilder
השדה ASK
משמש כדי לבקש מהמשתמש להקצות טקסט לסימניה במסמך Word. ASK
שדה במסמך Word יכול להיות מיוצג על ידי הכיתה FieldAsk. אתה יכול להשתמש בכיתה FieldAsk כדי לבצע את הפעולות הבאות:
- ציין את שם הסימנייה
- ציין תגובת משתמש ברירת מחדל (ערך ראשוני הכלול בחלון הפקודה)
- ציין אם יש לקבל את תגובת המשתמש פעם אחת לכל פעולה Mail Merge
- ציין את טקסט ההנחיה (כותרת חלון ההנחיה)
דוגמת הקוד הבאה מראה כיצד להוסיף את השדה ASK
באמצעות DOM לפסקה במסמך:
//For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
auto doc = MakeObject<Document>(); | |
auto para = System::DynamicCast<Paragraph>(doc->GetChildNodes(NodeType::Paragraph, true)->idx_get(0)); | |
// We want to insert an Ask field like this: | |
// { ASK \"Test 1\" Test2 \\d Test3 \\o } | |
auto field = System::DynamicCast<FieldAsk>(para->AppendField(FieldType::FieldAsk, false)); | |
// { ASK \"Test 1\" " } | |
field->set_BookmarkName(u"Test 1"); | |
// { ASK \"Test 1\" Test2 } | |
field->set_PromptText(u"Test2"); | |
// { ASK \"Test 1\" Test2 \\d Test3 } | |
field->set_DefaultResponse(u"Test3"); | |
// { ASK \"Test 1\" Test2 \\d Test3 \\o } | |
field->set_PromptOnceOnMailMerge(true); | |
field->Update(); | |
doc->Save(ArtifactsDir + u"WorkingWithFields.InsertASKFieldWithOutDocumentBuilder.docx"); |
הוספת שדה AUTHOR
למסמך ללא שימוש DocumentBuilder
השדה AUTHOR
משמש לציון שם מחבר המסמך מהמאפיינים Document
. השדה AUTHOR
במסמך Word יכול להיות מיוצג על ידי הכיתה FieldAuthor. אתה יכול להשתמש בכיתה FieldAuthor כדי לבצע את הפעולות הבאות:
- ציין את שם מחבר המסמך
דוגמת הקוד הבאה מראה כיצד להוסיף את השדה AUTHOR
באמצעות DOM לפסקה במסמך:
הוספת שדה INCLUDETEXT
למסמך ללא שימוש DocumentBuilder
השדה INCLUDETEXT
מוסיף את הטקסט והגרפיקה הכלולים במסמך ששמו בקוד השדה. אתה יכול להכניס את המסמך כולו או חלק מהמסמך שאליו מתייחסת סימניה. שדה זה במסמך Word מיוצג על ידי INCLUDETEXT. אתה יכול להשתמש בכיתה FieldIncludeText כדי לבצע את הפעולות הבאות:
- ציין את שם הסימנייה של המסמך הכלול
- ציין את מיקום המסמך
דוגמת הקוד הבאה מראה כיצד להוסיף את השדה INCLUDETEXT
באמצעות DOM לפסקה במסמך:
//For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
auto doc = MakeObject<Document>(); | |
auto para = MakeObject<Paragraph>(doc); | |
// We want to insert an INCLUDETEXT field like this: | |
// { INCLUDETEXT "file path" } | |
auto fieldIncludeText = System::DynamicCast<FieldIncludeText>(para->AppendField(FieldType::FieldIncludeText, false)); | |
fieldIncludeText->set_BookmarkName(u"bookmark"); | |
fieldIncludeText->set_SourceFullName(MyDir + u"IncludeText.docx"); | |
doc->get_FirstSection()->get_Body()->AppendChild(para); | |
fieldIncludeText->Update(); | |
doc->Save(ArtifactsDir + u"WorkingWithFields.InsertIncludeFieldWithoutDocumentBuilder.docx"); |
הוספת שדה TOA
למסמך ללא שימוש DocumentBuilder
השדה TOA
(Table of Authorities) בונה ומכניס טבלת רשויות. השדה TOA
אוסף ערכים המסומנים בשדות TA
(Table of Authorities Entry). Microsoft משרד Word מוסיף את השדה TOA
כאשר אתה לוחץ על Insert Table of Authorities בקבוצה Table of Authorities בכרטיסייה References. כשאתה מציג את השדה TOA
במסמך שלך, התחביר נראה כך:
{ TOA
[Switches ] }
דוגמת הקוד הבאה מראה כיצד להוסיף את השדה TOA
באמצעות DOM לפסקה במסמך:
//For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
auto doc = MakeObject<Document>(); | |
auto para = MakeObject<Paragraph>(doc); | |
// We want to insert TA and TOA fields like this: | |
// { TA \c 1 \l "Value 0" } | |
// { TOA \c 1 } | |
auto fieldTA = System::DynamicCast<FieldTA>(para->AppendField(FieldType::FieldTOAEntry, false)); | |
fieldTA->set_EntryCategory(u"1"); | |
fieldTA->set_LongCitation(u"Value 0"); | |
doc->get_FirstSection()->get_Body()->AppendChild(para); | |
para = MakeObject<Paragraph>(doc); | |
auto fieldToa = System::DynamicCast<FieldToa>(para->AppendField(FieldType::FieldTOA, false)); | |
fieldToa->set_EntryCategory(u"1"); | |
doc->get_FirstSection()->get_Body()->AppendChild(para); | |
fieldToa->Update(); | |
doc->Save(ArtifactsDir + u"WorkingWithFields.InsertTOAFieldWithoutDocumentBuilder.docx"); |