org.apache.maven.doxia.module.itext.ITextFont.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.maven.doxia.module.itext.ITextFont.java

Source

package org.apache.maven.doxia.module.itext;

/*
 * 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.
 */

import java.awt.Color;

import com.lowagie.text.ExceptionConverter;
import com.lowagie.text.Font;
import com.lowagie.text.FontFactory;
import com.lowagie.text.markup.MarkupTags;
import com.lowagie.text.pdf.BaseFont;

/**
 * <code>iText</code> wrapper object for font.
 *
 * @see com.lowagie.text.Font
 *
 * @author <a href="mailto:vincent.siveton@gmail.com">Vincent Siveton</a>
 * @version $Id$
 */
public class ITextFont {
    /** A normal font style */
    public static final String NORMAL = MarkupTags.CSS_VALUE_NORMAL;

    /** A bold font style */
    public static final String BOLD = MarkupTags.CSS_VALUE_BOLD;

    /** A italic font style */
    public static final String ITALIC = MarkupTags.CSS_VALUE_ITALIC;

    /** An underline font style */
    public static final String UNDERLINE = MarkupTags.CSS_VALUE_UNDERLINE;

    /** A default font name */
    public static final String DEFAULT_FONT_NAME = FontFactory.HELVETICA;

    /** A default font size */
    public static final float DEFAULT_FONT_SIZE = 12;

    /** A default font style */
    public static final String DEFAULT_FONT_STYLE = NORMAL;

    /** A default Black color definition */
    public static final int DEFAULT_FONT_COLOR_RED = Color.BLACK.getRed();

    /** A default Black color definition */
    public static final int DEFAULT_FONT_COLOR_GREEN = Color.BLACK.getGreen();

    /** A default Black color definition */
    public static final int DEFAULT_FONT_COLOR_BLUE = Color.BLACK.getBlue();

    private static final int SECTION_FONT_SIZE_0 = 24;
    private static final int SECTION_FONT_SIZE_1 = 22;
    private static final int SECTION_FONT_SIZE_2 = 20;
    private static final int SECTION_FONT_SIZE_3 = 18;
    private static final int SECTION_FONT_SIZE_4 = 16;
    private static final int SECTION_FONT_SIZE_DEFAULT = 14;

    private boolean monoSpaced = false;

    private float currentSize = 12;

    private int currentStyle = Font.NORMAL;

    private Color currentColor = Color.BLACK;

    /**
     * Default constructor
     */
    public ITextFont() {
        // nop
    }

    /**
     * Add bold style to the current style
     */
    public void addBold() {
        this.currentStyle += Font.BOLD;
    }

    /**
     * Remove bold style to the current style
     */
    public void removeBold() {
        this.currentStyle -= Font.BOLD;
        if (this.currentStyle < 0) {
            this.currentStyle = Font.NORMAL;
        }
    }

    /**
     * Add italic style to the current style
     */
    public void addItalic() {
        this.currentStyle += Font.ITALIC;
    }

    /**
     * Remove italic style to the current style
     */
    public void removeItalic() {
        this.currentStyle -= Font.ITALIC;
        if (this.currentStyle < 0) {
            this.currentStyle = Font.NORMAL;
        }
    }

    /**
     * Add italic style to the current style
     */
    public void addUnderlined() {
        this.currentStyle += Font.UNDERLINE;
    }

    /**
     * Remove italic style to the current style
     */
    public void removeUnderlined() {
        this.currentStyle -= Font.UNDERLINE;
        if (this.currentStyle < 0) {
            this.currentStyle = Font.NORMAL;
        }
    }

    /**
     * Add monospaced style to the current style
     *
     * @param monoSpaced true for monospaced style
     */
    public void setMonoSpaced(boolean monoSpaced) {
        this.monoSpaced = monoSpaced;
    }

    /**
     * Set a new font color
     *
     * @param color a new color
     */
    public void setColor(Color color) {
        this.currentColor = color;
    }

    /**
     * Set a new font color
     *
     * @param size a new size
     */
    public void setSize(float size) {
        this.currentSize = size;
    }

    /**
     * Return the font name
     *
     * @return the font name
     */
    public String getFontName() {
        Font font = getCurrentFont();

        return font.getFamilyname();
    }

    /**
     * Return the font style
     *
     * @return the font style
     */
    public String getFontStyle() {
        Font font = getCurrentFont();
        StringBuilder sb = new StringBuilder();

        if (font.isBold()) {
            sb.append(BOLD);
        }

        if (font.isItalic()) {
            if (sb.length() == 0) {
                sb.append(ITALIC);
            } else {
                sb.append(",");
                sb.append(ITALIC);
            }
        }

        if (font.isUnderlined()) {
            if (sb.length() == 0) {
                sb.append(UNDERLINE);
            } else {
                sb.append(",");
                sb.append(UNDERLINE);
            }
        }

        if (sb.length() == 0) {
            return NORMAL;
        }

        return sb.toString();
    }

    /**
     * Return the font name
     *
     * @return the font name
     */
    public String getFontSize() {
        Font font = getCurrentFont();

        return String.valueOf(font.getCalculatedSize());
    }

    /**
     * Return the font color blue
     *
     * @return the font color blue
     */
    public String getFontColorBlue() {
        Font font = getCurrentFont();

        return String.valueOf(font.color().getBlue());
    }

    /**
     * Return the font color green
     *
     * @return the font color green
     */
    public String getFontColorGreen() {
        Font font = getCurrentFont();

        return String.valueOf(font.color().getGreen());
    }

    /**
     * Return the font color red
     *
     * @return the font color red
     */
    public String getFontColorRed() {
        Font font = getCurrentFont();

        return String.valueOf(font.color().getRed());
    }

    /**
     * Get a section font size depending the section number.
     * <dl>
     * <dt>0</dt>
     * <dd>Chapter: font size = 24</dd>
     * <dt>1</dt>
     * <dd>Section 1: font size = 22</dd>
     * <dt>2</dt>
     * <dd>Section 2: font size = 20</dd>
     * <dt>3</dt>
     * <dd>Section 3: font size = 18</dd>
     * <dt>4</dt>
     * <dd>Section 4: font size = 16</dd>
     * <dt>5 ot otherwise</dt>
     * <dd>Section 5: font size = 14</dd>
     * </dl>
     *
     * @param sectionNumber a section number
     * @return a font size.
     */
    public static int getSectionFontSize(int sectionNumber) {
        switch (sectionNumber) {
        case 0:
            return SECTION_FONT_SIZE_0;

        case 1:
            return SECTION_FONT_SIZE_1;

        case 2:
            return SECTION_FONT_SIZE_2;

        case 3:
            return SECTION_FONT_SIZE_3;

        case 4:
            return SECTION_FONT_SIZE_4;

        case 5:
        default:
            return SECTION_FONT_SIZE_DEFAULT;
        }
    }

    /**
     * Convenience method to get a defined MonoSpaced font depending the wanted style and size.
     *
     * @param style the font style.
     * @param size the font size.
     * @param color the font color.
     * @return a font the font.
     */
    public static Font getMonoSpacedFont(int style, float size, Color color) {
        try {
            return new Font(BaseFont.createFont(BaseFont.COURIER, BaseFont.CP1252, false), size, style, color);
        } catch (Exception e) {
            throw new ExceptionConverter(e);
        }
    }

    /**
     * Convenience method to get a defined font depending the wanted style and size.
     *
     * @param style the font style.
     * @param size the font size.
     * @param color the font color.
     * @return a font the font.
     */
    public static Font getFont(int style, float size, Color color) {
        Font font = new Font();
        font.setFamily(DEFAULT_FONT_NAME);
        font.setStyle(style);
        font.setSize(size);
        font.setColor(color);
        return font;
    }

    /**
     * Convenience method to return the current font
     *
     * @return the current font
     */
    private Font getCurrentFont() {
        if (this.monoSpaced) {
            return getMonoSpacedFont(this.currentStyle, this.currentSize, this.currentColor);
        }

        return getFont(this.currentStyle, this.currentSize, this.currentColor);
    }
}