📄 font.java
字号:
/*
* $Id: Font.java 2739 2007-05-04 11:24:51Z blowagie $
* $Name$
*
* Copyright 1999, 2000, 2001, 2002 by Bruno Lowagie.
*
* The contents of this file are subject to the Mozilla Public License Version 1.1
* (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.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the License.
*
* The Original Code is 'iText, a free JAVA-PDF library'.
*
* The Initial Developer of the Original Code is Bruno Lowagie. Portions created by
* the Initial Developer are Copyright (C) 1999, 2000, 2001, 2002 by Bruno Lowagie.
* All Rights Reserved.
* Co-Developer of the code is Paulo Soares. Portions created by the Co-Developer
* are Copyright (C) 2000, 2001, 2002 by Paulo Soares. All Rights Reserved.
*
* Contributor(s): all the names of the contributors are added in the source code
* where applicable.
*
* Alternatively, the contents of this file may be used under the terms of the
* LGPL license (the "GNU LIBRARY GENERAL PUBLIC LICENSE"), in which case the
* provisions of LGPL are applicable instead of those above. If you wish to
* allow use of your version of this file only under the terms of the LGPL
* License and not to allow others to use your version of this file under
* the MPL, indicate your decision by deleting the provisions above and
* replace them with the notice and other provisions required by the LGPL.
* If you do not delete the provisions above, a recipient may use your version
* of this file under either the MPL or the GNU LIBRARY GENERAL PUBLIC LICENSE.
*
* This library is free software; you can redistribute it and/or modify it
* under the terms of the MPL as stated above or under the terms of the GNU
* Library General Public License as published by the Free Software Foundation;
* either version 2 of the License, or any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Library general Public License for more
* details.
*
* If you didn't download this code from the following link, you should check if
* you aren't using an obsolete version:
* http://www.lowagie.com/iText/
*/
package com.lowagie.text;
import java.awt.Color;
import com.lowagie.text.html.Markup;
import com.lowagie.text.pdf.BaseFont;
/**
* Contains all the specifications of a font: fontfamily, size, style and color.
* <P>
* Example: <BLOCKQUOTE>
*
* <PRE>
*
* Paragraph p = new Paragraph("This is a paragraph", <STRONG>new
* Font(Font.HELVETICA, 18, Font.BOLDITALIC, new Color(0, 0, 255)) </STRONG>);
*
* </PRE>
*
* </BLOCKQUOTE>
*/
public class Font implements Comparable {
// static membervariables for the different families
/** a possible value of a font family. */
public static final int COURIER = 0;
/** a possible value of a font family. */
public static final int HELVETICA = 1;
/** a possible value of a font family. */
public static final int TIMES_ROMAN = 2;
/** a possible value of a font family. */
public static final int SYMBOL = 3;
/** a possible value of a font family. */
public static final int ZAPFDINGBATS = 4;
// static membervariables for the different styles
/** this is a possible style. */
public static final int NORMAL = 0;
/** this is a possible style. */
public static final int BOLD = 1;
/** this is a possible style. */
public static final int ITALIC = 2;
/** this is a possible style. */
public static final int UNDERLINE = 4;
/** this is a possible style. */
public static final int STRIKETHRU = 8;
/** this is a possible style. */
public static final int BOLDITALIC = BOLD | ITALIC;
// static membervariables
/** the value of an undefined attribute. */
public static final int UNDEFINED = -1;
/** the value of the default size. */
public static final int DEFAULTSIZE = 12;
// membervariables
/** the value of the fontfamily. */
private int family = UNDEFINED;
/** the value of the fontsize. */
private float size = UNDEFINED;
/** the value of the style. */
private int style = UNDEFINED;
/** the value of the color. */
private Color color = null;
/** the external font */
private BaseFont baseFont = null;
// constructors
/**
* Copy constructor of a Font
*
* @param other
* the font that has to be copied
*/
public Font(Font other) {
this.family = other.family;
this.size = other.size;
this.style = other.style;
this.color = other.color;
this.baseFont = other.baseFont;
}
/**
* Constructs a Font.
*
* @param family
* the family to which this font belongs
* @param size
* the size of this font
* @param style
* the style of this font
* @param color
* the <CODE>Color</CODE> of this font.
*/
public Font(int family, float size, int style, Color color) {
this.family = family;
this.size = size;
this.style = style;
this.color = color;
}
/**
* Constructs a Font.
*
* @param bf
* the external font
* @param size
* the size of this font
* @param style
* the style of this font
* @param color
* the <CODE>Color</CODE> of this font.
*/
public Font(BaseFont bf, float size, int style, Color color) {
this.baseFont = bf;
this.size = size;
this.style = style;
this.color = color;
}
/**
* Constructs a Font.
*
* @param bf
* the external font
* @param size
* the size of this font
* @param style
* the style of this font
*/
public Font(BaseFont bf, float size, int style) {
this(bf, size, style, null);
}
/**
* Constructs a Font.
*
* @param bf
* the external font
* @param size
* the size of this font
*/
public Font(BaseFont bf, float size) {
this(bf, size, UNDEFINED, null);
}
/**
* Constructs a Font.
*
* @param bf
* the external font
*/
public Font(BaseFont bf) {
this(bf, UNDEFINED, UNDEFINED, null);
}
/**
* Constructs a Font.
*
* @param family
* the family to which this font belongs
* @param size
* the size of this font
* @param style
* the style of this font
*/
public Font(int family, float size, int style) {
this(family, size, style, null);
}
/**
* Constructs a Font.
*
* @param family
* the family to which this font belongs
* @param size
* the size of this font
*/
public Font(int family, float size) {
this(family, size, UNDEFINED, null);
}
/**
* Constructs a Font.
*
* @param family
* the family to which this font belongs
*/
public Font(int family) {
this(family, UNDEFINED, UNDEFINED, null);
}
/**
* Constructs a Font.
*/
public Font() {
this(UNDEFINED, UNDEFINED, UNDEFINED, null);
}
// implementation of the Comparable interface
/**
* Compares this <CODE>Font</CODE> with another
*
* @param object
* the other <CODE>Font</CODE>
* @return a value
*/
public int compareTo(Object object) {
if (object == null) {
return -1;
}
Font font;
try {
font = (Font) object;
if (baseFont != null && !baseFont.equals(font.getBaseFont())) {
return -2;
}
if (this.family != font.getFamily()) {
return 1;
}
if (this.size != font.getSize()) {
return 2;
}
if (this.style != font.getStyle()) {
return 3;
}
if (this.color == null) {
if (font.color == null) {
return 0;
}
return 4;
}
if (font.color == null) {
return 4;
}
if (this.color.equals(font.getColor())) {
return 0;
}
return 4;
} catch (ClassCastException cce) {
return -3;
}
}
// FAMILY
/**
* Gets the family of this font.
*
* @return the value of the family
*/
public int getFamily() {
return family;
}
/**
* Gets the familyname as a String.
*
* @return the familyname
*/
public String getFamilyname() {
String tmp = "unknown";
switch (getFamily()) {
case Font.COURIER:
return FontFactory.COURIER;
case Font.HELVETICA:
return FontFactory.HELVETICA;
case Font.TIMES_ROMAN:
return FontFactory.TIMES_ROMAN;
case Font.SYMBOL:
return FontFactory.SYMBOL;
case Font.ZAPFDINGBATS:
return FontFactory.ZAPFDINGBATS;
default:
if (baseFont != null) {
String[][] names = baseFont.getFamilyFontName();
for (int i = 0; i < names.length; i++) {
if ("0".equals(names[i][2])) {
return names[i][3];
}
if ("1033".equals(names[i][2])) {
tmp = names[i][3];
}
if ("".equals(names[i][2])) {
tmp = names[i][3];
}
}
}
}
return tmp;
}
/**
* Sets the family using a <CODE>String</CODE> ("Courier", "Helvetica",
* "Times New Roman", "Symbol" or "ZapfDingbats").
*
* @param family
* A <CODE>String</CODE> representing a certain font-family.
*/
public void setFamily(String family) {
this.family = getFamilyIndex(family);
}
/**
* Translates a <CODE>String</CODE> -value of a certain family into the
* index that is used for this family in this class.
*
* @param family
* A <CODE>String</CODE> representing a certain font-family
* @return the corresponding index
*/
public static int getFamilyIndex(String family) {
if (family.equalsIgnoreCase(FontFactory.COURIER)) {
return COURIER;
}
if (family.equalsIgnoreCase(FontFactory.HELVETICA)) {
return HELVETICA;
}
if (family.equalsIgnoreCase(FontFactory.TIMES_ROMAN)) {
return TIMES_ROMAN;
}
if (family.equalsIgnoreCase(FontFactory.SYMBOL)) {
return SYMBOL;
}
if (family.equalsIgnoreCase(FontFactory.ZAPFDINGBATS)) {
return ZAPFDINGBATS;
}
return UNDEFINED;
}
// SIZE
/**
* Gets the size of this font.
*
* @return a size
*/
public float getSize() {
return size;
}
/**
* Gets the size that can be used with the calculated <CODE>BaseFont
* </CODE>.
*
* @return the size that can be used with the calculated <CODE>BaseFont
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -