将自定义格式应用于字段
有时用户需要将自定义格式应用于字段。 在这篇文章中,我们将看看如何做到这一点的几个例子。
要了解更多选项,请参阅相应类中每个字段类型的属性的完整列表。
如何将自定义格式应用于字段结果
Aspose.Words为字段结果的自定义格式提供API。 您可以实现IFieldResultFormatter接口来控制字段结果的格式化方式。 您可以应用数字格式开关,即# “#.##",日期/时间格式开关,即@ “dd.MM.yyyy"和数字格式开关,即* 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
条件
如果要在mail merge之后计算IF
条件,则可以使用立即返回表达式计算结果的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; | |
} | |
} | |
} |