diff --git a/fine-itext-old/src/com/fr/third/com/lowagie/text/Font.java b/fine-itext-old/src/com/fr/third/com/lowagie/text/Font.java old mode 100755 new mode 100644 index d8b0de83d..012793cef --- a/fine-itext-old/src/com/fr/third/com/lowagie/text/Font.java +++ b/fine-itext-old/src/com/fr/third/com/lowagie/text/Font.java @@ -1,790 +1,780 @@ -/* - * $Id: Font.java 3678 2009-02-07 14:46:01Z blowagie $ - * - * 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.fr.third.com.lowagie.text; - -import java.awt.Color; - -import com.fr.third.com.lowagie.text.html.Markup; -import com.fr.third.com.lowagie.text.pdf.BaseFont; - -/** - * Contains all the specifications of a font: fontfamily, size, style and color. - *

- * Example:

- * - *
- * 
- * Paragraph p = new Paragraph("This is a paragraph", new
- * Font(Font.HELVETICA, 18, Font.BOLDITALIC, new Color(0, 0, 255)) );
- * 
- * 
- * - *
- */ - -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 Color 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 Color 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 Font with another - * - * @param object - * the other Font - * @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 String ("Courier", "Helvetica", - * "Times New Roman", "Symbol" or "ZapfDingbats"). - * - * @param family - * A String representing a certain font-family. - */ - public void setFamily(String family) { - this.family = getFamilyIndex(family); - } - - /** - * Translates a String -value of a certain family into the - * index that is used for this family in this class. - * - * @param family - * A String 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 BaseFont - * . - * - * @return the size that can be used with the calculated BaseFont - * - */ - public float getCalculatedSize() { - float s = this.size; - if (s == UNDEFINED) { - s = DEFAULTSIZE; - } - return s; - } - - /** - * Gets the leading that can be used with this font. - * - * @param linespacing - * a certain linespacing - * @return the height of a line - */ - public float getCalculatedLeading(float linespacing) { - return linespacing * getCalculatedSize(); - } - - /** - * Sets the size. - * - * @param size - * The new size of the font. - */ - public void setSize(float size) { - this.size = size; - } - - // STYLE - - /** - * Gets the style of this font. - * - * @return a size - */ - public int getStyle() { - return style; - } - - /** - * Gets the style that can be used with the calculated BaseFont - * . - * - * @return the style that can be used with the calculated BaseFont - * - */ - public int getCalculatedStyle() { - int style = this.style; - if (style == UNDEFINED) { - style = NORMAL; - } - if (baseFont != null) - return style; - if (family == SYMBOL || family == ZAPFDINGBATS) - return style; - else - return style & (~BOLDITALIC); - } - - /** - * checks if this font is Bold. - * - * @return a boolean - */ - public boolean isBold() { - if (style == UNDEFINED) { - return false; - } - return (style & BOLD) == BOLD; - } - - /** - * checks if this font is Bold. - * - * @return a boolean - */ - public boolean isItalic() { - if (style == UNDEFINED) { - return false; - } - return (style & ITALIC) == ITALIC; - } - - /** - * checks if this font is underlined. - * - * @return a boolean - */ - public boolean isUnderlined() { - if (style == UNDEFINED) { - return false; - } - return (style & UNDERLINE) == UNDERLINE; - } - - /** - * checks if the style of this font is STRIKETHRU. - * - * @return a boolean - */ - public boolean isStrikethru() { - if (style == UNDEFINED) { - return false; - } - return (style & STRIKETHRU) == STRIKETHRU; - } - - /** - * Sets the style. - * - * @param style - * the style. - */ - public void setStyle(int style) { - this.style = style; - } - - /** - * Sets the style using a String containing one of more of - * the following values: normal, bold, italic, underline, strike. - * - * @param style - * A String representing a certain style. - */ - public void setStyle(String style) { - if (this.style == UNDEFINED) - this.style = NORMAL; - this.style |= getStyleValue(style); - } - - /** - * Translates a String -value of a certain style into the - * index value is used for this style in this class. - * - * @param style - * A String - * @return the corresponding value - */ - public static int getStyleValue(String style) { - int s = 0; - if (style.indexOf(Markup.CSS_VALUE_NORMAL) != -1) { - s |= NORMAL; - } - if (style.indexOf(Markup.CSS_VALUE_BOLD) != -1) { - s |= BOLD; - } - if (style.indexOf(Markup.CSS_VALUE_ITALIC) != -1) { - s |= ITALIC; - } - if (style.indexOf(Markup.CSS_VALUE_OBLIQUE) != -1) { - s |= ITALIC; - } - if (style.indexOf(Markup.CSS_VALUE_UNDERLINE) != -1) { - s |= UNDERLINE; - } - if (style.indexOf(Markup.CSS_VALUE_LINETHROUGH) != -1) { - s |= STRIKETHRU; - } - return s; - } - - // COLOR - - /** - * Gets the color of this font. - * - * @return a color - */ - public Color getColor() { - return color; - } - - /** - * Sets the color. - * - * @param color - * the new color of the font - */ - - public void setColor(Color color) { - this.color = color; - } - - /** - * Sets the color. - * - * @param red - * the red-value of the new color - * @param green - * the green-value of the new color - * @param blue - * the blue-value of the new color - */ - public void setColor(int red, int green, int blue) { - this.color = new Color(red, green, blue); - } - - // BASEFONT - - /** - * Gets the BaseFont inside this object. - * - * @return the BaseFont - */ - public BaseFont getBaseFont() { - return baseFont; - } - - /** - * Gets the BaseFont this class represents. For the built-in - * fonts a BaseFont is calculated. - * - * @param specialEncoding - * true to use the special encoding for Symbol and - * ZapfDingbats, false to always use Cp1252 - * - * @return the BaseFont this class represents - */ - public BaseFont getCalculatedBaseFont(boolean specialEncoding) { - if (baseFont != null) - return baseFont; - int style = this.style; - if (style == UNDEFINED) { - style = NORMAL; - } - String fontName = BaseFont.HELVETICA; - String encoding = BaseFont.WINANSI; - BaseFont cfont = null; - switch (family) { - case COURIER: - switch (style & BOLDITALIC) { - case BOLD: - fontName = BaseFont.COURIER_BOLD; - break; - case ITALIC: - fontName = BaseFont.COURIER_OBLIQUE; - break; - case BOLDITALIC: - fontName = BaseFont.COURIER_BOLDOBLIQUE; - break; - default: - //case NORMAL: - fontName = BaseFont.COURIER; - break; - } - break; - case TIMES_ROMAN: - switch (style & BOLDITALIC) { - case BOLD: - fontName = BaseFont.TIMES_BOLD; - break; - case ITALIC: - fontName = BaseFont.TIMES_ITALIC; - break; - case BOLDITALIC: - fontName = BaseFont.TIMES_BOLDITALIC; - break; - default: - case NORMAL: - fontName = BaseFont.TIMES_ROMAN; - break; - } - break; - case SYMBOL: - fontName = BaseFont.SYMBOL; - if (specialEncoding) - encoding = BaseFont.SYMBOL; - break; - case ZAPFDINGBATS: - fontName = BaseFont.ZAPFDINGBATS; - if (specialEncoding) - encoding = BaseFont.ZAPFDINGBATS; - break; - default: - case Font.HELVETICA: - switch (style & BOLDITALIC) { - case BOLD: - fontName = BaseFont.HELVETICA_BOLD; - break; - case ITALIC: - fontName = BaseFont.HELVETICA_OBLIQUE; - break; - case BOLDITALIC: - fontName = BaseFont.HELVETICA_BOLDOBLIQUE; - break; - default: - case NORMAL: - fontName = BaseFont.HELVETICA; - break; - } - break; - } - try { - cfont = BaseFont.createFont(fontName, encoding, false); - } catch (Exception ee) { - throw new ExceptionConverter(ee); - } - return cfont; - } - - - // Helper methods - - /** - * Checks if the properties of this font are undefined or null. - *

- * If so, the standard should be used. - * - * @return a boolean - */ - public boolean isStandardFont() { - return (family == UNDEFINED && size == UNDEFINED && style == UNDEFINED - && color == null && baseFont == null); - } - - /** - * Replaces the attributes that are equal to null with the - * attributes of a given font. - * - * @param font - * the font of a bigger element class - * @return a Font - */ - public Font difference(Font font) { - if (font == null) return this; - // size - float dSize = font.size; - if (dSize == UNDEFINED) { - dSize = this.size; - } - // style - int dStyle = UNDEFINED; - int style1 = this.style; - int style2 = font.getStyle(); - if (style1 != UNDEFINED || style2 != UNDEFINED) { - if (style1 == UNDEFINED) - style1 = 0; - if (style2 == UNDEFINED) - style2 = 0; - dStyle = style1 | style2; - } - // color - Color dColor = font.color; - if (dColor == null) { - dColor = this.color; - } - // family - if (font.baseFont != null) { - return new Font(font.baseFont, dSize, dStyle, dColor); - } - if (font.getFamily() != UNDEFINED) { - return new Font(font.family, dSize, dStyle, dColor); - } - if (this.baseFont != null) { - if (dStyle == style1) { - return new Font(this.baseFont, dSize, dStyle, dColor); - } else { - return FontFactory.getFont(this.getFamilyname(), dSize, dStyle, - dColor); - } - } - return new Font(this.family, dSize, dStyle, dColor); - } - -} +/* + * $Id: Font.java 3678 2009-02-07 14:46:01Z blowagie $ + * + * 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.fr.third.com.lowagie.text; + +import com.fr.third.com.lowagie.text.ExceptionConverter; +import com.fr.third.com.lowagie.text.FontFactory; +import com.fr.third.com.lowagie.text.html.Markup; +import com.fr.third.com.lowagie.text.pdf.BaseFont; + +import java.awt.Color; + +/** + * Contains all the specifications of a font: fontfamily, size, style and color. + *

+ * Example:

+ * + *
+ * 
+ * Paragraph p = new Paragraph("This is a paragraph", new
+ * Font(Font.HELVETICA, 18, Font.BOLDITALIC, new Color(0, 0, 255)) );
+ * 
+ * 
+ * + *
+ */ + +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; + + private String fontName = ""; + + + public String getFontName(){ + return fontName; + } + + + // constructors + + /** + * Copy constructor of a Font + * + * @param other + * the font that has to be copied + */ + public Font(com.fr.third.com.lowagie.text.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 Color 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; + } + + public Font(String face, float size, int style, Color color) { + this.fontName = face; + 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 Color 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 Font with another + * + * @param object + * the other Font + * @return a value + */ + public int compareTo(Object object) { + if (object == null) { + return -1; + } + com.fr.third.com.lowagie.text.Font font; + try { + font = (com.fr.third.com.lowagie.text.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() { + return getFontName(); + } + + /** + * Sets the family using a String ("Courier", "Helvetica", + * "Times New Roman", "Symbol" or "ZapfDingbats"). + * + * @param family + * A String representing a certain font-family. + */ + public void setFamily(String family) { + this.fontName = family; + } + + + /** + * Translates a String -value of a certain family into the + * index that is used for this family in this class. + * + * @param family + * A String 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 BaseFont + * . + * + * @return the size that can be used with the calculated BaseFont + * + */ + public float getCalculatedSize() { + float s = this.size; + if (s == UNDEFINED) { + s = DEFAULTSIZE; + } + return s; + } + + /** + * Gets the leading that can be used with this font. + * + * @param linespacing + * a certain linespacing + * @return the height of a line + */ + public float getCalculatedLeading(float linespacing) { + return linespacing * getCalculatedSize(); + } + + /** + * Sets the size. + * + * @param size + * The new size of the font. + */ + public void setSize(float size) { + this.size = size; + } + + // STYLE + + /** + * Gets the style of this font. + * + * @return a size + */ + public int getStyle() { + return style; + } + + /** + * Gets the style that can be used with the calculated BaseFont + * . + * + * @return the style that can be used with the calculated BaseFont + * + */ + public int getCalculatedStyle() { + int style = this.style; + if (style == UNDEFINED) { + style = NORMAL; + } + if (baseFont != null) + return style; + if (family == SYMBOL || family == ZAPFDINGBATS) + return style; + else + return style & (~BOLDITALIC); + } + + /** + * checks if this font is Bold. + * + * @return a boolean + */ + public boolean isBold() { + if (style == UNDEFINED) { + return false; + } + return (style & BOLD) == BOLD; + } + + /** + * checks if this font is Bold. + * + * @return a boolean + */ + public boolean isItalic() { + if (style == UNDEFINED) { + return false; + } + return (style & ITALIC) == ITALIC; + } + + /** + * checks if this font is underlined. + * + * @return a boolean + */ + public boolean isUnderlined() { + if (style == UNDEFINED) { + return false; + } + return (style & UNDERLINE) == UNDERLINE; + } + + /** + * checks if the style of this font is STRIKETHRU. + * + * @return a boolean + */ + public boolean isStrikethru() { + if (style == UNDEFINED) { + return false; + } + return (style & STRIKETHRU) == STRIKETHRU; + } + + /** + * Sets the style. + * + * @param style + * the style. + */ + public void setStyle(int style) { + this.style = style; + } + + /** + * Sets the style using a String containing one of more of + * the following values: normal, bold, italic, underline, strike. + * + * @param style + * A String representing a certain style. + */ + public void setStyle(String style) { + if (this.style == UNDEFINED) + this.style = NORMAL; + this.style |= getStyleValue(style); + } + + /** + * Translates a String -value of a certain style into the + * index value is used for this style in this class. + * + * @param style + * A String + * @return the corresponding value + */ + public static int getStyleValue(String style) { + int s = 0; + if (style.indexOf(Markup.CSS_VALUE_NORMAL) != -1) { + s |= NORMAL; + } + if (style.indexOf(Markup.CSS_VALUE_BOLD) != -1) { + s |= BOLD; + } + if (style.indexOf(Markup.CSS_VALUE_ITALIC) != -1) { + s |= ITALIC; + } + if (style.indexOf(Markup.CSS_VALUE_OBLIQUE) != -1) { + s |= ITALIC; + } + if (style.indexOf(Markup.CSS_VALUE_UNDERLINE) != -1) { + s |= UNDERLINE; + } + if (style.indexOf(Markup.CSS_VALUE_LINETHROUGH) != -1) { + s |= STRIKETHRU; + } + return s; + } + + // COLOR + + /** + * Gets the color of this font. + * + * @return a color + */ + public Color getColor() { + return color; + } + + /** + * Sets the color. + * + * @param color + * the new color of the font + */ + + public void setColor(Color color) { + this.color = color; + } + + /** + * Sets the color. + * + * @param red + * the red-value of the new color + * @param green + * the green-value of the new color + * @param blue + * the blue-value of the new color + */ + public void setColor(int red, int green, int blue) { + this.color = new Color(red, green, blue); + } + + // BASEFONT + + /** + * Gets the BaseFont inside this object. + * + * @return the BaseFont + */ + public BaseFont getBaseFont() { + return baseFont; + } + + /** + * Gets the BaseFont this class represents. For the built-in + * fonts a BaseFont is calculated. + * + * @param specialEncoding + * true to use the special encoding for Symbol and + * ZapfDingbats, false to always use Cp1252 + * + * @return the BaseFont this class represents + */ + public BaseFont getCalculatedBaseFont(boolean specialEncoding) { + if (baseFont != null) + return baseFont; + int style = this.style; + if (style == UNDEFINED) { + style = NORMAL; + } + String fontName = BaseFont.HELVETICA; + String encoding = BaseFont.WINANSI; + BaseFont cfont = null; + switch (family) { + case COURIER: + switch (style & BOLDITALIC) { + case BOLD: + fontName = BaseFont.COURIER_BOLD; + break; + case ITALIC: + fontName = BaseFont.COURIER_OBLIQUE; + break; + case BOLDITALIC: + fontName = BaseFont.COURIER_BOLDOBLIQUE; + break; + default: + //case NORMAL: + fontName = BaseFont.COURIER; + break; + } + break; + case TIMES_ROMAN: + switch (style & BOLDITALIC) { + case BOLD: + fontName = BaseFont.TIMES_BOLD; + break; + case ITALIC: + fontName = BaseFont.TIMES_ITALIC; + break; + case BOLDITALIC: + fontName = BaseFont.TIMES_BOLDITALIC; + break; + default: + case NORMAL: + fontName = BaseFont.TIMES_ROMAN; + break; + } + break; + case SYMBOL: + fontName = BaseFont.SYMBOL; + if (specialEncoding) + encoding = BaseFont.SYMBOL; + break; + case ZAPFDINGBATS: + fontName = BaseFont.ZAPFDINGBATS; + if (specialEncoding) + encoding = BaseFont.ZAPFDINGBATS; + break; + default: + case com.fr.third.com.lowagie.text.Font.HELVETICA: + switch (style & BOLDITALIC) { + case BOLD: + fontName = BaseFont.HELVETICA_BOLD; + break; + case ITALIC: + fontName = BaseFont.HELVETICA_OBLIQUE; + break; + case BOLDITALIC: + fontName = BaseFont.HELVETICA_BOLDOBLIQUE; + break; + default: + case NORMAL: + fontName = BaseFont.HELVETICA; + break; + } + break; + } + try { + cfont = BaseFont.createFont(fontName, encoding, false); + } catch (Exception ee) { + throw new ExceptionConverter(ee); + } + return cfont; + } + + + // Helper methods + + /** + * Checks if the properties of this font are undefined or null. + *

+ * If so, the standard should be used. + * + * @return a boolean + */ + public boolean isStandardFont() { + return (family == UNDEFINED && size == UNDEFINED && style == UNDEFINED + && color == null && baseFont == null); + } + + /** + * Replaces the attributes that are equal to null with the + * attributes of a given font. + * + * @param font + * the font of a bigger element class + * @return a Font + */ + public com.fr.third.com.lowagie.text.Font difference(com.fr.third.com.lowagie.text.Font font) { + if (font == null) return this; + // size + float dSize = font.size; + if (dSize == UNDEFINED) { + dSize = this.size; + } + // style + int dStyle = UNDEFINED; + int style1 = this.style; + int style2 = font.getStyle(); + if (style1 != UNDEFINED || style2 != UNDEFINED) { + if (style1 == UNDEFINED) + style1 = 0; + if (style2 == UNDEFINED) + style2 = 0; + dStyle = style1 | style2; + } + // color + Color dColor = font.color; + if (dColor == null) { + dColor = this.color; + } + // family + if (font.baseFont != null) { + return new com.fr.third.com.lowagie.text.Font(font.baseFont, dSize, dStyle, dColor); + } + if (font.getFamily() != UNDEFINED) { + return new com.fr.third.com.lowagie.text.Font(font.family, dSize, dStyle, dColor); + } + if (this.baseFont != null) { + if (dStyle == style1) { + return new com.fr.third.com.lowagie.text.Font(this.baseFont, dSize, dStyle, dColor); + } else { + return FontFactory.getFont(this.getFamilyname(), dSize, dStyle, + dColor); + } + } + return new com.fr.third.com.lowagie.text.Font(this.family, dSize, dStyle, dColor); + } + +} diff --git a/fine-itext-old/src/com/fr/third/com/lowagie/text/Paragraph.java b/fine-itext-old/src/com/fr/third/com/lowagie/text/Paragraph.java old mode 100755 new mode 100644 index b061743b7..4f0245e84 --- a/fine-itext-old/src/com/fr/third/com/lowagie/text/Paragraph.java +++ b/fine-itext-old/src/com/fr/third/com/lowagie/text/Paragraph.java @@ -1,502 +1,539 @@ -/* - * $Id: Paragraph.java 3668 2009-02-01 09:08:50Z blowagie $ - * - * 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.fr.third.com.lowagie.text; - -/** - * A Paragraph is a series of Chunks and/or Phrases. - *

- * A Paragraph has the same qualities of a Phrase, but also - * some additional layout-parameters: - *

- * - * Example: - *
- * Paragraph p = new Paragraph("This is a paragraph",
- *               FontFactory.getFont(FontFactory.HELVETICA, 18, Font.BOLDITALIC, new Color(0, 0, 255)));
- * 
- * - * @see Element - * @see Phrase - * @see ListItem - */ - -public class Paragraph extends Phrase { - - // constants - private static final long serialVersionUID = 7852314969733375514L; - - // membervariables - - /** The alignment of the text. */ - protected int alignment = Element.ALIGN_UNDEFINED; - - /** The text leading that is multiplied by the biggest font size in the line. */ - protected float multipliedLeading = 0; - - /** The indentation of this paragraph on the left side. */ - protected float indentationLeft; - - /** The indentation of this paragraph on the right side. */ - protected float indentationRight; - - /** Holds value of property firstLineIndent. */ - private float firstLineIndent = 0; - - /** The spacing before the paragraph. */ - protected float spacingBefore; - - /** The spacing after the paragraph. */ - protected float spacingAfter; - - /** Holds value of property extraParagraphSpace. */ - private float extraParagraphSpace = 0; - - /** Does the paragraph has to be kept together on 1 page. */ - protected boolean keeptogether = false; - - // constructors - - /** - * Constructs a Paragraph. - */ - public Paragraph() { - super(); - } - - /** - * Constructs a Paragraph with a certain leading. - * - * @param leading the leading - */ - public Paragraph(float leading) { - super(leading); - } - - /** - * Constructs a Paragraph with a certain Chunk. - * - * @param chunk a Chunk - */ - public Paragraph(Chunk chunk) { - super(chunk); - } - - /** - * Constructs a Paragraph with a certain Chunk - * and a certain leading. - * - * @param leading the leading - * @param chunk a Chunk - */ - public Paragraph(float leading, Chunk chunk) { - super(leading, chunk); - } - - /** - * Constructs a Paragraph with a certain String. - * - * @param string a String - */ - public Paragraph(String string) { - super(string); - } - - /** - * Constructs a Paragraph with a certain String - * and a certain Font. - * - * @param string a String - * @param font a Font - */ - public Paragraph(String string, Font font) { - super(string, font); - } - - /** - * Constructs a Paragraph with a certain String - * and a certain leading. - * - * @param leading the leading - * @param string a String - */ - public Paragraph(float leading, String string) { - super(leading, string); - } - - /** - * Constructs a Paragraph with a certain leading, String - * and Font. - * - * @param leading the leading - * @param string a String - * @param font a Font - */ - public Paragraph(float leading, String string, Font font) { - super(leading, string, font); - } - - /** - * Constructs a Paragraph with a certain Phrase. - * - * @param phrase a Phrase - */ - public Paragraph(Phrase phrase) { - super(phrase); - if (phrase instanceof Paragraph) { - Paragraph p = (Paragraph)phrase; - setAlignment(p.alignment); - setLeading(phrase.getLeading(), p.multipliedLeading); - setIndentationLeft(p.getIndentationLeft()); - setIndentationRight(p.getIndentationRight()); - setFirstLineIndent(p.getFirstLineIndent()); - setSpacingAfter(p.spacingAfter()); - setSpacingBefore(p.spacingBefore()); - setExtraParagraphSpace(p.getExtraParagraphSpace()); - } - } - - // implementation of the Element-methods - - /** - * Gets the type of the text element. - * - * @return a type - */ - public int type() { - return Element.PARAGRAPH; - } - - // methods - - /** - * Adds an Object to the Paragraph. - * - * @param o object the object to add. - * @return true is adding the object succeeded - */ - public boolean add(Object o) { - if (o instanceof List) { - List list = (List) o; - list.setIndentationLeft(list.getIndentationLeft() + indentationLeft); - list.setIndentationRight(indentationRight); - return super.add(list); - } - else if (o instanceof Image) { - super.addSpecial(o); - return true; - } - else if (o instanceof Paragraph) { - super.add(o); - java.util.List chunks = getChunks(); - if (!chunks.isEmpty()) { - Chunk tmp = ((Chunk) chunks.get(chunks.size() - 1)); - super.add(new Chunk("\n", tmp.getFont())); - } - else { - super.add(Chunk.NEWLINE); - } - return true; - } - return super.add(o); - } - - // setting the membervariables - - /** - * Sets the alignment of this paragraph. - * - * @param alignment the new alignment - */ - public void setAlignment(int alignment) { - this.alignment = alignment; - } - - /** - * Sets the alignment of this paragraph. - * - * @param alignment the new alignment as a String - */ - public void setAlignment(String alignment) { - if (ElementTags.ALIGN_CENTER.equalsIgnoreCase(alignment)) { - this.alignment = Element.ALIGN_CENTER; - return; - } - if (ElementTags.ALIGN_RIGHT.equalsIgnoreCase(alignment)) { - this.alignment = Element.ALIGN_RIGHT; - return; - } - if (ElementTags.ALIGN_JUSTIFIED.equalsIgnoreCase(alignment)) { - this.alignment = Element.ALIGN_JUSTIFIED; - return; - } - if (ElementTags.ALIGN_JUSTIFIED_ALL.equalsIgnoreCase(alignment)) { - this.alignment = Element.ALIGN_JUSTIFIED_ALL; - return; - } - this.alignment = Element.ALIGN_LEFT; - } - - /** - * @see com.fr.third.com.lowagie.text.Phrase#setLeading(float) - */ - public void setLeading(float fixedLeading) { - this.leading = fixedLeading; - this.multipliedLeading = 0; - } - - /** - * Sets the variable leading. The resultant leading will be - * multipliedLeading*maxFontSize where maxFontSize is the - * size of the biggest font in the line. - * @param multipliedLeading the variable leading - */ - public void setMultipliedLeading(float multipliedLeading) { - this.leading = 0; - this.multipliedLeading = multipliedLeading; - } - - /** - * Sets the leading fixed and variable. The resultant leading will be - * fixedLeading+multipliedLeading*maxFontSize where maxFontSize is the - * size of the biggest font in the line. - * @param fixedLeading the fixed leading - * @param multipliedLeading the variable leading - */ - public void setLeading(float fixedLeading, float multipliedLeading) { - this.leading = fixedLeading; - this.multipliedLeading = multipliedLeading; - } - - /** - * Sets the indentation of this paragraph on the left side. - * - * @param indentation the new indentation - */ - public void setIndentationLeft(float indentation) { - this.indentationLeft = indentation; - } - - /** - * Sets the indentation of this paragraph on the right side. - * - * @param indentation the new indentation - */ - public void setIndentationRight(float indentation) { - this.indentationRight = indentation; - } - - /** - * Setter for property firstLineIndent. - * @param firstLineIndent New value of property firstLineIndent. - */ - public void setFirstLineIndent(float firstLineIndent) { - this.firstLineIndent = firstLineIndent; - } - - /** - * Sets the spacing before this paragraph. - * - * @param spacing the new spacing - */ - public void setSpacingBefore(float spacing) { - this.spacingBefore = spacing; - } - - /** - * Sets the spacing after this paragraph. - * - * @param spacing the new spacing - */ - public void setSpacingAfter(float spacing) { - this.spacingAfter = spacing; - } - - /** - * Indicates that the paragraph has to be kept together on one page. - * - * @param keeptogether true of the paragraph may not be split over 2 pages - */ - public void setKeepTogether(boolean keeptogether) { - this.keeptogether = keeptogether; - } - - /** - * Checks if this paragraph has to be kept together on one page. - * - * @return true if the paragraph may not be split over 2 pages. - */ - public boolean getKeepTogether() { - return keeptogether; - } - - // methods to retrieve information - - /** - * Gets the alignment of this paragraph. - * - * @return alignment - */ - public int getAlignment() { - return alignment; - } - - /** - * Gets the variable leading - * @return the leading - */ - public float getMultipliedLeading() { - return multipliedLeading; - } - - /** - * Gets the total leading. - * This method is based on the assumption that the - * font of the Paragraph is the font of all the elements - * that make part of the paragraph. This isn't necessarily - * true. - * @return the total leading (fixed and multiplied) - */ - public float getTotalLeading() { - float m = font == null ? - Font.DEFAULTSIZE * multipliedLeading : font.getCalculatedLeading(multipliedLeading); - if (m > 0 && !hasLeading()) { - return m; - } - return getLeading() + m; - } - - /** - * Gets the indentation of this paragraph on the left side. - * - * @return the indentation - */ - public float getIndentationLeft() { - return indentationLeft; - } - - /** - * Gets the indentation of this paragraph on the right side. - * - * @return the indentation - */ - public float getIndentationRight() { - return indentationRight; - } - - /** - * Getter for property firstLineIndent. - * @return Value of property firstLineIndent. - */ - public float getFirstLineIndent() { - return this.firstLineIndent; - } - - /** - * Gets the spacing before this paragraph. - * @return the spacing - * @since 2.1.5 - */ - public float getSpacingBefore() { - return spacingBefore; - } - - /** - * Gets the spacing after this paragraph. - * @return the spacing - * @since 2.1.5 - */ - public float getSpacingAfter() { - return spacingAfter; - } - - /** - * Getter for property extraParagraphSpace. - * @return Value of property extraParagraphSpace. - */ - public float getExtraParagraphSpace() { - return this.extraParagraphSpace; - } - - /** - * Setter for property extraParagraphSpace. - * @param extraParagraphSpace New value of property extraParagraphSpace. - */ - public void setExtraParagraphSpace(float extraParagraphSpace) { - this.extraParagraphSpace = extraParagraphSpace; - } - - // scheduled for removal - - /** - * Gets the spacing before this paragraph. - * - * @return the spacing - * @deprecated As of iText 2.1.5, replaced by {@link #getSpacingBefore()}, - * scheduled for removal at 2.3.0 - */ - public float spacingBefore() { - return getSpacingBefore(); - } - - /** - * Gets the spacing after this paragraph. - * - * @return the spacing - * @deprecated As of iText 2.1.5, replaced by {@link #getSpacingAfter()}, - * scheduled for removal at 2.3.0 - */ - public float spacingAfter() { - return spacingAfter; - } - -} +/* + * $Id: Paragraph.java 3668 2009-02-01 09:08:50Z blowagie $ + * + * 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.fr.third.com.lowagie.text; + +import com.fr.third.com.lowagie.text.Chunk; +import com.fr.third.com.lowagie.text.Element; +import com.fr.third.com.lowagie.text.ElementTags; +import com.fr.third.com.lowagie.text.Font; +import com.fr.third.com.lowagie.text.Image; +import com.fr.third.com.lowagie.text.List; +import com.fr.third.com.lowagie.text.ListItem; +import com.fr.third.com.lowagie.text.Phrase; + +import java.util.HashMap; + +/** + * A Paragraph is a series of Chunks and/or Phrases. + *

+ * A Paragraph has the same qualities of a Phrase, but also + * some additional layout-parameters: + *

+ * + * Example: + *
+ * Paragraph p = new Paragraph("This is a paragraph",
+ *               FontFactory.getFont(FontFactory.HELVETICA, 18, Font.BOLDITALIC, new Color(0, 0, 255)));
+ * 
+ * + * @see Element + * @see Phrase + * @see ListItem + */ + +public class Paragraph extends Phrase { + + // constants + private static final long serialVersionUID = 7852314969733375514L; + + // membervariables + + /** The alignment of the text. */ + protected int alignment = ALIGN_UNDEFINED; + + /** The text leading that is multiplied by the biggest font size in the line. */ + protected float multipliedLeading = 0; + + /** The indentation of this paragraph on the left side. */ + protected float indentationLeft; + + /** The indentation of this paragraph on the right side. */ + protected float indentationRight; + + /** Holds value of property firstLineIndent. */ + private float firstLineIndent = 0; + + /** The spacing before the paragraph. */ + protected float spacingBefore; + + /** The spacing after the paragraph. */ + protected float spacingAfter; + + /** Holds value of property extraParagraphSpace. */ + private float extraParagraphSpace = 0; + + /** Does the paragraph has to be kept together on 1 page. */ + protected boolean keeptogether = false; + + protected String background; + + protected HashMap attributes = new HashMap(); + + public HashMap getAttributes() { + return attributes; + } + + public void setAttributes(HashMap attributes) { + this.attributes = attributes; + } + + public void setAttribute(String name, Object obj) { + if (attributes == null) + attributes = new HashMap(); + attributes.put(name, obj); + } + + // constructors + + /** + * Constructs a Paragraph. + */ + public Paragraph() { + super(); + } + + /** + * Constructs a Paragraph with a certain leading. + * + * @param leading the leading + */ + public Paragraph(float leading) { + super(leading); + } + + /** + * Constructs a Paragraph with a certain Chunk. + * + * @param chunk a Chunk + */ + public Paragraph(Chunk chunk) { + super(chunk); + } + + /** + * Constructs a Paragraph with a certain Chunk + * and a certain leading. + * + * @param leading the leading + * @param chunk a Chunk + */ + public Paragraph(float leading, Chunk chunk) { + super(leading, chunk); + } + + /** + * Constructs a Paragraph with a certain String. + * + * @param string a String + */ + public Paragraph(String string) { + super(string); + } + + /** + * Constructs a Paragraph with a certain String + * and a certain Font. + * + * @param string a String + * @param font a Font + */ + public Paragraph(String string, Font font) { + super(string, font); + } + + /** + * Constructs a Paragraph with a certain String + * and a certain leading. + * + * @param leading the leading + * @param string a String + */ + public Paragraph(float leading, String string) { + super(leading, string); + } + + /** + * Constructs a Paragraph with a certain leading, String + * and Font. + * + * @param leading the leading + * @param string a String + * @param font a Font + */ + public Paragraph(float leading, String string, Font font) { + super(leading, string, font); + } + + /** + * Constructs a Paragraph with a certain Phrase. + * + * @param phrase a Phrase + */ + public Paragraph(Phrase phrase) { + super(phrase); + if (phrase instanceof com.fr.third.com.lowagie.text.Paragraph) { + com.fr.third.com.lowagie.text.Paragraph p = (com.fr.third.com.lowagie.text.Paragraph)phrase; + setAlignment(p.alignment); + setLeading(phrase.getLeading(), p.multipliedLeading); + setIndentationLeft(p.getIndentationLeft()); + setIndentationRight(p.getIndentationRight()); + setFirstLineIndent(p.getFirstLineIndent()); + setSpacingAfter(p.spacingAfter()); + setSpacingBefore(p.spacingBefore()); + setExtraParagraphSpace(p.getExtraParagraphSpace()); + } + } + + // implementation of the Element-methods + + /** + * Gets the type of the text element. + * + * @return a type + */ + public int type() { + return PARAGRAPH; + } + + // methods + + /** + * Adds an Object to the Paragraph. + * + * @param o object the object to add. + * @return true is adding the object succeeded + */ + public boolean add(Object o) { + if (o instanceof List) { + List list = (List) o; + list.setIndentationLeft(list.getIndentationLeft() + indentationLeft); + list.setIndentationRight(indentationRight); + return super.add(list); + } + else if (o instanceof Image) { + super.addSpecial(o); + return true; + } + else if (o instanceof com.fr.third.com.lowagie.text.Paragraph) { + super.add(o); + java.util.List chunks = getChunks(); + if (!chunks.isEmpty()) { + Chunk tmp = ((Chunk) chunks.get(chunks.size() - 1)); + super.add(new Chunk("\n", tmp.getFont())); + } + else { + super.add(Chunk.NEWLINE); + } + return true; + } + return super.add(o); + } + + // setting the membervariables + + /** + * Sets the alignment of this paragraph. + * + * @param alignment the new alignment + */ + public void setAlignment(int alignment) { + this.alignment = alignment; + } + + /** + * Sets the alignment of this paragraph. + * + * @param alignment the new alignment as a String + */ + public void setAlignment(String alignment) { + if (ElementTags.ALIGN_CENTER.equalsIgnoreCase(alignment)) { + this.alignment = ALIGN_CENTER; + return; + } + if (ElementTags.ALIGN_RIGHT.equalsIgnoreCase(alignment)) { + this.alignment = ALIGN_RIGHT; + return; + } + if (ElementTags.ALIGN_JUSTIFIED.equalsIgnoreCase(alignment)) { + this.alignment = ALIGN_JUSTIFIED; + return; + } + if (ElementTags.ALIGN_JUSTIFIED_ALL.equalsIgnoreCase(alignment)) { + this.alignment = ALIGN_JUSTIFIED_ALL; + return; + } + this.alignment = ALIGN_LEFT; + } + + /** + * @see Phrase#setLeading(float) + */ + public void setLeading(float fixedLeading) { + this.leading = fixedLeading; + this.multipliedLeading = 0; + } + + /** + * Sets the variable leading. The resultant leading will be + * multipliedLeading*maxFontSize where maxFontSize is the + * size of the biggest font in the line. + * @param multipliedLeading the variable leading + */ + public void setMultipliedLeading(float multipliedLeading) { + this.leading = 0; + this.multipliedLeading = multipliedLeading; + } + + /** + * Sets the leading fixed and variable. The resultant leading will be + * fixedLeading+multipliedLeading*maxFontSize where maxFontSize is the + * size of the biggest font in the line. + * @param fixedLeading the fixed leading + * @param multipliedLeading the variable leading + */ + public void setLeading(float fixedLeading, float multipliedLeading) { + this.leading = fixedLeading; + this.multipliedLeading = multipliedLeading; + } + + /** + * Sets the indentation of this paragraph on the left side. + * + * @param indentation the new indentation + */ + public void setIndentationLeft(float indentation) { + this.indentationLeft = indentation; + } + + /** + * Sets the indentation of this paragraph on the right side. + * + * @param indentation the new indentation + */ + public void setIndentationRight(float indentation) { + this.indentationRight = indentation; + } + + /** + * Setter for property firstLineIndent. + * @param firstLineIndent New value of property firstLineIndent. + */ + public void setFirstLineIndent(float firstLineIndent) { + this.firstLineIndent = firstLineIndent; + } + + /** + * Sets the spacing before this paragraph. + * + * @param spacing the new spacing + */ + public void setSpacingBefore(float spacing) { + this.spacingBefore = spacing; + } + + /** + * Sets the spacing after this paragraph. + * + * @param spacing the new spacing + */ + public void setSpacingAfter(float spacing) { + this.spacingAfter = spacing; + } + + /** + * Indicates that the paragraph has to be kept together on one page. + * + * @param keeptogether true of the paragraph may not be split over 2 pages + */ + public void setKeepTogether(boolean keeptogether) { + this.keeptogether = keeptogether; + } + + /** + * Checks if this paragraph has to be kept together on one page. + * + * @return true if the paragraph may not be split over 2 pages. + */ + public boolean getKeepTogether() { + return keeptogether; + } + + // methods to retrieve information + + /** + * Gets the alignment of this paragraph. + * + * @return alignment + */ + public int getAlignment() { + return alignment; + } + + /** + * Gets the variable leading + * @return the leading + */ + public float getMultipliedLeading() { + return multipliedLeading; + } + + /** + * Gets the total leading. + * This method is based on the assumption that the + * font of the Paragraph is the font of all the elements + * that make part of the paragraph. This isn't necessarily + * true. + * @return the total leading (fixed and multiplied) + */ + public float getTotalLeading() { + float m = font == null ? + Font.DEFAULTSIZE * multipliedLeading : font.getCalculatedLeading(multipliedLeading); + if (m > 0 && !hasLeading()) { + return m; + } + return getLeading() + m; + } + + /** + * Gets the indentation of this paragraph on the left side. + * + * @return the indentation + */ + public float getIndentationLeft() { + return indentationLeft; + } + + /** + * Gets the indentation of this paragraph on the right side. + * + * @return the indentation + */ + public float getIndentationRight() { + return indentationRight; + } + + /** + * Getter for property firstLineIndent. + * @return Value of property firstLineIndent. + */ + public float getFirstLineIndent() { + return this.firstLineIndent; + } + + /** + * Gets the spacing before this paragraph. + * @return the spacing + * @since 2.1.5 + */ + public float getSpacingBefore() { + return spacingBefore; + } + + /** + * Gets the spacing after this paragraph. + * @return the spacing + * @since 2.1.5 + */ + public float getSpacingAfter() { + return spacingAfter; + } + + /** + * Getter for property extraParagraphSpace. + * @return Value of property extraParagraphSpace. + */ + public float getExtraParagraphSpace() { + return this.extraParagraphSpace; + } + + /** + * Setter for property extraParagraphSpace. + * @param extraParagraphSpace New value of property extraParagraphSpace. + */ + public void setExtraParagraphSpace(float extraParagraphSpace) { + this.extraParagraphSpace = extraParagraphSpace; + } + + // scheduled for removal + + /** + * Gets the spacing before this paragraph. + * + * @return the spacing + * @deprecated As of iText 2.1.5, replaced by {@link #getSpacingBefore()}, + * scheduled for removal at 2.3.0 + */ + public float spacingBefore() { + return getSpacingBefore(); + } + + /** + * Gets the spacing after this paragraph. + * + * @return the spacing + * @deprecated As of iText 2.1.5, replaced by {@link #getSpacingAfter()}, + * scheduled for removal at 2.3.0 + */ + public float spacingAfter() { + return spacingAfter; + } + + public void setBackground(String background){ + this.background = background; + } + + public String getBackground(){ + return this.background; + } + +}