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

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

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

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

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

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

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

Как да оцените IF състояние

Ако искате да оцените IF състояние след mail merge, Можете да използвате EvaluateCondition метод, който незабавно връща резултата от оценката на израза.

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

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

Как да приложите Потребителско форматиране към времето

По подразбиране Aspose.Words актуализации TIME поле с текущия формат за кратко време на културата. Ако искате да форматирате TIME поле според вашето изискване, можете да постигнете това чрез прилагане IFieldUpdateCultureProvider интерфейс.

Следните примери за код показват как да се прилага потребителски форматиране към 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;
}
}
}