Example usage for com.itextpdf.text.pdf PdfTemplate roundRectangle

List of usage examples for com.itextpdf.text.pdf PdfTemplate roundRectangle

Introduction

In this page you can find the example usage for com.itextpdf.text.pdf PdfTemplate roundRectangle.

Prototype

public void roundRectangle(float x, float y, float w, float h, float r) 

Source Link

Document

Adds a round rectangle to the current path.

Usage

From source file:se.billes.pdf.renderer.model.Image.java

License:Open Source License

@Override
public void onRender(PdfContentByte cb) throws PdfRenderException {

    ImageInstance instance = null;/*from   w ww  .  java2  s  .co  m*/
    try {
        instance = new ImageFactory().getImageByFile(cb, file);
    } catch (Exception e) {
        throw new PdfRenderException(e);
    }

    float pageHeight = getPage().getPdfDocument().getSize()[1];
    float pageWidth = getPage().getPdfDocument().getSize()[0];

    float x = 0;
    float y = 0;
    float fitHeight = 0f;
    float imageHeight = 0;
    float imageWidth = 0;
    boolean alignImage = false;

    float[] positions = new BlockFactory().getBoundsInPs(this);

    float width = positions[2];
    float height = positions[3];

    com.itextpdf.text.Image image = instance.getImage();

    int dpiX = image.getDpiX();
    if (dpiX == 0) {
        dpiX = 300;

    }
    if (!new ImageFactory().isPdf(file)) {
        dpiX = getDotsPerInch();
        alignImage = true; // always align jpg
    }

    float realPercent = 72f / dpiX * 100; // only jpg
    if (isScaleToFit()) {
        image.scaleToFit(width, height);
        imageHeight = image.getScaledHeight();
        imageWidth = image.getScaledWidth();
    } else if (isFitContentProportionally()) {
        image.scaleToFit(width, height);
        imageHeight = image.getScaledHeight();
        imageWidth = image.getScaledWidth();
        fitHeight = height - imageHeight;
        alignImage = true;
    } else {
        if (isFillFrameProportionally()) {
            float percentWidth = width / image.getWidth();
            float percentHeight = height / image.getHeight();
            realPercent = Math.max(percentHeight, percentWidth) * 100;
            alignImage = true;
            if (new ImageFactory().isPdf(file)) {
                image.scalePercent(realPercent);
                imageHeight = image.getScaledHeight();
                imageWidth = image.getScaledWidth();
                fitHeight = height - imageHeight;
            }
        }

        if (isCenterImageToPageWidth() && new ImageFactory().isPdf(file)) {

            imageWidth = image.getScaledWidth();
            float middle = (pageWidth / 2) - (imageWidth / 2);
            positions[0] = SizeFactory.PostscriptPointsToMillimeters(middle);
        }

        if (!new ImageFactory().isPdf(file)) {
            image.scalePercent(realPercent);
            imageHeight = image.getScaledHeight();
            imageWidth = image.getScaledWidth();
            fitHeight = height - imageHeight;
        }
    }

    if (alignImage) {
        float[] result = handleAlignment(width, imageWidth, height, imageHeight, fitHeight);
        x = result[0];
        y = result[1];
    }
    try {
        PdfTemplate tp = cb.createTemplate(width, height);
        image.setAbsolutePosition(x, y);
        tp.roundRectangle(0, 0, width, height, SizeFactory.millimetersToPostscriptPoints(getRadius()));
        tp.clip();
        tp.newPath();
        tp.addImage(image);

        float left = getPosition()[0];
        float top = getPosition()[1];
        if (getPage().getPdfDocument().getCutmarks() != null) {
            left += SizeFactory.CUT_MARK;
            top -= SizeFactory.CUT_MARK;
        }

        cb.addTemplate(tp, SizeFactory.millimetersToPostscriptPoints(left),
                SizeFactory.millimetersToPostscriptPoints(pageHeight - (top + getPosition()[3])));
        if (getBorder() != null) {
            cb.setLineWidth(SizeFactory.millimetersToPostscriptPoints(getBorder().getThickness()));
            cb.setColorStroke(getBorder().getBaseColor());
            cb.roundRectangle(SizeFactory.millimetersToPostscriptPoints(left),
                    SizeFactory.millimetersToPostscriptPoints(pageHeight - (top + getPosition()[3])), width,
                    height, SizeFactory.millimetersToPostscriptPoints(getRadius()));
            cb.stroke();
        }

    } catch (Exception e) {
        throw new PdfRenderException(e);
    }

}

From source file:se.billes.pdf.renderer.request.factory.BlockFactory.java

License:Open Source License

public void createRoundRectangle(PdfContentByte cb, Block block) {
    PdfDocument request = getPdfDocument(block);
    float[] positions = getBoundsInPs(block);
    float[] mmPositions = getBoundsInMMIncludeCutmark(block);
    PdfTemplate tp = cb.createTemplate(positions[2], positions[3]);

    tp.roundRectangle(0, 0, positions[2], positions[3],
            SizeFactory.millimetersToPostscriptPoints(block.getRadius()));

    // because pdf i calculated from bottom up
    cb.addTemplate(tp, positions[0], SizeFactory
            .millimetersToPostscriptPoints(request.getSize()[1] - (mmPositions[1] + mmPositions[3])));

}

From source file:se.billes.pdf.renderer.request.factory.CellBlockEvent.java

License:Open Source License

public PdfPCellEvent createEvent(final Block block) {
    return new PdfPCellEvent() {
        public void cellLayout(PdfPCell cell, Rectangle rect, PdfContentByte[] canvas) {

            float radiusInPs = SizeFactory.millimetersToPostscriptPoints(block.getRadius());
            PdfContentByte cb = canvas[PdfPTable.LINECANVAS];
            PdfTemplate template = cb.createTemplate(rect.getWidth(), rect.getHeight());
            template.roundRectangle(0, 0, rect.getWidth(), rect.getHeight(), radiusInPs);
            template.clip();//from  ww w  . j a  va 2  s  .  c  o  m
            template.newPath();

            if (block.getBaseColor() != null) {
                template.setColorFill(block.getBaseColor());
            }

            Border border = block.getBorder();

            if (border != null) {
                template.setLineWidth(SizeFactory.millimetersToPostscriptPoints(border.getThickness()));
                template.setColorStroke(border.getBaseColor());
            }

            template.roundRectangle(0, 0, rect.getWidth(), rect.getHeight(), radiusInPs);

            if (block.getBaseColor() != null || border != null) {
                if (block.getBaseColor() != null && border != null) {
                    template.fillStroke();
                } else if (block.getBaseColor() != null) {
                    template.fill();
                } else {

                    template.stroke();
                }
            }
            cb.addTemplate(template, rect.getLeft(), rect.getBottom());
        }
    };
}