package com.tom_roush.pdfbox.pdmodel.documentinterchange.prepress; import com.tom_roush.pdfbox.cos.COSArray; import com.tom_roush.pdfbox.cos.COSDictionary; import com.tom_roush.pdfbox.cos.COSInteger; import com.tom_roush.pdfbox.cos.COSName; import com.tom_roush.pdfbox.pdmodel.common.COSObjectable; import com.tom_roush.pdfbox.pdmodel.graphics.PDLineDashPattern; import com.tom_roush.pdfbox.pdmodel.graphics.color.PDColor; import com.tom_roush.pdfbox.pdmodel.graphics.color.PDDeviceRGB; /** * The Box Style specifies visual characteristics for displaying box areas. * * @author Ben Litchfield */ public final 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. */ @Override public COSDictionary getCOSObject() { return dictionary; } /** * Get the RGB color to be used for the guidelines. This is guaranteed to * not return null. The default color is [0,0,0]. * *@return The guideline color. */ public PDColor getGuidelineColor() { COSArray colorValues = (COSArray) dictionary.getDictionaryObject(COSName.C); if( colorValues == null ) { colorValues = new COSArray(); colorValues.add( COSInteger.ZERO ); colorValues.add( COSInteger.ZERO ); colorValues.add( COSInteger.ZERO ); dictionary.setItem( "C", colorValues ); } PDColor color = new PDColor(colorValues.toFloatArray(), PDDeviceRGB.INSTANCE); return color; } /** * Set the color space instance for this box style. This must be a * PDDeviceRGB! * * @param color The new colorspace value. */ public void setGuideLineColor( PDColor color ) { COSArray values = null; if( color != null ) { values = color.toCOSArray(); } dictionary.setItem(COSName.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(COSName.W, 1); } /** * Set the guideline width. * * @param width The width in default user space units. */ public void setGuidelineWidth( float width ) { dictionary.setFloat(COSName.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(COSName.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(COSName.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; COSArray d = (COSArray) dictionary.getDictionaryObject(COSName.D); if( d == null ) { d = new COSArray(); d.add( COSInteger.THREE ); dictionary.setItem(COSName.D, d); } COSArray lineArray = new COSArray(); lineArray.add( d ); //dash phase is not specified and assumed to be zero. pattern = new PDLineDashPattern( lineArray, 0 ); return pattern; } /** * Set the line dash pattern associated with this box style. * * @param dashArray The patter for this box style. */ public void setLineDashPattern( COSArray dashArray ) { COSArray array = null; if( dashArray != null ) { array = dashArray; } dictionary.setItem(COSName.D, array); } }