PDAnnotationPolyline.java
/*
* Copyright 2018 The Apache Software Foundation.
*
* Licensed 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 org.apache.pdfbox.pdmodel.interactive.annotation;
import org.apache.pdfbox.cos.COSArray;
import org.apache.pdfbox.cos.COSDictionary;
import org.apache.pdfbox.cos.COSName;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.graphics.color.PDColor;
import org.apache.pdfbox.pdmodel.interactive.annotation.handlers.PDAppearanceHandler;
import org.apache.pdfbox.pdmodel.interactive.annotation.handlers.PDPolylineAppearanceHandler;
/**
*
* @author Paul King
*/
public class PDAnnotationPolyline extends PDAnnotationMarkup
{
/**
* The type of annotation.
*/
public static final String SUB_TYPE = "PolyLine";
private PDAppearanceHandler customAppearanceHandler;
/**
* Constructor.
*/
public PDAnnotationPolyline()
{
getCOSObject().setName(COSName.SUBTYPE, SUB_TYPE);
}
/**
* Constructor.
*
* @param dict The annotations dictionary.
*/
public PDAnnotationPolyline(COSDictionary dict)
{
super(dict);
}
/**
* This will set the line ending style for the start point, see the LE_ constants for the possible values.
*
* @param style The new style.
*/
public void setStartPointEndingStyle(String style)
{
String actualStyle = style == null ? PDAnnotationLine.LE_NONE : style;
COSArray array = getCOSObject().getCOSArray(COSName.LE);
if (array == null || array.size() == 0)
{
array = new COSArray();
array.add(COSName.getPDFName(actualStyle));
array.add(COSName.getPDFName(PDAnnotationLine.LE_NONE));
getCOSObject().setItem(COSName.LE, array);
}
else
{
array.setName(0, actualStyle);
}
}
/**
* This will retrieve the line ending style for the start point, possible values shown in the LE_ constants section.
*
* @return The ending style for the start point, LE_NONE if missing, never null.
*/
public String getStartPointEndingStyle()
{
COSArray array = getCOSObject().getCOSArray(COSName.LE);
if (array != null && array.size() >= 2)
{
return array.getName(0, PDAnnotationLine.LE_NONE);
}
return PDAnnotationLine.LE_NONE;
}
/**
* This will set the line ending style for the end point, see the LE_ constants for the possible values.
*
* @param style The new style.
*/
public void setEndPointEndingStyle(String style)
{
String actualStyle = style == null ? PDAnnotationLine.LE_NONE : style;
COSArray array = getCOSObject().getCOSArray(COSName.LE);
if (array == null || array.size() < 2)
{
array = new COSArray();
array.add(COSName.getPDFName(PDAnnotationLine.LE_NONE));
array.add(COSName.getPDFName(actualStyle));
getCOSObject().setItem(COSName.LE, array);
}
else
{
array.setName(1, actualStyle);
}
}
/**
* This will retrieve the line ending style for the end point, possible values shown in the LE_ constants section.
*
* @return The ending style for the end point, LE_NONE if missing, never null.
*/
public String getEndPointEndingStyle()
{
COSArray array = getCOSObject().getCOSArray(COSName.LE);
if (array != null && array.size() >= 2)
{
return array.getName(1, PDAnnotationLine.LE_NONE);
}
return PDAnnotationLine.LE_NONE;
}
/**
* This will set interior color of the line endings defined in the LE entry.
*
* @param ic color.
*/
public void setInteriorColor(PDColor ic)
{
getCOSObject().setItem(COSName.IC, ic.toCOSArray());
}
/**
* This will retrieve the interior color with which to fill the annotation’s line endings.
*
* @return object representing the color.
*/
public PDColor getInteriorColor()
{
return getColor(COSName.IC);
}
/**
* This will retrieve the numbers that shall represent the alternating horizontal and vertical
* coordinates.
*
* @return An array of floats representing the alternating horizontal and vertical coordinates.
*/
public float[] getVertices()
{
COSArray vertices = getCOSObject().getCOSArray(COSName.VERTICES);
return vertices != null ? vertices.toFloatArray() : null;
}
/**
* This will set the numbers that shall represent the alternating horizontal and vertical
* coordinates.
*
* @param points an array with the numbers that shall represent the alternating horizontal and
* vertical coordinates.
*/
public void setVertices(float[] points)
{
COSArray ar = new COSArray();
ar.setFloatArray(points);
getCOSObject().setItem(COSName.VERTICES, ar);
}
/**
* Set a custom appearance handler for generating the annotations appearance streams.
*
* @param appearanceHandler
*/
public void setCustomAppearanceHandler(PDAppearanceHandler appearanceHandler)
{
customAppearanceHandler = appearanceHandler;
}
@Override
public void constructAppearances()
{
this.constructAppearances(null);
}
@Override
public void constructAppearances(PDDocument document)
{
if (customAppearanceHandler == null)
{
PDPolylineAppearanceHandler appearanceHandler = new PDPolylineAppearanceHandler(this, document);
appearanceHandler.generateAppearanceStreams();
}
else
{
customAppearanceHandler.generateAppearanceStreams();
}
}
}