Aplicar formatação personalizada aos campos
Às vezes, os usuários precisam aplicar formatação personalizada aos campos. Neste artigo, veremos alguns exemplos de como isso pode ser feito.
Para conhecer mais opções, consulte a lista completa de propriedades de cada tipo de campo na classe correspondente no Namespace de campos.
Como aplicar formatação personalizada ao resultado do campo
Aspose.Words fornece API para formatação personalizada do resultado do campo. Você pode implementar a interface IFieldResultFormatter para controlar como o resultado do campo é formatado. Você pode aplicar a troca de formato numérico, ou seja, # “#.##”, a troca de formato de data/hora, ou seja, @ “dd.MM.yyyy”, e a troca de formato numérico, ou seja, * Ordinal.
O exemplo de código a seguir mostra como aplicar formatação personalizada ao resultado do campo:
// 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(); | |
} |
Como avaliar a condição IF
Se quiser avaliar a condição IF
após mail merge, você pode usar o método EvaluateCondition que retorna imediatamente o resultado da avaliação da expressão.
O exemplo de código a seguir mostra como usar esse método:
// 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); |
Como aplicar formatação personalizada ao campo de hora
Por padrão, o Aspose.Words atualiza o campo TIME
com o formato de tempo curto da cultura atual. Descobrimos que há uma diferença entre a formatação Microsoft Word e a formatação .NET/Windows, e também entre diferentes versões de .NET Framework. Se você deseja formatar o campo TIME
de acordo com sua necessidade, você pode conseguir isso implementando a interface IFieldUpdateCultureProvider.
Os exemplos de código a seguir mostram como aplicar formatação personalizada ao campo 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; | |
} | |
} | |
} |