123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- /*
- * 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.awt.geom.Rectangle2D;
-
- /**
- * Class representing a /Page object.
- * <p>
- * There is one of these for every page in a PDF document. The object
- * specifies the dimensions of the page and references a /Resources
- * object, a contents stream and the page's parent in the page
- * hierarchy.
- */
- public class PDFPage extends PDFResourceContext {
-
- /** the page index (zero-based) */
- protected int pageIndex;
-
- /**
- * Create a /Page object
- *
- * @param resources the /Resources object
- * @param pageIndex the page's zero-based index (or -1 if the page number is auto-determined)
- * @param mediaBox the MediaBox
- * @param cropBox the CropBox. If null, mediaBox is used.
- * @param bleedBox the BleedBox. If null, cropBox is used.
- * @param trimBox the TrimBox. If null, bleedBox is used.
- */
- public PDFPage(PDFResources resources, int pageIndex,
- Rectangle2D mediaBox, Rectangle2D cropBox,
- Rectangle2D bleedBox, Rectangle2D trimBox) {
- /* generic creation of object */
- super(resources);
-
- put("Type", new PDFName("Page"));
- /* set fields using parameters */
- setSimplePageSize(mediaBox, cropBox, bleedBox, trimBox);
- this.pageIndex = pageIndex;
- }
-
- private void setSimplePageSize(Rectangle2D mediaBox, Rectangle2D cropBox,
- Rectangle2D bleedBox, Rectangle2D trimBox) {
- setMediaBox(mediaBox);
-
- if (cropBox == null) {
- cropBox = mediaBox;
- }
- setCropBox(cropBox);
-
- if (bleedBox == null) {
- bleedBox = cropBox;
- }
- setBleedBox(bleedBox); //Recommended by PDF/X
-
- if (trimBox == null) {
- trimBox = bleedBox;
- }
- setTrimBox(trimBox); //Needed for PDF/X
- }
-
- private PDFArray toPDFArray(Rectangle2D box) {
- return new PDFArray(this, new double[] {
- box.getX(), box.getY(), box.getMaxX(), box.getMaxY()});
- }
-
- /**
- * Sets the "MediaBox" entry
- * @param box the media rectangle
- */
- public void setMediaBox(Rectangle2D box) {
- put("MediaBox", toPDFArray(box));
- }
-
- /**
- * Sets the "CropBox" entry
- * @param box the bleed rectangle
- */
- public void setCropBox(Rectangle2D box) {
- put("CropBox", toPDFArray(box));
- }
-
- /**
- * Sets the "BleedBox" entry
- * @param box the bleed rectangle
- */
- public void setBleedBox(Rectangle2D box) {
- put("BleedBox", toPDFArray(box));
- }
-
- /**
- * Sets the "TrimBox" entry
- * @param box the trim rectangle
- */
- public void setTrimBox(Rectangle2D box) {
- put("TrimBox", toPDFArray(box));
- }
-
- /**
- * set this page contents
- *
- * @param contents the contents of the page
- */
- public void setContents(PDFReference contents) {
- if (contents != null) {
- put("Contents", contents);
- }
- }
-
- /**
- * set this page's parent
- *
- * @param parent the /Pages object that is this page's parent
- */
- public void setParent(PDFPages parent) {
- put("Parent", new PDFReference(parent));
- }
-
- /**
- * Set the transition dictionary and duration.
- * This sets the duration of the page and the transition
- * dictionary used when going to the next page.
- *
- * @param dur the duration in seconds
- * @param tr the transition dictionary
- */
- public void setTransition(int dur, TransitionDictionary tr) {
- put("Dur", Integer.valueOf(dur));
- put("Trans", tr);
- }
-
- /**
- * @return the page Index of this page (zero-based), -1 if it the page index should
- * automatically be determined.
- */
- public int getPageIndex() {
- return this.pageIndex;
- }
-
- /**
- * Sets the "StructParents" value.
- * @param structParents the integer key of this object's entry in the structural parent tree.
- */
- public void setStructParents(int structParents) {
- put("StructParents", structParents);
- //This is a PDF 1.5 feature. It is set as a work-around for a bug in Adobe Acrobat
- //which reports this missing even if the PDF file is PDF 1.4.
- setTabs(new PDFName("S"));
- }
-
- /**
- * Returns the value of the StructParents entry.
- *
- * @return the StructParents value, <code>null</code> if the entry has not been set
- */
- public Integer getStructParents() {
- return (Integer) get("StructParents");
- }
-
- /**
- * Specifies the tab order for annotations on a page.
- * @param value one of the allowed values (see PDF 1.5)
- * @since PDF 1.5
- */
- public void setTabs(PDFName value) {
- put("Tabs", value);
- }
-
- }
|