/** * Copyright (c) 2005, www.pdfbox.org * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * 3. Neither the name of pdfbox; nor the names of its * contributors may be used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * http://www.pdfbox.org * */ package org.pdfbox.pdmodel.documentinterchange.prepress; import org.pdfbox.cos.COSArray; import org.pdfbox.cos.COSBase; import org.pdfbox.cos.COSDictionary; import org.pdfbox.cos.COSInteger; import org.pdfbox.pdmodel.common.COSObjectable; import org.pdfbox.pdmodel.graphics.PDLineDashPattern; import org.pdfbox.pdmodel.graphics.color.PDColorSpaceInstance; import org.pdfbox.pdmodel.graphics.color.PDDeviceRGB; /** * The Box Style specifies visual characteristics for displaying box areas. * * @author Ben Litchfield (ben@benlitchfield.com) * @version $Revision: 1.2 $ */ public class PDBoxStyle implements COSObjectable { /** * Style for guideline. */ public static final String GUIDELINE_STYLE_SOLID = "S"; /** * Style for guideline. */ public static final String GUIDELINE_STYLE_DASHED = "D"; private COSDictionary dictionary; /** * Default Constructor. * */ public PDBoxStyle() { dictionary = new COSDictionary(); } /** * Constructor for an existing BoxStyle element. * * @param dic The existing dictionary. */ public PDBoxStyle( COSDictionary dic ) { dictionary = dic; } /** * Convert this standard java object to a COS object. * * @return The cos object that matches this Java object. */ public COSBase getCOSObject() { return dictionary; } /** * Convert this standard java object to a COS object. * * @return The cos object that matches this Java object. */ public COSDictionary getDictionary() { return dictionary; } /** * Get the color to be used for the guidelines. This is guaranteed to * not return null. The color space will always be DeviceRGB and the * default color is [0,0,0]. * *@return The guideline color. */ public PDColorSpaceInstance getGuidelineColor() { COSArray colorValues = (COSArray)dictionary.getDictionaryObject( "C" ); if( colorValues == null ) { colorValues = new COSArray(); colorValues.add( COSInteger.ZERO ); colorValues.add( COSInteger.ZERO ); colorValues.add( COSInteger.ZERO ); dictionary.setItem( "C", colorValues ); } PDColorSpaceInstance instance = new PDColorSpaceInstance( colorValues ); instance.setColorSpace( PDDeviceRGB.INSTANCE ); return instance; } /** * Set the color space instance for this box style. This must be a * PDDeviceRGB! * * @param color The new colorspace value. */ public void setGuideLineColor( PDColorSpaceInstance color ) { COSArray values = null; if( color != null ) { values = color.getCOSColorSpaceValue(); } dictionary.setItem( "C", values ); } /** * Get the width of the of the guideline in default user space units. * The default is 1. * * @return The width of the guideline. */ public float getGuidelineWidth() { return dictionary.getFloat( "W", 1 ); } /** * Set the guideline width. * * @param width The width in default user space units. */ public void setGuidelineWidth( float width ) { dictionary.setFloat( "W", width ); } /** * Get the style for the guideline. The default is "S" for solid. * * @return The guideline style. * @see PDBoxStyle#GUIDELINE_STYLE_DASHED * @see PDBoxStyle#GUIDELINE_STYLE_SOLID */ public String getGuidelineStyle() { return dictionary.getNameAsString( "S", GUIDELINE_STYLE_SOLID ); } /** * Set the style for the box. * * @param style The style for the box line. * @see PDBoxStyle#GUIDELINE_STYLE_DASHED * @see PDBoxStyle#GUIDELINE_STYLE_SOLID */ public void setGuidelineStyle( String style ) { dictionary.setName( "S", style ); } /** * Get the line dash pattern for this box style. This is guaranteed to not * return null. The default is [3],0. * * @return The line dash pattern. */ public PDLineDashPattern getLineDashPattern() { PDLineDashPattern pattern = null; COSArray d = (COSArray)dictionary.getDictionaryObject( "D" ); if( d == null ) { d = new COSArray(); d.add( new COSInteger(3) ); dictionary.setItem( "D", d ); } COSArray lineArray = new COSArray(); lineArray.add( d ); //dash phase is not specified and assumed to be zero. lineArray.add( new COSInteger( 0 ) ); pattern = new PDLineDashPattern( lineArray ); return pattern; } /** * Set the line dash pattern associated with this box style. * * @param pattern The patter for this box style. */ public void setLineDashPattern( PDLineDashPattern pattern ) { COSArray array = null; if( pattern != null ) { array = pattern.getCOSDashPattern(); } dictionary.setItem( "D", array ); } }