تطبيق التنسيق المخصص على الحقول

في بعض الأحيان يحتاج المستخدمون إلى تطبيق التنسيق المخصص على الحقول. في هذه المقالة، سننظر في بعض الأمثلة حول كيفية القيام بذلك.

لمعرفة المزيد من الخيارات، راجع القائمة الكاملة للخصائص لكل نوع حقل في الفئة المقابلة في مساحة اسم الحقول.

كيفية تطبيق التنسيق المخصص على النتيجة الميدانية

يوفر 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;
}
}
}