blob: ffe9611bad47fe503d1d2236f7de5d56a5613b7f [file]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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;
import java.util.List;
/**
* class representing a Root (/Catalog) object
*/
public class PDFRoot extends PDFObject {
/**
* Use no page mode setting, default
*/
public static final int PAGEMODE_USENONE = 0;
/**
* Use outlines page mode to show bookmarks
*/
public static final int PAGEMODE_USEOUTLINES = 1;
/**
* Use thumbs page mode to show thumbnail images
*/
public static final int PAGEMODE_USETHUMBS = 2;
/**
* Full screen page mode
*/
public static final int PAGEMODE_FULLSCREEN = 3;
/**
* the /Pages object that is root of the Pages hierarchy
*/
protected PDFPages rootPages;
/**
* Root outline object
*/
private PDFOutline outline;
/** Optional Metadata object */
private PDFMetadata metadata;
/** The array of OutputIntents */
private List outputIntents;
private int pageMode = PAGEMODE_USENONE;
/**
* create a Root (/Catalog) object. NOTE: The PDFRoot
* object must be created before the PDF document is
* generated, but it is not assigned an object ID until
* it is about to be written (immediately before the xref
* table as part of the trsailer). (mark-fop@inomial.com)
*
* @param objnum the object's number
* @param pages the PDFPages object
*/
public PDFRoot(int objnum, PDFPages pages) {
super();
setObjectNumber(objnum);
setRootPages(pages);
}
/**
* Set the page mode for the PDF document.
*
* @param mode the page mode
*/
public void setPageMode(int mode) {
pageMode = mode;
}
/**
* add a /Page object to the root /Pages object
*
* @param page the /Page object to add
*/
public void addPage(PDFPage page) {
this.rootPages.addPage(page);
}
/**
* set the root /Pages object
*
* @param pages the /Pages object to set as root
*/
public void setRootPages(PDFPages pages) {
this.rootPages = pages;
}
/**
* Set the root outline for the PDF document.
*
* @param out the root PDF Outline
*/
public void setRootOutline(PDFOutline out) {
outline = out;
}
/**
* Get the root PDF outline for the document.
*
* @return the root PDF Outline
*/
public PDFOutline getRootOutline() {
return outline;
}
/**
* Set the optional Metadata object.
* @param meta the Metadata object
* @since PDF 1.4
*/
public void setMetadata(PDFMetadata meta) {
this.metadata = meta;
}
/**
* @return the Metadata object if set, null otherwise.
* @since PDF 1.4
*/
public PDFMetadata getMetadata() {
return this.metadata;
}
/**
* Adds an OutputIntent to the PDF
* @param outputIntent the OutputIntent dictionary
*/
public void addOutputIntent(PDFOutputIntent outputIntent) {
if (this.outputIntents == null) {
this.outputIntents = new java.util.ArrayList();
}
this.outputIntents.add(outputIntent);
}
/**
* @see org.apache.fop.pdf.PDFObject#toPDFString()
*/
public String toPDFString() {
StringBuffer p = new StringBuffer(128);
p.append(getObjectID());
p.append("<< /Type /Catalog\n/Pages "
+ this.rootPages.referencePDF()
+ "\n");
if (outline != null) {
p.append(" /Outlines " + outline.referencePDF() + "\n");
p.append(" /PageMode /UseOutlines\n");
} else {
switch (pageMode) {
case PAGEMODE_USEOUTLINES:
p.append(" /PageMode /UseOutlines\n");
break;
case PAGEMODE_USETHUMBS:
p.append(" /PageMode /UseThumbs\n");
break;
case PAGEMODE_FULLSCREEN:
p.append(" /PageMode /FullScreen\n");
break;
case PAGEMODE_USENONE:
default:
break;
}
}
if (getMetadata() != null
&& getDocumentSafely().getPDFVersion() >= PDFDocument.PDF_VERSION_1_4) {
p.append("/Metadata " + getMetadata().referencePDF() + "\n");
}
if (this.outputIntents != null
&& this.outputIntents.size() > 0
&& getDocumentSafely().getPDFVersion() >= PDFDocument.PDF_VERSION_1_4) {
p.append("/OutputIntents [");
for (int i = 0, c = this.outputIntents.size(); i < c; i++) {
PDFOutputIntent outputIntent = (PDFOutputIntent)this.outputIntents.get(i);
if (i > 0) {
p.append(" ");
}
p.append(outputIntent.referencePDF());
}
p.append("]\n");
}
p.append(">>\nendobj\n");
return p.toString();
}
}