| /* |
| * Copyright 1999-2004 The Apache Software Foundation. |
| * |
| * Licensed 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. |
| */ |
| |
| /* $Id$ */ |
| |
| package org.apache.fop.pdf; |
| |
| /** |
| * This class represents a simple number object. It also contains contains some |
| * utility methods for outputing numbers to PDF. |
| */ |
| public class PDFNumber extends PDFObject { |
| |
| private Number number; |
| |
| /** |
| * Returns the number. |
| * @return the number |
| */ |
| public Number getNumber() { |
| return this.number; |
| } |
| |
| /** |
| * Sets the number. |
| * @param number the number |
| */ |
| public void setNumber(Number number) { |
| this.number = number; |
| } |
| |
| /** |
| * Output a Double value to a string suitable for PDF. |
| * |
| * @param doubleDown the Double value |
| * @return the value as a string |
| */ |
| public static String doubleOut(Double doubleDown) { |
| return doubleOut(doubleDown.doubleValue()); |
| } |
| |
| /** |
| * Output a double value to a string suitable for PDF. |
| * |
| * @param doubleDown the double value |
| * @return the value as a string |
| */ |
| public static String doubleOut(double doubleDown) { |
| StringBuffer p = new StringBuffer(); |
| if (doubleDown < 0) { |
| doubleDown = -doubleDown; |
| p.append("-"); |
| } |
| double trouble = doubleDown % 1; |
| |
| if (trouble > 0.950) { |
| p.append((int)doubleDown + 1); |
| } else if (trouble < 0.050) { |
| p.append((int)doubleDown); |
| } else { |
| String doubleString = new String(doubleDown + ""); |
| int decimal = doubleString.indexOf("."); |
| if (decimal != -1) { |
| p.append(doubleString.substring(0, decimal)); |
| |
| if ((doubleString.length() - decimal) > 6) { |
| p.append(doubleString.substring(decimal, decimal + 6)); |
| } else { |
| p.append(doubleString.substring(decimal)); |
| } |
| } else { |
| p.append(doubleString); |
| } |
| } |
| return (p.toString()); |
| } |
| |
| /** |
| * Output a double value to a string suitable for PDF. |
| * In this method it is possible to set the maximum |
| * number of decimal places to output. |
| * |
| * @param doubleDown the Double value |
| * @param dec the number of decimal places to output |
| * @return the value as a string |
| */ |
| public static String doubleOut(double doubleDown, int dec) { |
| StringBuffer p = new StringBuffer(); |
| if (doubleDown < 0) { |
| doubleDown = -doubleDown; |
| p.append("-"); |
| } |
| double trouble = doubleDown % 1; |
| |
| if (trouble > (1.0 - (5.0 / (Math.pow(10.0, dec))))) { |
| p.append((int)doubleDown + 1); |
| } else if (trouble < (5.0 / (Math.pow(10.0, dec)))) { |
| p.append((int)doubleDown); |
| } else { |
| String doubleString = new String(doubleDown + ""); |
| int decimal = doubleString.indexOf("."); |
| if (decimal != -1) { |
| p.append(doubleString.substring(0, decimal)); |
| |
| if ((doubleString.length() - decimal) > dec) { |
| p.append(doubleString.substring(decimal, decimal + dec)); |
| } else { |
| p.append(doubleString.substring(decimal)); |
| } |
| } else { |
| p.append(doubleString); |
| } |
| } |
| return (p.toString()); |
| } |
| |
| /** |
| * @see org.apache.fop.pdf.PDFObject#toPDFString() |
| */ |
| protected String toPDFString() { |
| if (getNumber() == null) { |
| throw new IllegalArgumentException( |
| "The number of this PDFNumber must not be empty"); |
| } |
| StringBuffer sb = new StringBuffer(64); |
| sb.append(getObjectID()); |
| sb.append(getNumber().toString()); |
| sb.append("\nendobj\n"); |
| return sb.toString(); |
| } |
| |
| } |
| |