Appliquer une mise en forme personnalisée aux champs

Parfois, les utilisateurs doivent appliquer une mise en forme personnalisée aux champs. Dans cet article, nous examinerons quelques exemples de la façon dont cela peut être fait.

Pour en savoir plus sur les options, consultez la liste complète des propriétés pour chaque type de champ dans la classe correspondante.

Comment appliquer une Mise en forme personnalisée au Résultat du Champ

Aspose.Words fournit API pour la mise en forme personnalisée du résultat du champ. Vous pouvez implémenter l’interface IFieldResultFormatter pour contrôler la mise en forme du résultat du champ. Vous pouvez appliquer un commutateur de format numérique, c’est-à-dire # “#.##”, un commutateur de format date/heure, c’est-à-dire @ “dd.MM.yyyy”, et un commutateur de format numérique, c’est-à-dire * Ordinal.

L’exemple de code suivant montre comment appliquer une mise en forme personnalisée pour le résultat du champ.

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
DocumentBuilder builder = new DocumentBuilder();
Document document = builder.getDocument();
Field field = builder.insertField("=-1234567.89 \\# \"### ### ###.000\"", null);
document.getFieldOptions().setResultFormatter(new FieldResultFormatter("[%0$s]", null));
field.update();
document.save(dataDir+"FormatFieldResult_out.docx");
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
public class FieldResultFormatter implements IFieldResultFormatter {
private final String mNumberFormat;
private final String mDateFormat;
private final ArrayList mNumberFormatInvocations = new ArrayList();
private final ArrayList mDateFormatInvocations = new ArrayList();
public FieldResultFormatter(String numberFormat, String dateFormat) {
mNumberFormat = numberFormat;
mDateFormat = dateFormat;
}
public FieldResultFormatter() {
mNumberFormat = null;
mDateFormat = null;
}
public String format(String arg0, int arg1) {
// TODO Auto-generated method stub
return null;
}
public String format(double arg0, int arg1) {
// TODO Auto-generated method stub
return null;
}
public String formatNumeric(double value, String format) {
// TODO Auto-generated method stub
mNumberFormatInvocations.add(new Object[]{value, format});
return (mNumberFormat.isEmpty() || mNumberFormat == null) ? null
: String.format(mNumberFormat, value);
}
public String formatDateTime(Date value, String format, int calendarType) {
mDateFormatInvocations
.add(new Object[]{value, format, calendarType});
return (mDateFormat.isEmpty() || mDateFormat == null) ? null : String
.format(mDateFormat, value);
}

Comment évaluer la condition IF

Si vous souhaitez évaluer la condition IF après mail merge, vous pouvez utiliser la méthode EvaluateCondition qui renvoie immédiatement le résultat de l’évaluation de l’expression.

L’exemple de code suivant montre comment utiliser cette méthode:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
DocumentBuilder builder = new DocumentBuilder();
FieldIf field = (FieldIf) builder.insertField("IF 1 = 1", null);
int actualResult = field.evaluateCondition();
System.out.println(actualResult);

Comment appliquer une mise en forme personnalisée au Champ Horaire

Par défaut, Aspose.Words met à jour le champ TIME avec le format de temps court de la culture actuelle. Si vous souhaitez formater le champ TIME en fonction de vos besoins, vous pouvez y parvenir en implémentant l’interface IFieldUpdateCultureProvider.

Les exemples de code suivants montrent comment appliquer une mise en forme personnalisée au champ TIME:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
builder.insertField(FieldType.FIELD_TIME, true);
doc.getFieldOptions().setFieldUpdateCultureSource(FieldUpdateCultureSource.FIELD_CODE);
doc.getFieldOptions().setFieldUpdateCultureProvider(new FieldUpdateCultureProvider());
doc.save(getArtifactsDir() + "WorkingWithFields.FieldUpdateCulture.pdf");
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
private static class FieldUpdateCultureProvider implements IFieldUpdateCultureProvider
{
public CultureInfo getCulture(String name, Field field)
{
switch (name)
{
case "ru-RU":
CultureInfo culture = new CultureInfo(new Locale(name));
DateTimeFormatInfo format = culture.getDateTimeFormat();
format.setMonthNames(new String[]
{
"месяц 1", "месяц 2", "месяц 3", "месяц 4", "месяц 5", "месяц 6", "месяц 7", "месяц 8",
"месяц 9", "месяц 10", "месяц 11", "месяц 12", ""
});
format.setMonthGenitiveNames(format.getMonthNames());
format.setAbbreviatedMonthNames(new String[]
{
"мес 1", "мес 2", "мес 3", "мес 4", "мес 5", "мес 6", "мес 7", "мес 8", "мес 9", "мес 10",
"мес 11", "мес 12", ""
});
format.setAbbreviatedMonthGenitiveNames(format.getAbbreviatedMonthNames());
format.setDayNames(new String[]
{
"день недели 7", "день недели 1", "день недели 2", "день недели 3", "день недели 4",
"день недели 5", "день недели 6"
});
format.setAbbreviatedDayNames(new String[]
{ "день 7", "день 1", "день 2", "день 3", "день 4", "день 5", "день 6" });
format.setShortestDayNames(new String[] { "д7", "д1", "д2", "д3", "д4", "д5", "д6" });
format.setAMDesignator("До полудня");
format.setPMDesignator("После полудня");
final String PATTERN = "yyyy MM (MMMM) dd (dddd) hh:mm:ss tt";
format.setLongDatePattern(PATTERN);
format.setLongTimePattern(PATTERN);
format.setShortDatePattern(PATTERN);
format.setShortTimePattern(PATTERN);
return culture;
case "en-US":
return new CultureInfo(new Locale(name));
default:
return null;
}
}
}