Hi,


Maruan Sahyoun
> Am 27.05.2016 um 16:55 schrieb Andreas Lehmkuehler <andr...@lehmi.de>:
> 
> Hi,
> 
> looks like something is mixed up, PDFBOX-3364 is already resolved and the 
> commit doesn't seem to fit in, or do I miss something? The same for r1745641

these should have gone to PDFBOX-3353


> 
> BR
> Andreas
> 
>> Am 26.05.2016 um 23:34 schrieb msahy...@apache.org:
>> Author: msahyoun
>> Date: Thu May 26 21:34:19 2016
>> New Revision: 1745651
>> 
>> URL: http://svn.apache.org/viewvc?rev=1745651&view=rev
>> Log:
>> PDFBOX-3364: add handler for polygon annotation appearances
>> 
>> Added:
>>    
>> pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDPolygonAppearanceHandler.java
>>    (with props)
>> 
>> Added: 
>> pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDPolygonAppearanceHandler.java
>> URL: 
>> http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDPolygonAppearanceHandler.java?rev=1745651&view=auto
>> ==============================================================================
>> --- 
>> pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDPolygonAppearanceHandler.java
>>  (added)
>> +++ 
>> pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDPolygonAppearanceHandler.java
>>  Thu May 26 21:34:19 2016
>> @@ -0,0 +1,195 @@
>> +/*
>> + * 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 org.apache.pdfbox.pdmodel.interactive.annotation.handlers;
>> +
>> +import java.io.IOException;
>> +
>> +import org.apache.pdfbox.cos.COSArray;
>> +import org.apache.pdfbox.cos.COSBase;
>> +import org.apache.pdfbox.cos.COSName;
>> +import org.apache.pdfbox.cos.COSNumber;
>> +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation;
>> +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationLink;
>> +import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationMarkup;
>> +import 
>> org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceContentStream;
>> +import 
>> org.apache.pdfbox.pdmodel.interactive.annotation.PDBorderStyleDictionary;
>> +
>> +/**
>> + * Handler to generate the polygon annotations appearance.
>> + *
>> + */
>> +public class PDPolygonAppearanceHandler extends PDAbstractAppearanceHandler
>> +{
>> +
>> +    public PDPolygonAppearanceHandler(PDAnnotation annotation)
>> +    {
>> +        super(annotation);
>> +    }
>> +
>> +    @Override
>> +    public void generateAppearanceStreams()
>> +    {
>> +        generateNormalAppearance();
>> +        generateRolloverAppearance();
>> +        generateDownAppearance();
>> +    }
>> +
>> +    @Override
>> +    public void generateNormalAppearance()
>> +    {
>> +        // Adobe doesn't generate an appearance for a link annotation
>> +        float lineWidth = getLineWidth();
>> +        try
>> +        {
>> +            PDAnnotation annotation = getAnnotation();
>> +            PDAppearanceContentStream contentStream = 
>> getNormalAppearanceAsContentStream();
>> +            ;
>> +            contentStream.setStrokingColorOnDemand(getColor());
>> +
>> +            // TODO: handle opacity settings
>> +
>> +            contentStream.setBorderLine(lineWidth, ((PDAnnotationMarkup) 
>> annotation).getBorderStyle());
>> +
>> +            // the differences rectangle
>> +            // TODO: this only works for border effect solid. Cloudy needs a
>> +            // different approach.
>> +            setRectDifference(lineWidth);
>> +
>> +            // Acrobat applies a padding to each side of the bbox so the 
>> line is
>> +            // completely within
>> +            // the bbox.
>> +
>> +            // PDF 2.0: Path takes priority over Vertices
>> +            COSBase path = 
>> annotation.getCOSObject().getDictionaryObject(COSName.getPDFName("Path"));
>> +            if (path instanceof COSArray)
>> +            {
>> +                COSArray pathArray = (COSArray) path;
>> +                for (int i = 0; i < pathArray.size(); i++)
>> +                {
>> +                    COSBase points = pathArray.get(i);
>> +                    if (points instanceof COSArray)
>> +                    {
>> +                        float[] pointsArray = ((COSArray) 
>> points).toFloatArray();
>> +                        // first array shall be of size 2 and specify the 
>> moveto
>> +                        // operator
>> +                        if (i == 0 && pointsArray.length == 2)
>> +                        {
>> +                            contentStream.moveTo(pointsArray[0], 
>> pointsArray[1]);
>> +                        }
>> +                        else
>> +                        {
>> +                            // entries of length 2 shall be treated as 
>> lineto
>> +                            // operator
>> +                            if (pointsArray.length == 2)
>> +                            {
>> +                                contentStream.lineTo(pointsArray[0], 
>> pointsArray[1]);
>> +                            } else if (pointsArray.length == 6)
>> +                            {
>> +                                contentStream.curveTo(pointsArray[0], 
>> pointsArray[1], pointsArray[2], pointsArray[3],
>> +                                        pointsArray[4], pointsArray[5]);
>> +                            }
>> +                        }
>> +                    }
>> +                }
>> +            }
>> +            else
>> +            {
>> +                COSBase vertices = 
>> annotation.getCOSObject().getDictionaryObject(COSName.VERTICES);
>> +                if (!(vertices instanceof COSArray))
>> +                {
>> +                    return;
>> +                }
>> +
>> +                COSArray verticesArray = (COSArray) vertices;
>> +                int nPoints = verticesArray.size() / 2;
>> +                for (int i = 0; i < nPoints; i++)
>> +                {
>> +                    COSBase bx = verticesArray.getObject(i * 2);
>> +                    COSBase by = verticesArray.getObject(i * 2 + 1);
>> +                    if (bx instanceof COSNumber && by instanceof COSNumber)
>> +                    {
>> +                        float x = ((COSNumber) bx).floatValue();
>> +                        float y = ((COSNumber) by).floatValue();
>> +                        if (i == 0)
>> +                        {
>> +                            contentStream.moveTo(x, y);
>> +                        }
>> +                        else
>> +                        {
>> +                            contentStream.lineTo(x, y);
>> +                        }
>> +                    }
>> +                }
>> +                contentStream.stroke();
>> +            }
>> +
>> +            contentStream.close();
>> +        } catch (IOException e)
>> +        {
>> +            e.printStackTrace();
>> +        }
>> +    }
>> +
>> +    @Override
>> +    public void generateRolloverAppearance()
>> +    {
>> +        // No rollover appearance generated for a polygon annotation
>> +    }
>> +
>> +    @Override
>> +    public void generateDownAppearance()
>> +    {
>> +        // No down appearance generated for a polygon annotation
>> +    }
>> +
>> +    /**
>> +     * Get the line with of the border.
>> +     *
>> +     * Get the width of the line used to draw a border around the 
>> annotation.
>> +     * This may either be specified by the annotation dictionaries Border
>> +     * setting or by the W entry in the BS border style dictionary. If both 
>> are
>> +     * missing the default width is 1.
>> +     *
>> +     * @return the line width
>> +     */
>> +    // TODO: according to the PDF spec the use of the BS entry is annotation
>> +    // specific
>> +    // so we will leave that to be implemented by individual handlers.
>> +    // If at the end all annotations support the BS entry this can be 
>> handled
>> +    // here and removed from the individual handlers.
>> +    float getLineWidth()
>> +    {
>> +        PDAnnotationLink annotation = (PDAnnotationLink) getAnnotation();
>> +
>> +        PDBorderStyleDictionary bs = annotation.getBorderStyle();
>> +
>> +        if (bs != null)
>> +        {
>> +            return bs.getWidth();
>> +        } else
>> +        {
>> +            COSArray borderCharacteristics = annotation.getBorder();
>> +            if (borderCharacteristics != null && 
>> borderCharacteristics.size() >= 3)
>> +            {
>> +                return borderCharacteristics.getInt(3);
>> +            }
>> +        }
>> +
>> +        return 1;
>> +    }
>> +}
>> 
>> Propchange: 
>> pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDPolygonAppearanceHandler.java
>> ------------------------------------------------------------------------------
>>    svn:eol-style = native
>> 
>> Propchange: 
>> pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/annotation/handlers/PDPolygonAppearanceHandler.java
>> ------------------------------------------------------------------------------
>>    svn:mime-type = text/plain
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@pdfbox.apache.org
> For additional commands, e-mail: dev-h...@pdfbox.apache.org
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@pdfbox.apache.org
For additional commands, e-mail: dev-h...@pdfbox.apache.org

Reply via email to