/* * 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. */ package com.tom_roush.pdfbox.pdmodel.interactive.pagenavigation; import com.tom_roush.pdfbox.cos.COSBase; import com.tom_roush.pdfbox.cos.COSBoolean; import com.tom_roush.pdfbox.cos.COSDictionary; import com.tom_roush.pdfbox.cos.COSFloat; import com.tom_roush.pdfbox.cos.COSInteger; import com.tom_roush.pdfbox.cos.COSName; import com.tom_roush.pdfbox.pdmodel.common.PDDictionaryWrapper; /** * Represents a page transition as defined in paragraph 12.4.4.1 of PDF 32000-1:2008 * * @author Andrea Vacondio * */ public final class PDTransition extends PDDictionaryWrapper { /** * creates a new transition with default "replace" style {@link PDTransitionStyle#R} */ public PDTransition() { this(PDTransitionStyle.R); } /** * creates a new transition with the given style. * * @param style */ public PDTransition(PDTransitionStyle style) { super(); getCOSObject().setName(COSName.TYPE, COSName.TRANS.getName()); getCOSObject().setName(COSName.S, style.name()); } /** * creates a new transition for an existing dictionary * * @param dictionary */ public PDTransition(COSDictionary dictionary) { super(dictionary); } /** * @return the style for this transition * @see PDTransitionStyle#valueOf(String) */ public String getStyle() { return getCOSObject().getNameAsString(COSName.S, PDTransitionStyle.R.name()); } /** * @return The dimension in which the specified transition effect shall occur or the default * {@link PDTransitionDimension#H} if no dimension is found. * @see PDTransitionDimension */ public String getDimension() { return getCOSObject().getNameAsString(COSName.DM, PDTransitionDimension.H.name()); } /** * Sets the dimension in which the specified transition effect shall occur. Only for {@link PDTransitionStyle#Split} * and {@link PDTransitionStyle#Blinds}. */ public void setDimension(PDTransitionDimension dimension) { getCOSObject().setName(COSName.DM, dimension.name()); } /** * @return The direction of motion for the specified transition effect or the default {@link PDTransitionMotion#I} * if no motion is found. * @see PDTransitionMotion */ public String getMotion() { return getCOSObject().getNameAsString(COSName.M, PDTransitionMotion.I.name()); } /** * Sets the direction of motion for the specified transition effect. Only for {@link PDTransitionStyle#Split}, * {@link PDTransitionStyle#Blinds} and {@link PDTransitionStyle#Fly}. */ public void setMotion(PDTransitionMotion motion) { getCOSObject().setName(COSName.M, motion.name()); } /** * @return the direction in which the specified transition effect shall moves. It can be either a {@link COSInteger} * or {@link COSName#NONE}. Default to {@link COSInteger#ZERO} * @see PDTransitionDirection */ public COSBase getDirection() { COSBase item = getCOSObject().getItem(COSName.DI); if (item == null) { return COSInteger.ZERO; } return item; } /** * Sets the direction in which the specified transition effect shall moves. Only for {@link PDTransitionStyle#Wipe}, * {@link PDTransitionStyle#Glitter}, {@link PDTransitionStyle#Fly}, {@link PDTransitionStyle#Cover}, * {@link PDTransitionStyle#Uncover} and {@link PDTransitionStyle#Push}. */ public void setDirection(PDTransitionDirection direction) { getCOSObject().setItem(COSName.DI, direction.getCOSBase()); } /** * @return The duration in seconds of the transition effect or the default 1 if no duration is found. */ public float getDuration() { return getCOSObject().getFloat(COSName.D, 1); } /** * @param duration The duration of the transition effect, in seconds. */ public void setDuration(float duration) { getCOSObject().setItem(COSName.D, new COSFloat(duration)); } /** * @return The starting or ending scale at which the changes shall be drawn or the default 1 if no scale is found. * Only for {@link PDTransitionStyle#Fly}. */ public float getFlyScale() { return getCOSObject().getFloat(COSName.SS, 1); } /** * @param scale The starting or ending scale at which the changes shall be drawn. Only for * {@link PDTransitionStyle#Fly}. */ public void setFlyScale(float scale) { getCOSObject().setItem(COSName.SS, new COSFloat(scale)); } /** * @return true if the area that shall be flown in is rectangular and opaque. Default is false. Only for * {@link PDTransitionStyle#Fly}. */ public boolean isFlyAreaOpaque() { return getCOSObject().getBoolean(COSName.B, false); } /** * @param opaque If true, the area that shall be flown in is rectangular and opaque. Only for * {@link PDTransitionStyle#Fly}. */ public void setFlyAreaOpaque(boolean opaque) { getCOSObject().setItem(COSName.B, COSBoolean.getBoolean(opaque)); } }