درج فیلدها

چندین روش مختلف برای درج فیلدها در یک سند وجود دارد:

در این مقاله، ما به هر یک از روش‌ها با جزئیات بیشتری نگاه می‌کنیم و نحوه درج فیلدهای خاص با استفاده از این گزینه‌ها را تحلیل می‌کنیم.

درج فیلدها در یک سند با استفاده از DocumentBuilder

در Aspose.Words از روش InsertField برای درج فیلدهای جدید در یک سند استفاده می شود. پارامتر اول، کد فیلد کامل فیلدی را که قرار است درج شود، می پذیرد. پارامتر دوم اختیاری است و اجازه می دهد تا نتیجه فیلد فیلد به صورت دستی تنظیم شود. اگر این ارائه نشده باشد، فیلد به طور خودکار به روز می شود. برای درج فیلدی با مقدار فیلد خالی، می توانید null یا خالی را به این پارامتر ارسال کنید. اگر در مورد نحو کد فیلد خاص مطمئن نیستید، ابتدا فیلد را در Microsoft Word ایجاد کنید و برای دیدن کد فیلد آن جابجا شوید.

مثال کد زیر نحوه درج یک فیلد ادغام در یک سند را با استفاده از DocumentBuilder نشان می دهد:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
builder.InsertField(@"MERGEFIELD MyFieldName \* MERGEFORMAT");
doc.Save(ArtifactsDir + "WorkingWithFields.InsertField.docx");

از همین تکنیک برای درج فیلدهای تو در تو در فیلدهای دیگر استفاده می شود.

مثال کد زیر نحوه درج فیلدهای تو در تو در فیلد دیگر را با استفاده از DocumentBuilder نشان می دهد:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
for (int i = 0; i < 5; i++)
builder.InsertBreak(BreakType.PageBreak);
builder.MoveToHeaderFooter(HeaderFooterType.FooterPrimary);
// We want to insert a field like this:
// { IF {PAGE} <> {NUMPAGES} "See Next Page" "Last Page" }
Field field = builder.InsertField(@"IF ");
builder.MoveTo(field.Separator);
builder.InsertField("PAGE");
builder.Write(" <> ");
builder.InsertField("NUMPAGES");
builder.Write(" \"See Next Page\" \"Last Page\" ");
field.Update();
doc.Save(ArtifactsDir + "WorkingWithFields.InsertNestedFields.docx");

Locale را در سطح فیلد مشخص کنید

شناسه زبان یک مخفف عددی استاندارد بین المللی برای زبان یک کشور یا منطقه جغرافیایی است. با Aspose.Words، می توانید Locale را در سطح فیلد با استفاده از ویژگی LocaleId که شناسه محلی فیلد را دریافت یا تنظیم می کند، تعیین کنید.

مثال کد زیر نحوه استفاده از این گزینه را نشان می دهد:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
DocumentBuilder builder = new DocumentBuilder();
Field field = builder.InsertField(FieldType.FieldDate, true);
field.LocaleId = 1049;
builder.Document.Save(ArtifactsDir + "WorkingWithFields.SpecifylocaleAtFieldlevel.docx");

فیلد Untyped/Empty را درج کنید

اگر می خواهید فیلدهای بدون تایپ/خالی ({}) را درست همانطور که Microsoft Word اجازه می دهد وارد کنید، می توانید از روش InsertField با پارامتر FieldType.FieldNone استفاده کنید. برای درج یک فیلد در یک سند Word، می توانید ترکیب کلیدهای “Ctrl + F9” را فشار دهید.

مثال کد زیر نحوه درج یک فیلد خالی را در سند نشان می دهد:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
FieldUnknown field = (FieldUnknown) builder.InsertField(FieldType.FieldNone, false);
doc.Save(ArtifactsDir + "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-.NET
Document doc = new Document();
// Prepare IF field with two nested MERGEFIELD fields: { IF "left expression" = "right expression" "Firstname: { MERGEFIELD firstname }" "Lastname: { MERGEFIELD lastname }"}
FieldBuilder fieldBuilder = new FieldBuilder(FieldType.FieldIf)
.AddArgument("left expression")
.AddArgument("=")
.AddArgument("right expression")
.AddArgument(
new FieldArgumentBuilder()
.AddText("Firstname: ")
.AddField(new FieldBuilder(FieldType.FieldMergeField).AddArgument("firstname")))
.AddArgument(
new FieldArgumentBuilder()
.AddText("Lastname: ")
.AddField(new FieldBuilder(FieldType.FieldMergeField).AddArgument("lastname")));
// Insert IF field in exact location
Field field = fieldBuilder.BuildAndInsert(doc.FirstSection.Body.FirstParagraph);
field.Update();
doc.Save(ArtifactsDir + "Field.InsertFieldUsingFieldBuilder.docx");

درج فیلدها با استفاده از DOM

همچنین می توانید انواع مختلفی از فیلدها را با استفاده از Aspose.Words Document Object Model (DOM) وارد کنید. در این بخش به چند نمونه نگاه می کنیم.

درج فیلد Merge در یک سند با استفاده از DOM

فیلد MERGEFIELD در سند Word را می توان با کلاس FieldMergeField نشان داد. می توانید از کلاس FieldMergeField برای انجام عملیات زیر استفاده کنید:

  • نام فیلد ادغام را مشخص کنید
  • قالب بندی فیلد ادغام را مشخص کنید
  • متنی را که بین جداکننده فیلد و انتهای فیلد ادغام است مشخص کنید
  • در صورت خالی نبودن فیلد، متنی را که باید بعد از فیلد ادغام درج شود، مشخص کنید
  • اگر فیلد خالی نباشد، متنی را که باید قبل از فیلد ادغام درج شود، مشخص کنید

مثال کد زیر نحوه اضافه کردن فیلد MERGE با استفاده از DOM را به یک پاراگراف در یک سند نشان می دهد:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
Paragraph para = (Paragraph) doc.GetChildNodes(NodeType.Paragraph, true)[0];
builder.MoveTo(para);
// We want to insert a merge field like this:
// { " MERGEFIELD Test1 \\b Test2 \\f Test3 \\m \\v" }
FieldMergeField field = (FieldMergeField) builder.InsertField(FieldType.FieldMergeField, false);
// { " MERGEFIELD Test1" }
field.FieldName = "Test1";
// { " MERGEFIELD Test1 \\b Test2" }
field.TextBefore = "Test2";
// { " MERGEFIELD Test1 \\b Test2 \\f Test3 }
field.TextAfter = "Test3";
// { " MERGEFIELD Test1 \\b Test2 \\f Test3 \\m" }
field.IsMapped = true;
// { " MERGEFIELD Test1 \\b Test2 \\f Test3 \\m \\v" }
field.IsVerticalFormatting = true;
field.Update();
doc.Save(ArtifactsDir + "WorkingWithFields.InsertMergeFieldUsingDOM.docx");

درج فیلد Mail Merge ADDRESSBLOCK در یک سند با استفاده از DOM

فیلد ADDRESSBLOCK برای درج بلوک آدرس Mail Merge در سند Word استفاده می شود. فیلد ADDRESSBLOCK در سند Word را می توان با کلاس FieldAddressBlock نشان داد. می توانید از کلاس FieldAddressBlock برای انجام عملیات زیر استفاده کنید:

  • مشخص کنید که آیا نام کشور/منطقه در فیلد لحاظ شود یا خیر
  • مشخص کنید که آیا آدرس را بر اساس کشور/منطقه گیرنده که توسط POST*CODE تعریف شده است (اتحادیه پست جهانی 2006) قالب بندی شود یا خیر
  • نام کشور/منطقه حذف شده را مشخص کنید
  • نام و فرمت آدرس را مشخص کنید
  • شناسه زبان مورد استفاده برای قالب بندی آدرس را مشخص کنید

مثال کد زیر نحوه اضافه کردن فیلد Mail Merge ADDRESSBLOCK با استفاده از DOM را به یک پاراگراف در یک سند نشان می دهد:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
Paragraph para = (Paragraph) doc.GetChildNodes(NodeType.Paragraph, true)[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\" }
FieldAddressBlock field = (FieldAddressBlock) builder.InsertField(FieldType.FieldAddressBlock, false);
// { ADDRESSBLOCK \\c 1" }
field.IncludeCountryOrRegionName = "1";
// { ADDRESSBLOCK \\c 1 \\d" }
field.FormatAddressOnCountryOrRegion = true;
// { ADDRESSBLOCK \\c 1 \\d \\e Test2 }
field.ExcludedCountryOrRegionName = "Test2";
// { ADDRESSBLOCK \\c 1 \\d \\e Test2 \\f Test3 }
field.NameAndAddressFormat = "Test3";
// { ADDRESSBLOCK \\c 1 \\d \\e Test2 \\f Test3 \\l \"Test 4\" }
field.LanguageId = "Test 4";
field.Update();
doc.Save(ArtifactsDir + "WorkingWithFields.InsertMailMergeAddressBlockFieldUsingDOM.docx");

درج فیلد ADVANCE در یک سند بدون استفاده از 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-.NET
Document doc = new Document();
Paragraph para = (Paragraph) doc.GetChildNodes(NodeType.Paragraph, true)[0];
// We want to insert an Advance field like this:
// { ADVANCE \\d 10 \\l 10 \\r -3.3 \\u 0 \\x 100 \\y 100 }
FieldAdvance field = (FieldAdvance) para.AppendField(FieldType.FieldAdvance, false);
// { ADVANCE \\d 10 " }
field.DownOffset = "10";
// { ADVANCE \\d 10 \\l 10 }
field.LeftOffset = "10";
// { ADVANCE \\d 10 \\l 10 \\r -3.3 }
field.RightOffset = "-3.3";
// { ADVANCE \\d 10 \\l 10 \\r -3.3 \\u 0 }
field.UpOffset = "0";
// { ADVANCE \\d 10 \\l 10 \\r -3.3 \\u 0 \\x 100 }
field.HorizontalPosition = "100";
// { ADVANCE \\d 10 \\l 10 \\r -3.3 \\u 0 \\x 100 \\y 100 }
field.VerticalPosition = "100";
field.Update();
doc.Save(ArtifactsDir + "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-.NET
Document doc = new Document();
Paragraph para = (Paragraph) doc.GetChildNodes(NodeType.Paragraph, true)[0];
// We want to insert an Ask field like this:
// { ASK \"Test 1\" Test2 \\d Test3 \\o }
FieldAsk field = (FieldAsk) para.AppendField(FieldType.FieldAsk, false);
// { ASK \"Test 1\" " }
field.BookmarkName = "Test 1";
// { ASK \"Test 1\" Test2 }
field.PromptText = "Test2";
// { ASK \"Test 1\" Test2 \\d Test3 }
field.DefaultResponse = "Test3";
// { ASK \"Test 1\" Test2 \\d Test3 \\o }
field.PromptOnceOnMailMerge = true;
field.Update();
doc.Save(ArtifactsDir + "WorkingWithFields.InsertASKFieldWithOutDocumentBuilder.docx");

درج فیلد AUTHOR در یک سند بدون استفاده از DocumentBuilder

فیلد AUTHOR برای تعیین نام نویسنده سند از ویژگی های Document استفاده می شود. فیلد AUTHOR در سند Word را می توان با کلاس FieldAuthor نشان داد. می توانید از کلاس FieldAuthor برای انجام عملیات زیر استفاده کنید:

  • نام نویسنده سند را مشخص کنید

مثال کد زیر نحوه اضافه کردن فیلد AUTHOR با استفاده از DOM را به یک پاراگراف در یک سند نشان می دهد:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document();
Paragraph para = (Paragraph) doc.GetChildNodes(NodeType.Paragraph, true)[0];
// We want to insert an AUTHOR field like this:
// { AUTHOR Test1 }
FieldAuthor field = (FieldAuthor) para.AppendField(FieldType.FieldAuthor, false);
field.AuthorName = "Test1"; // { AUTHOR Test1 }
field.Update();
doc.Save(ArtifactsDir + "WorkingWithFields.InsertAuthorField.docx");

درج فیلد 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-.NET
Document doc = new Document();
Paragraph para = new Paragraph(doc);
// We want to insert an INCLUDETEXT field like this:
// { INCLUDETEXT "file path" }
FieldIncludeText fieldIncludeText = (FieldIncludeText) para.AppendField(FieldType.FieldIncludeText, false);
fieldIncludeText.BookmarkName = "bookmark";
fieldIncludeText.SourceFullName = MyDir + "IncludeText.docx";
doc.FirstSection.Body.AppendChild(para);
fieldIncludeText.Update();
doc.Save(ArtifactsDir + "WorkingWithFields.InsertIncludeFieldWithoutDocumentBuilder.docx");

درج فیلد TOA در یک سند بدون استفاده از DocumentBuilder

فیلد TOA (Table of Authorities) جدولی از مقامات را ایجاد و درج می کند. فیلد TOA ورودی هایی را که با فیلدهای TA (Table of Authorities Entry) مشخص شده اند جمع آوری می کند. Microsoft Office Word وقتی روی Insert Table of Authorities در گروه جدول مقامات در برگه References کلیک می کنید، فیلد TOA را وارد می کند. هنگامی که فیلد TOA را در سند خود مشاهده می کنید، نحو به صورت زیر است:

{ TOA [Switches ] }

مثال کد زیر نحوه اضافه کردن فیلد TOA با استفاده از DOM را به یک پاراگراف در یک سند نشان می دهد:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document();
Paragraph para = new Paragraph(doc);
// We want to insert TA and TOA fields like this:
// { TA \c 1 \l "Value 0" }
// { TOA \c 1 }
FieldTA fieldTA = (FieldTA) para.AppendField(FieldType.FieldTOAEntry, false);
fieldTA.EntryCategory = "1";
fieldTA.LongCitation = "Value 0";
doc.FirstSection.Body.AppendChild(para);
para = new Paragraph(doc);
FieldToa fieldToa = (FieldToa) para.AppendField(FieldType.FieldTOA, false);
fieldToa.EntryCategory = "1";
doc.FirstSection.Body.AppendChild(para);
fieldToa.Update();
doc.Save(ArtifactsDir + "WorkingWithFields.InsertTOAFieldWithoutDocumentBuilder.docx");