123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242 |
- /*
- * ====================================================================
- * 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.Color;
- import org.apache.poi.ss.usermodel.Font;
- import org.apache.poi.ss.usermodel.FontFormatting;
- import org.apache.poi.ss.usermodel.FontUnderline;
- import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTColor;
- import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFont;
- import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFontSize;
- import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTUnderlineProperty;
- import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTVerticalAlignFontProperty;
- import org.openxmlformats.schemas.spreadsheetml.x2006.main.STUnderlineValues;
- import org.openxmlformats.schemas.spreadsheetml.x2006.main.STVerticalAlignRun;
-
-
- /**
- * @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
- *
- * @return super or subscript option
- * @see org.apache.poi.ss.usermodel.Font#SS_NONE
- * @see org.apache.poi.ss.usermodel.Font#SS_SUPER
- * @see org.apache.poi.ss.usermodel.Font#SS_SUB
- */
- @Override
- public short getEscapementType(){
- if(_font.sizeOfVertAlignArray() == 0) return org.apache.poi.ss.usermodel.Font.SS_NONE;
-
- CTVerticalAlignFontProperty prop = _font.getVertAlignArray(0);
- return (short)(prop.getVal().intValue() - 1);
- }
-
- /**
- * set the escapement type for the font
- *
- * @param escapementType super or subscript option
- * @see org.apache.poi.ss.usermodel.Font#SS_NONE
- * @see org.apache.poi.ss.usermodel.Font#SS_SUPER
- * @see org.apache.poi.ss.usermodel.Font#SS_SUB
- */
- @Override
- public void setEscapementType(short escapementType){
- _font.setVertAlignArray(null);
- if(escapementType != org.apache.poi.ss.usermodel.Font.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 org.apache.poi.ss.usermodel.FontFormatting#isStruckout()
- */
- @Override
- public boolean isStruckout() {
- return _font.sizeOfStrikeArray() > 0 && _font.getStrikeArray(0).getVal();
- }
-
- /**
- * @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;
- }
-
- /**
- * @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
- *
- * @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
- *
- * @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
- *
- * @return font underlining type
- *
- * @see Font#U_NONE
- * @see Font#U_SINGLE
- * @see Font#U_DOUBLE
- * @see Font#U_SINGLE_ACCOUNTING
- * @see Font#U_DOUBLE_ACCOUNTING
- */
- @Override
- public short getUnderlineType(){
- if(_font.sizeOfUArray() == 0) return Font.U_NONE;
- CTUnderlineProperty u = _font.getUArray(0);
- switch(u.getVal().intValue()){
- case STUnderlineValues.INT_SINGLE: return Font.U_SINGLE;
- case STUnderlineValues.INT_DOUBLE: return Font.U_DOUBLE;
- case STUnderlineValues.INT_SINGLE_ACCOUNTING: return Font.U_SINGLE_ACCOUNTING;
- case STUnderlineValues.INT_DOUBLE_ACCOUNTING: return Font.U_DOUBLE_ACCOUNTING;
- default: return Font.U_NONE;
- }
- }
-
- /**
- * set the type of underlining type for the font
- *
- * @param underlineType super or subscript option
- *
- * @see Font#U_NONE
- * @see Font#U_SINGLE
- * @see Font#U_DOUBLE
- * @see Font#U_SINGLE_ACCOUNTING
- * @see Font#U_DOUBLE_ACCOUNTING
- */
- @Override
- public void setUnderlineType(short underlineType){
- _font.setUArray(null);
- if(underlineType != Font.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
- *
- * @return bold - whether the font is bold or not
- */
- @Override
- public boolean isBold(){
- return _font.sizeOfBArray() == 1 && _font.getBArray(0).getVal();
- }
-
- /**
- * @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.
- *
- * @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)
- */
- @Override
- public void resetFontStyle(){
- _font.set(CTFont.Factory.newInstance());
- }
- }
|