/*
 *  ====================================================================
 *    Licensed to the Apache Software Foundation (ASF) under one or more
 *    contributor license agreements.  See the NOTICE file distributed with
 *    this work for additional information regarding copyright ownership.
 *    The ASF licenses this file to You under the Apache License, Version 2.0
 *    (the "License"); you may not use this file except in compliance with
 *    the License.  You may obtain a copy of the License at
 *
 *        http://www.apache.org/licenses/LICENSE-2.0
 *
 *    Unless required by applicable law or agreed to in writing, software
 *    distributed under the License is distributed on an "AS IS" BASIS,
 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *    See the License for the specific language governing permissions and
 *    limitations under the License.
 * ====================================================================
 */
package org.apache.poi.xssf.usermodel;

import org.apache.poi.ss.usermodel.*;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFont;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTUnderlineProperty;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.STUnderlineValues;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTBooleanProperty;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTColor;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFontSize;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTVerticalAlignFontProperty;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.STVerticalAlignRun;


Author:Yegor Kozlov
/** * @author Yegor Kozlov */
public class XSSFFontFormatting implements FontFormatting { private IndexedColorMap _colorMap; private CTFont _font; /*package*/ XSSFFontFormatting(CTFont font, IndexedColorMap colorMap) { _font = font; _colorMap = colorMap; }
get the type of super or subscript for the font
See Also:
Returns:super or subscript option
/** * get the type of super or subscript for the font * * @return super or subscript option * @see #SS_NONE * @see #SS_SUPER * @see #SS_SUB */
@Override public short getEscapementType(){ if(_font.sizeOfVertAlignArray() == 0) return SS_NONE; CTVerticalAlignFontProperty prop = _font.getVertAlignArray(0); return (short)(prop.getVal().intValue() - 1); }
set the escapement type for the font
Params:
  • escapementType – super or subscript option
See Also:
/** * set the escapement type for the font * * @param escapementType super or subscript option * @see #SS_NONE * @see #SS_SUPER * @see #SS_SUB */
@Override public void setEscapementType(short escapementType){ _font.setVertAlignArray(null); if(escapementType != SS_NONE){ _font.addNewVertAlign().setVal(STVerticalAlignRun.Enum.forInt(escapementType + 1)); } }
XMLBeans and the XSD make this look like it can have multiple values, but it is maxOccurrs=1. Use get*Array(), it is much faster than get*List().
See Also:
  • isStruckout.isStruckout()
/** * XMLBeans and the XSD make this look like it can have multiple values, but it is maxOccurrs=1. * Use get*Array(), it is much faster than get*List(). * * @see org.apache.poi.ss.usermodel.FontFormatting#isStruckout() */
@Override public boolean isStruckout() { for (CTBooleanProperty bProp : _font.getStrikeArray()) return bProp.getVal(); return false; }
Returns:font color index
/** * @return font color index */
@Override public short getFontColorIndex(){ if(_font.sizeOfColorArray() == 0) return -1; int idx = 0; CTColor color = _font.getColorArray(0); if(color.isSetIndexed()) idx = (int)color.getIndexed(); return (short)idx; }
Params:
  • color – font color index
/** * @param color font color index */
@Override public void setFontColorIndex(short color){ _font.setColorArray(null); if(color != -1){ _font.addNewColor().setIndexed(color); } } @Override public XSSFColor getFontColor() { if(_font.sizeOfColorArray() == 0) return null; return XSSFColor.from(_font.getColorArray(0), _colorMap); } @Override public void setFontColor(Color color) { XSSFColor xcolor = XSSFColor.toXSSFColor(color); if (xcolor == null) { _font.getColorList().clear(); } else if(_font.sizeOfColorArray() == 0) { _font.addNewColor().setRgb(xcolor.getRGB()); } else { _font.setColorArray(0, xcolor.getCTColor()); } }
gets the height of the font in 1/20th point units
Returns:fontheight (in points/20); or -1 if not modified
/** * gets the height of the font in 1/20th point units * * @return fontheight (in points/20); or -1 if not modified */
@Override public int getFontHeight(){ if(_font.sizeOfSzArray() == 0) return -1; CTFontSize sz = _font.getSzArray(0); return (int)(20*sz.getVal()); }
Sets the height of the font in 1/20th point units
Params:
  • height – the height in twips (in points/20)
/** * Sets the height of the font in 1/20th point units * * @param height the height in twips (in points/20) */
@Override public void setFontHeight(int height){ _font.setSzArray(null); if(height != -1){ _font.addNewSz().setVal((double)height / 20); } }
get the type of underlining for the font
See Also:
Returns:font underlining type
/** * get the type of underlining for the font * * @return font underlining type * * @see #U_NONE * @see #U_SINGLE * @see #U_DOUBLE * @see #U_SINGLE_ACCOUNTING * @see #U_DOUBLE_ACCOUNTING */
@Override public short getUnderlineType(){ if(_font.sizeOfUArray() == 0) return U_NONE; CTUnderlineProperty u = _font.getUArray(0); switch(u.getVal().intValue()){ case STUnderlineValues.INT_SINGLE: return U_SINGLE; case STUnderlineValues.INT_DOUBLE: return U_DOUBLE; case STUnderlineValues.INT_SINGLE_ACCOUNTING: return U_SINGLE_ACCOUNTING; case STUnderlineValues.INT_DOUBLE_ACCOUNTING: return U_DOUBLE_ACCOUNTING; default: return U_NONE; } }
set the type of underlining type for the font
Params:
  • underlineType – super or subscript option
See Also:
/** * set the type of underlining type for the font * * @param underlineType super or subscript option * * @see #U_NONE * @see #U_SINGLE * @see #U_DOUBLE * @see #U_SINGLE_ACCOUNTING * @see #U_DOUBLE_ACCOUNTING */
@Override public void setUnderlineType(short underlineType){ _font.setUArray(null); if(underlineType != U_NONE){ FontUnderline fenum = FontUnderline.valueOf(underlineType); STUnderlineValues.Enum val = STUnderlineValues.Enum.forInt(fenum.getValue()); _font.addNewU().setVal(val); } }
get whether the font weight is set to bold or not
Returns:bold - whether the font is bold or not
/** * get whether the font weight is set to bold or not * * @return bold - whether the font is bold or not */
@Override public boolean isBold(){ return _font.sizeOfBArray() == 1 && _font.getBArray(0).getVal(); }
Returns:true if font style was set to italic
/** * @return true if font style was set to <i>italic</i> */
@Override public boolean isItalic(){ return _font.sizeOfIArray() == 1 && _font.getIArray(0).getVal(); }
set font style options.
Params:
  • italic – - if true, set posture style to italic, otherwise to normal
  • bold – if true, set font weight to bold, otherwise to normal
/** * set font style options. * * @param italic - if true, set posture style to italic, otherwise to normal * @param bold if true, set font weight to bold, otherwise to normal */
@Override public void setFontStyle(boolean italic, boolean bold){ _font.setIArray(null); _font.setBArray(null); if(italic) _font.addNewI().setVal(true); if(bold) _font.addNewB().setVal(true); }
set font style options to default values (non-italic, non-bold)
/** * set font style options to default values (non-italic, non-bold) */
@Override public void resetFontStyle(){ _font.set(CTFont.Factory.newInstance()); } }