Save This Page
Home » iText-src-2.1.3 » com.lowagie » text » pdf » [javadoc | source]
    1   /*
    2    * $Id: PdfIndirectObject.java 3373 2008-05-12 16:21:24Z xlv $
    3    *
    4    * Copyright 1999, 2000, 2001, 2002 Bruno Lowagie
    5    *
    6    * The contents of this file are subject to the Mozilla Public License Version 1.1
    7    * (the "License"); you may not use this file except in compliance with the License.
    8    * You may obtain a copy of the License at http://www.mozilla.org/MPL/
    9    *
   10    * Software distributed under the License is distributed on an "AS IS" basis,
   11    * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
   12    * for the specific language governing rights and limitations under the License.
   13    *
   14    * The Original Code is 'iText, a free JAVA-PDF library'.
   15    *
   16    * The Initial Developer of the Original Code is Bruno Lowagie. Portions created by
   17    * the Initial Developer are Copyright (C) 1999, 2000, 2001, 2002 by Bruno Lowagie.
   18    * All Rights Reserved.
   19    * Co-Developer of the code is Paulo Soares. Portions created by the Co-Developer
   20    * are Copyright (C) 2000, 2001, 2002 by Paulo Soares. All Rights Reserved.
   21    *
   22    * Contributor(s): all the names of the contributors are added in the source code
   23    * where applicable.
   24    *
   25    * Alternatively, the contents of this file may be used under the terms of the
   26    * LGPL license (the "GNU LIBRARY GENERAL PUBLIC LICENSE"), in which case the
   27    * provisions of LGPL are applicable instead of those above.  If you wish to
   28    * allow use of your version of this file only under the terms of the LGPL
   29    * License and not to allow others to use your version of this file under
   30    * the MPL, indicate your decision by deleting the provisions above and
   31    * replace them with the notice and other provisions required by the LGPL.
   32    * If you do not delete the provisions above, a recipient may use your version
   33    * of this file under either the MPL or the GNU LIBRARY GENERAL PUBLIC LICENSE.
   34    *
   35    * This library is free software; you can redistribute it and/or modify it
   36    * under the terms of the MPL as stated above or under the terms of the GNU
   37    * Library General Public License as published by the Free Software Foundation;
   38    * either version 2 of the License, or any later version.
   39    *
   40    * This library is distributed in the hope that it will be useful, but WITHOUT
   41    * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
   42    * FOR A PARTICULAR PURPOSE. See the GNU Library general Public License for more
   43    * details.
   44    *
   45    * If you didn't download this code from the following link, you should check if
   46    * you aren't using an obsolete version:
   47    * http://www.lowagie.com/iText/
   48    */
   49   
   50   package com.lowagie.text.pdf;
   51   
   52   import java.io.IOException;
   53   import java.io.OutputStream;
   54   
   55   import com.lowagie.text.DocWriter;
   56   
   57   /**
   58    * <CODE>PdfIndirectObject</CODE> is the Pdf indirect object.
   59    * <P>
   60    * An <I>indirect object</I> is an object that has been labeled so that it can be referenced by
   61    * other objects. Any type of <CODE>PdfObject</CODE> may be labeled as an indirect object.<BR>
   62    * An indirect object consists of an object identifier, a direct object, and the <B>endobj</B>
   63    * keyword. The <I>object identifier</I> consists of an integer <I>object number</I>, an integer
   64    * <I>generation number</I>, and the <B>obj</B> keyword.<BR>
   65    * This object is described in the 'Portable Document Format Reference Manual version 1.7'
   66    * section 3.2.9 (page 63-65).
   67    *
   68    * @see		PdfObject
   69    * @see		PdfIndirectReference
   70    */
   71   
   72   public class PdfIndirectObject {
   73       
   74       // membervariables
   75       
   76   /** The object number */
   77       protected int number;
   78       
   79   /** the generation number */
   80       protected int generation = 0;
   81       
   82       static final byte STARTOBJ[] = DocWriter.getISOBytes(" obj");
   83       static final byte ENDOBJ[] = DocWriter.getISOBytes("\nendobj\n");
   84       static final int SIZEOBJ = STARTOBJ.length + ENDOBJ.length;
   85       PdfObject object;
   86       PdfWriter writer;
   87       
   88       // constructors
   89       
   90   /**
   91    * Constructs a <CODE>PdfIndirectObject</CODE>.
   92    *
   93    * @param		number			the object number
   94    * @param		object			the direct object
   95    */
   96       
   97       PdfIndirectObject(int number, PdfObject object, PdfWriter writer) {
   98           this(number, 0, object, writer);
   99       }
  100       
  101       PdfIndirectObject(PdfIndirectReference ref, PdfObject object, PdfWriter writer) {
  102           this(ref.getNumber(),ref.getGeneration(),object,writer);
  103       }
  104   /**
  105    * Constructs a <CODE>PdfIndirectObject</CODE>.
  106    *
  107    * @param		number			the object number
  108    * @param		generation		the generation number
  109    * @param		object			the direct object
  110    */
  111       
  112       PdfIndirectObject(int number, int generation, PdfObject object, PdfWriter writer) {
  113           this.writer = writer;
  114           this.number = number;
  115           this.generation = generation;
  116           this.object = object;
  117           PdfEncryption crypto = null;
  118           if (writer != null)
  119               crypto = writer.getEncryption();
  120           if (crypto != null) {
  121               crypto.setHashKey(number, generation);
  122           }
  123       }
  124       
  125       // methods
  126       
  127   /**
  128    * Return the length of this <CODE>PdfIndirectObject</CODE>.
  129    *
  130    * @return		the length of the PDF-representation of this indirect object.
  131    */
  132       
  133   //    public int length() {
  134   //        if (isStream)
  135   //            return bytes.size() + SIZEOBJ + stream.getStreamLength(writer);
  136   //        else
  137   //            return bytes.size();
  138   //    }
  139       
  140       
  141   /**
  142    * Returns a <CODE>PdfIndirectReference</CODE> to this <CODE>PdfIndirectObject</CODE>.
  143    *
  144    * @return		a <CODE>PdfIndirectReference</CODE>
  145    */
  146       
  147       public PdfIndirectReference getIndirectReference() {
  148           return new PdfIndirectReference(object.type(), number, generation);
  149       }
  150       
  151   /**
  152    * Writes efficiently to a stream
  153    *
  154    * @param os the stream to write to
  155    * @throws IOException on write error
  156    */
  157       void writeTo(OutputStream os) throws IOException
  158       {
  159           os.write(DocWriter.getISOBytes(String.valueOf(number)));
  160           os.write(' ');
  161           os.write(DocWriter.getISOBytes(String.valueOf(generation)));
  162           os.write(STARTOBJ);
  163           int type = object.type();
  164           if (type != PdfObject.ARRAY && type != PdfObject.DICTIONARY && type != PdfObject.NAME && type != PdfObject.STRING)
  165               os.write(' ');
  166           object.toPdf(writer, os);
  167           os.write(ENDOBJ);
  168       }
  169   }

Save This Page
Home » iText-src-2.1.3 » com.lowagie » text » pdf » [javadoc | source]