قالب بندی سفارشی را در فیلدها اعمال کنید

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

برای آشنایی با گزینه‌های بیشتر، فهرست کامل ویژگی‌ها را برای هر نوع فیلد در کلاس مربوطه در فضای نام فیلدها ببینید.

نحوه اعمال قالب بندی سفارشی در نتیجه فیلد

Aspose.Words API را برای قالب بندی سفارشی نتایج فیلد فراهم می کند. می توانید رابط IFieldResultFormatter را برای کنترل نحوه قالب بندی نتیجه فیلد پیاده سازی کنید. می توانید سوئیچ فرمت عددی، یعنی # “#.##"، سوئیچ فرمت تاریخ/زمان، یعنی @ “dd.MM.yyyy” و سوئیچ قالب عددی، یعنی * ترتیبی را اعمال کنید.

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

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document();
doc.FieldOptions.ResultFormatter = new FieldResultFormatter("[{0:N2}]", null);
DocumentBuilder builder = new DocumentBuilder(doc);
Field field = builder.InsertField("=-1234567.89 \\# \"### ### ###.000\"", null);
field.Update();
doc.Save(ArtifactsDir + "WorkingWithFields.FormatFieldResult.docx");
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
class FieldResultFormatter : IFieldResultFormatter
{
public FieldResultFormatter(string numberFormat, string dateFormat)
{
mNumberFormat = numberFormat;
mDateFormat = dateFormat;
}
public FieldResultFormatter()
: this(null, null)
{
}
public override string FormatNumeric(double value, string format)
{
mNumberFormatInvocations.Add(new object[] { value, format });
return string.IsNullOrEmpty(mNumberFormat)
? null
: string.Format(mNumberFormat, value);
}
public override string FormatDateTime(DateTime value, string format, CalendarType calendarType)
{
mDateFormatInvocations.Add(new object[] { value, format, calendarType });
return string.IsNullOrEmpty(mDateFormat)
? null
: string.Format(mDateFormat, value);
}
public override string Format(string value, GeneralFormat format)
{
throw new NotImplementedException();
}
public override string Format(double value, GeneralFormat format)
{
throw new NotImplementedException();
}
private readonly string mNumberFormat;
private readonly string mDateFormat;
private readonly ArrayList mNumberFormatInvocations = new ArrayList();
private readonly ArrayList mDateFormatInvocations = new ArrayList();
}

نحوه ارزیابی وضعیت IF

اگر می خواهید شرایط IF را بعد از Mail Merge ارزیابی کنید، می توانید از روش EvaluateCondition استفاده کنید که بلافاصله نتیجه ارزیابی عبارت را برمی گرداند.

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

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
DocumentBuilder builder = new DocumentBuilder();
FieldIf field = (FieldIf) builder.InsertField("IF 1 = 1", null);
FieldIfComparisonResult actualResult = field.EvaluateCondition();
Console.WriteLine(actualResult);

نحوه اعمال قالب بندی سفارشی در زمان فیلد

Aspose.Words به‌طور پیش‌فرض، فیلد TIME را با فرمت زمان کوتاه کنونی به‌روزرسانی می‌کند. ما متوجه شدیم که بین قالب بندی Microsoft Word و قالب بندی .NET/Windows و همچنین بین نسخه های مختلف .NET Framework تفاوت وجود دارد. اگر می‌خواهید فیلد TIME را بر اساس نیاز خود قالب‌بندی کنید، می‌توانید با پیاده‌سازی رابط IFieldUpdateCultureProvider به این هدف برسید.

مثال‌های کد زیر نحوه اعمال قالب‌بندی سفارشی در فیلد TIME را نشان می‌دهد:

// 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(FieldType.FieldTime, true);
doc.FieldOptions.FieldUpdateCultureSource = FieldUpdateCultureSource.FieldCode;
doc.FieldOptions.FieldUpdateCultureProvider = new FieldUpdateCultureProvider();
doc.Save(ArtifactsDir + "WorkingWithFields.FieldUpdateCulture.pdf");
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
class FieldUpdateCultureProvider : IFieldUpdateCultureProvider
{
public CultureInfo GetCulture(string name, Field field)
{
switch (name)
{
case "ru-RU":
CultureInfo culture = new CultureInfo(name, false);
DateTimeFormatInfo format = culture.DateTimeFormat;
format.MonthNames = new[]
{
"месяц 1", "месяц 2", "месяц 3", "месяц 4", "месяц 5", "месяц 6", "месяц 7", "месяц 8",
"месяц 9", "месяц 10", "месяц 11", "месяц 12", ""
};
format.MonthGenitiveNames = format.MonthNames;
format.AbbreviatedMonthNames = new[]
{
"мес 1", "мес 2", "мес 3", "мес 4", "мес 5", "мес 6", "мес 7", "мес 8", "мес 9", "мес 10",
"мес 11", "мес 12", ""
};
format.AbbreviatedMonthGenitiveNames = format.AbbreviatedMonthNames;
format.DayNames = new[]
{
"день недели 7", "день недели 1", "день недели 2", "день недели 3", "день недели 4",
"день недели 5", "день недели 6"
};
format.AbbreviatedDayNames = new[]
{ "день 7", "день 1", "день 2", "день 3", "день 4", "день 5", "день 6" };
format.ShortestDayNames = new[] { "д7", "д1", "д2", "д3", "д4", "д5", "д6" };
format.AMDesignator = "До полудня";
format.PMDesignator = "После полудня";
const string pattern = "yyyy MM (MMMM) dd (dddd) hh:mm:ss tt";
format.LongDatePattern = pattern;
format.LongTimePattern = pattern;
format.ShortDatePattern = pattern;
format.ShortTimePattern = pattern;
return culture;
case "en-US":
return new CultureInfo(name, false);
default:
return null;
}
}
}