001/* 002 * $Id: PdfNumber.java 4784 2011-03-15 08:33:00Z blowagie $ 003 * 004 * This file is part of the iText (R) project. 005 * Copyright (c) 1998-2011 1T3XT BVBA 006 * Authors: Bruno Lowagie, Paulo Soares, et al. 007 * 008 * This program is free software; you can redistribute it and/or modify 009 * it under the terms of the GNU Affero General Public License version 3 010 * as published by the Free Software Foundation with the addition of the 011 * following permission added to Section 15 as permitted in Section 7(a): 012 * FOR ANY PART OF THE COVERED WORK IN WHICH THE COPYRIGHT IS OWNED BY 1T3XT, 013 * 1T3XT DISCLAIMS THE WARRANTY OF NON INFRINGEMENT OF THIRD PARTY RIGHTS. 014 * 015 * This program is distributed in the hope that it will be useful, but 016 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 017 * or FITNESS FOR A PARTICULAR PURPOSE. 018 * See the GNU Affero General Public License for more details. 019 * You should have received a copy of the GNU Affero General Public License 020 * along with this program; if not, see http://www.gnu.org/licenses or write to 021 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 022 * Boston, MA, 02110-1301 USA, or download the license from the following URL: 023 * http://itextpdf.com/terms-of-use/ 024 * 025 * The interactive user interfaces in modified source and object code versions 026 * of this program must display Appropriate Legal Notices, as required under 027 * Section 5 of the GNU Affero General Public License. 028 * 029 * In accordance with Section 7(b) of the GNU Affero General Public License, 030 * a covered work must retain the producer line in every PDF that is created 031 * or manipulated using iText. 032 * 033 * You can be released from the requirements of the license by purchasing 034 * a commercial license. Buying such a license is mandatory as soon as you 035 * develop commercial activities involving the iText software without 036 * disclosing the source code of your own applications. 037 * These activities include: offering paid services to customers as an ASP, 038 * serving PDFs on the fly in a web application, shipping iText with a closed 039 * source product. 040 * 041 * For more information, please contact iText Software Corp. at this 042 * address: sales@itextpdf.com 043 */ 044package com.itextpdf.text.pdf; 045 046import com.itextpdf.text.error_messages.MessageLocalization; 047 048/** 049 * <CODE>PdfNumber</CODE> provides two types of numbers, integer and real. 050 * <P> 051 * Integers may be specified by signed or unsigned constants. Reals may only be 052 * in decimal format.<BR> 053 * This object is described in the 'Portable Document Format Reference Manual 054 * version 1.7' section 3.3.2 (page 52-53). 055 * 056 * @see PdfObject 057 * @see BadPdfFormatException 058 */ 059public class PdfNumber extends PdfObject { 060 061 // CLASS VARIABLES 062 063 /** 064 * actual value of this <CODE>PdfNumber</CODE>, represented as a 065 * <CODE>double</CODE> 066 */ 067 private double value; 068 069 // CONSTRUCTORS 070 071 /** 072 * Constructs a <CODE>PdfNumber</CODE>-object. 073 * 074 * @param content value of the new <CODE>PdfNumber</CODE>-object 075 */ 076 public PdfNumber(String content) { 077 super(NUMBER); 078 try { 079 value = Double.parseDouble(content.trim()); 080 setContent(content); 081 } 082 catch (NumberFormatException nfe){ 083 throw new RuntimeException(MessageLocalization.getComposedMessage("1.is.not.a.valid.number.2", content, nfe.toString())); 084 } 085 } 086 087 /** 088 * Constructs a new <CODE>PdfNumber</CODE>-object of type integer. 089 * 090 * @param value value of the new <CODE>PdfNumber</CODE>-object 091 */ 092 public PdfNumber(int value) { 093 super(NUMBER); 094 this.value = value; 095 setContent(String.valueOf(value)); 096 } 097 098 /** 099 * Constructs a new <CODE>PdfNumber</CODE>-object of type real. 100 * 101 * @param value value of the new <CODE>PdfNumber</CODE>-object 102 */ 103 public PdfNumber(double value) { 104 super(NUMBER); 105 this.value = value; 106 setContent(ByteBuffer.formatDouble(value)); 107 } 108 109 /** 110 * Constructs a new <CODE>PdfNumber</CODE>-object of type real. 111 * 112 * @param value value of the new <CODE>PdfNumber</CODE>-object 113 */ 114 public PdfNumber(float value) { 115 this((double)value); 116 } 117 118 // methods returning the value of this object 119 120 /** 121 * Returns the primitive <CODE>int</CODE> value of this object. 122 * 123 * @return The value as <CODE>int</CODE> 124 */ 125 public int intValue() { 126 return (int) value; 127 } 128 129 /** 130 * Returns the primitive <CODE>double</CODE> value of this object. 131 * 132 * @return The value as <CODE>double</CODE> 133 */ 134 public double doubleValue() { 135 return value; 136 } 137 138 /** 139 * Returns the primitive <CODE>float</CODE> value of this object. 140 * 141 * @return The value as <CODE>float</CODE> 142 */ 143 public float floatValue() { 144 return (float)value; 145 } 146 147 // other methods 148 149 /** 150 * Increments the value of the <CODE>PdfNumber</CODE>-object by 1. 151 */ 152 public void increment() { 153 value += 1.0; 154 setContent(ByteBuffer.formatDouble(value)); 155 } 156}