All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.itextpdf.layout.properties.Underline Maven / Gradle / Ivy

There is a newer version: 9.0.0
Show newest version
/*
    This file is part of the iText (R) project.
    Copyright (c) 1998-2023 Apryse Group NV
    Authors: Apryse Software.

    This program is offered under a commercial and under the AGPL license.
    For commercial licensing, contact us at https://itextpdf.com/sales.  For AGPL licensing, see below.

    AGPL licensing:
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU Affero General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Affero General Public License for more details.

    You should have received a copy of the GNU Affero General Public License
    along with this program.  If not, see .
 */
package com.itextpdf.layout.properties;

import com.itextpdf.kernel.colors.Color;
import com.itextpdf.kernel.pdf.canvas.PdfCanvasConstants;

import static com.itextpdf.kernel.pdf.canvas.PdfCanvasConstants.*;

/**
 * A POJO that describes the underline of a layout element.
 * 
 * This class is to be used as a property for an element or renderer,
 * as the value for {@link com.itextpdf.layout.properties.Property#UNDERLINE}
 */
public class Underline {
    protected TransparentColor transparentColor;
    protected float thickness;
    protected float thicknessMul;
    protected float yPosition;
    protected float yPositionMul;
    protected int lineCapStyle = PdfCanvasConstants.LineCapStyle.BUTT;

    /**
     * Creates an Underline. Both the thickness and vertical positioning under
     * the text element's base line can be set to a fixed value, or a variable
     * one depending on the element's font size.
     * If you want a fixed-width thickness, set thicknessMul to 0;
     * if you want a thickness solely dependent on the font size, set
     * thickness to 0.
     * Mutatis mutandis for the y-position.
     * 
     * @param color the {@link Color} of the underline
     * @param thickness  a float defining the minimum thickness in points of the underline
     * @param thicknessMul  a float defining the font size dependent component of the thickness of the underline
     * @param yPosition a float defining the default absolute vertical distance in points from the text's base line
     * @param yPositionMul  a float defining the font size dependent component of the vertical positioning of the underline
     * @param lineCapStyle the way the underline finishes at its edges. {@link LineCapStyle}
     */
    public Underline(Color color, float thickness, float thicknessMul, float yPosition, float yPositionMul, int lineCapStyle) {
        this(color, 1f, thickness, thicknessMul, yPosition, yPositionMul, lineCapStyle);
    }

    /**
     * Creates an Underline. Both the thickness and vertical positioning under
     * the text element's base line can be set to a fixed value, or a variable
     * one depending on the element's font size.
     * If you want a fixed-width thickness, set thicknessMul to 0;
     * if you want a thickness solely dependent on the font size, set
     * thickness to 0.
     * Mutatis mutandis for the y-position.
     * 
     * @param color the {@link Color} of the underline
     * @param opacity  a float defining the opacity of the underline; a float between 0 and 1, where 1 stands for fully opaque color and 0 - for fully transparent
     * @param thickness  a float defining the minimum thickness in points of the underline
     * @param thicknessMul  a float defining the font size dependent component of the thickness of the underline
     * @param yPosition a float defining the default absolute vertical distance in points from the text's base line
     * @param yPositionMul  a float defining the font size dependent component of the vertical positioning of the underline
     * @param lineCapStyle the way the underline finishes at its edges. {@link LineCapStyle}
     */
    public Underline(Color color, float opacity, float thickness, float thicknessMul, float yPosition, float yPositionMul, int lineCapStyle) {
        this.transparentColor = new TransparentColor(color, opacity);
        this.thickness = thickness;
        this.thicknessMul = thicknessMul;
        this.yPosition = yPosition;
        this.yPositionMul = yPositionMul;
        this.lineCapStyle = lineCapStyle;
    }

    /**
     * Gets the color of the underline.
     * @return a {@link Color}
     */
    public Color getColor() {
        return transparentColor.getColor();
    }

    /**
     * Gets the opacity of the underline color.
     * @return a float between 0 and 1, where 1 stands for fully opaque color and 0 - for fully transparent
     */
    public float getOpacity() {
        return transparentColor.getOpacity();
    }

    /**
     * Gets the total thickness of the underline (fixed + variable part).
     * @param fontSize the font size for which to calculate the variable thickness
     * @return the total thickness, as a float, in points
     */
    public float getThickness(float fontSize) {
        return thickness + thicknessMul * fontSize;
    }

    /**
     * Gets the vertical position of the underline (fixed + variable part).
     * @param fontSize the font size for which to calculate the variable position
     * @return the y-position, as a float, in points
     */
    public float getYPosition(float fontSize) {
        return yPosition + yPositionMul * fontSize;
    }

    /**
     * Gets the multiplier for the vertical positioning of the text underline.
     * @return the Y-position multiplier, as a float
     */
    public float getYPositionMul() {
        return yPositionMul;
    }
    
    /**
     * Gets the {@link LineCapStyle} of the text underline.
     * @return the line cap style, as an int referring to
     * the values of {@link LineCapStyle}
     */
    public int getLineCapStyle() {
        return lineCapStyle;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy