code: /*
   * $Id: PDFCatalog.java,v 1.2 2007/08/26 18:56:35 gil1 Exp $
   *
   * $Date: 2007/08/26 18:56:35 $
   *
   * This library is free software; you can redistribute it and/or
   * modify it under the terms of the GNU Lesser General Public
   * License as published by the Free Software Foundation; either
   * version 2.1 of the License, or (at your option) 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
   * Lesser General Public License for more details.
   *
   * You should have received a copy of the GNU Lesser General Public
   * License along with this library; if not, write to the Free Software
   * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
   * 
   */
  package pdf;
  
  import java.io.*;
  
  /**
   * <p>This class implements the PDF Catalog, 
   * also known as the root node</p>
   *
   * @author Peter T. Mount
   * @author Eric Z. Beard, ericzbeard@hotmail.com
   * @version $Revision: 1.2 $, $Date: 2007/08/26 18:56:35 $
   */
  public class PDFCatalog extends PDFObject
  {
    /**
     * The pages of the document
     */
    private PDFPageList pdfPageList;
      
    /**
     * The outlines of the document
     */
    private PDFOutline outlines;
    
    /**
     * The initial page mode
     */
    private int pagemode;
    
    /**
     * This constructs a PDF Catalog object
     *
     * @param pdfPageList The PDFPageList object that's the root 
     *        of the documents page tree
     * @param pagemode How the document should appear when opened.
     * Allowed values are USENONE, USEOUTLINES, USETHUMBS or FULLSCREEN.
     */
    public PDFCatalog(PDFPageList pdfPageList,int pagemode) {
      super("/Catalog");
      this.pdfPageList = pdfPageList;
      this.pagemode = pagemode;
    }
    
    /**
     * This sets the root outline object
     * @param outline The root outline
     */
    protected void setOutline(PDFOutline outline) {
      this.outlines = outline;
    }
    
    /**
     * @param os OutputStream to send the object to
     * @exception IOException on error
     */
    public void write(OutputStream os) throws IOException {
      // Write the object header
      writeStart(os);
      
      // now the objects body
      
      // the /Pages object
      os.write("/Pages ".getBytes());
      os.write(pdfPageList.toString().getBytes());
      os.write("\n".getBytes());
              
      // the Outlines object
      if(outlines!=null) {
        //if(outlines.getLast()>-1) {
        os.write("/Outlines ".getBytes());
        os.write(outlines.toString().getBytes());
        os.write("\n".getBytes());
        //}
      }
              
      // the /PageMode setting
      os.write("/PageMode ".getBytes());
      os.write(PDFDocument.PDF_PAGE_MODES[pagemode].getBytes());
      os.write("\n".getBytes());
              
      // finish off with its footer
      writeEnd(os);
    }
  } // end class PDFCatalog
      
  