blob: 784aa4f953dfcd3c660684cab1656e2f4d064232 [file] [log] [blame]
/*
* 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.Point2D;
/**
* class representing a /GoTo object.
* This can either have a Goto to a page reference and location
* or to a specified PDF reference string.
*/
public class PDFGoTo extends PDFAction {
/**
* the pageReference
*/
private String pageReference;
private String destination = null;
private float xPosition = 0;
private float yPosition = 0;
/**
* create a /GoTo object.
*
* @param pageReference the pageReference represented by this object
*/
public PDFGoTo(String pageReference) {
super();
setPageReference(pageReference);
}
/**
* create a /GoTo object.
*
* @param pageReference the PDF reference to the target page
* @param position the target area's on-page coordinates in points
*/
public PDFGoTo(String pageReference, Point2D position) {
/* generic creation of object */
this(pageReference);
setPosition(position);
}
/**
* Sets page reference after object has been created
*
* @param pageReference the new page reference to use
*/
public void setPageReference(String pageReference) {
this.pageReference = pageReference;
}
/**
* Sets the target (X,Y) position
*
* @param position the target's on-page coordinates in points
*/
public void setPosition(Point2D position) {
this.xPosition = (float) position.getX();
this.yPosition = (float) position.getY();
}
/**
* Sets the x Position to jump to
*
* @param xPosition x position
*/
public void setXPosition(float xPosition) {
this.xPosition = xPosition;
}
/**
* Sets the Y position to jump to
*
* @param yPosition y position
*/
public void setYPosition(float yPosition) {
this.yPosition = yPosition;
}
/**
* Set the destination string for this Goto.
*
* @param dest the PDF destination string
*/
public void setDestination(String dest) {
destination = dest;
}
/**
* Get the PDF reference for the GoTo action.
*
* @return the PDF reference for the action
*/
public String getAction() {
return referencePDF();
}
/**
* {@inheritDoc}
*/
public String toPDFString() {
String dest;
if (destination == null) {
dest = "/D [" + this.pageReference + " /XYZ " + xPosition
+ " " + yPosition + " null]\n";
} else {
dest = "/D [" + this.pageReference + " " + destination + "]\n";
}
return "<< /Type /Action\n/S /GoTo\n" + dest + ">>";
}
/*
* example
* 29 0 obj
* <<
* /S /GoTo
* /D [23 0 R /FitH 600]
* >>
* endobj
*/
/** {@inheritDoc} */
protected boolean contentEquals(PDFObject obj) {
if (this == obj) {
return true;
}
if (obj == null || !(obj instanceof PDFGoTo)) {
return false;
}
PDFGoTo gt = (PDFGoTo)obj;
if (gt.pageReference == null) {
if (pageReference != null) {
return false;
}
} else {
if (!gt.pageReference.equals(pageReference)) {
return false;
}
}
if (destination == null) {
if (!(gt.destination == null && gt.xPosition == xPosition
&& gt.yPosition == yPosition)) {
return false;
}
} else {
if (!destination.equals(gt.destination)) {
return false;
}
}
return true;
}
}