Прилагане на потребителски формат в полета

Понякога потребителите трябва да прилагат потребителски форматиране на полета. В тази статия ще разгледаме няколко примера как това може да бъде направено.

За да научите повече опции, вижте пълния списък на свойствата за всеки тип поле в съответния клас Имена.

Как да се прилага Потребителско форматиране на резултата от полето

Aspose.Words осигурява API за персонализиране на резултата от полето. Можете да приложите IFieldResultFormatter интерфейс за контрол на начина на форматиране на резултата от полето. Можете да приложите цифров форматен превключвател, т.е. # “##,” дата/времев формат, т.е. @ “dd.MM.гггг,” както и числен формат, т.е. * Ordinal.

Следният пример за код показва как да се прилага персонализиран форматиране за резултата от полето:

// 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;
}
}
}