Example usage for org.apache.poi.xslf.usermodel XSLFSimpleShape setAnchor

List of usage examples for org.apache.poi.xslf.usermodel XSLFSimpleShape setAnchor

Introduction

In this page you can find the example usage for org.apache.poi.xslf.usermodel XSLFSimpleShape setAnchor.

Prototype

@Override
    public void setAnchor(Rectangle2D anchor) 

Source Link

Usage

From source file:de.kiwiwings.jasperreports.exporter.PptxShapeExporter.java

License:Open Source License

/**
 *
 *//*from w ww .  j  av a2 s .  co m*/
public void exportImage(JRPrintImage image) throws JRException {
    int leftPadding = image.getLineBox().getLeftPadding().intValue();
    int topPadding = image.getLineBox().getTopPadding().intValue();//FIXMEDOCX maybe consider border thickness
    int rightPadding = image.getLineBox().getRightPadding().intValue();
    int bottomPadding = image.getLineBox().getBottomPadding().intValue();

    double availableImageWidth = image.getWidth() - leftPadding - rightPadding;
    availableImageWidth = availableImageWidth < 0 ? 0 : availableImageWidth;

    double availableImageHeight = image.getHeight() - topPadding - bottomPadding;
    availableImageHeight = availableImageHeight < 0 ? 0 : availableImageHeight;

    Renderable renderer = image.getRenderable();

    if (renderer == null || availableImageWidth == 0 || availableImageHeight == 0)
        return;

    if (renderer.getTypeValue() == RenderableTypeEnum.IMAGE) {
        // Non-lazy image renderers are all asked for their image data at some point.
        // Better to test and replace the renderer now, in case of lazy load error.
        renderer = RenderableUtil.getInstance(jasperReportsContext).getOnErrorRendererForImageData(renderer,
                image.getOnErrorTypeValue());
        if (renderer == null)
            return;
    }

    double normalWidth = availableImageWidth;
    double normalHeight = availableImageHeight;

    // Image load might fail.
    Renderable tmpRenderer = RenderableUtil.getInstance(jasperReportsContext)
            .getOnErrorRendererForDimension(renderer, image.getOnErrorTypeValue());
    Dimension2D dimension = tmpRenderer == null ? null : tmpRenderer.getDimension(jasperReportsContext);
    // If renderer was replaced, ignore image dimension.
    if (tmpRenderer == renderer && dimension != null) {
        normalWidth = dimension.getWidth();
        normalHeight = dimension.getHeight();
    }

    double cropTop = 0;
    double cropLeft = 0;
    double cropBottom = 0;
    double cropRight = 0;

    switch (image.getScaleImageValue()) {
    case FILL_FRAME:
        //            width = availableImageWidth;
        //            height = availableImageHeight;
        break;

    default:
    case RETAIN_SHAPE:
        if (availableImageWidth > 0 && availableImageHeight > 0) {
            if (normalWidth > availableImageWidth) {
                normalHeight /= normalWidth / availableImageWidth;
                normalWidth = availableImageWidth;
            }
            if (normalHeight > availableImageHeight) {
                normalWidth /= normalHeight / availableImageHeight;
                normalHeight = availableImageHeight;
            }
        }
        // nobreak

    case CLIP:
        if (availableImageWidth > 0 && availableImageHeight > 0) {
            double reducedWidth = getOffsetInPercent(normalWidth, availableImageWidth);
            switch (image.getHorizontalAlignmentValue()) {
            default:
            case LEFT:
                cropRight = reducedWidth;
                break;
            case RIGHT:
                cropLeft = reducedWidth;
                break;
            case CENTER:
                cropLeft = cropRight = reducedWidth / 2d;
                break;
            }
            double reducedHeight = getOffsetInPercent(normalHeight, availableImageHeight);
            switch (image.getVerticalAlignmentValue()) {
            default:
            case BOTTOM:
                cropTop = reducedHeight;
                break;
            case TOP:
                cropBottom = reducedHeight;
                break;
            case MIDDLE:
                cropTop = cropBottom = reducedHeight / 2;
                break;
            }
        }
        break;
    }

    XSLFSimpleShape backgroundShape;
    XSLFShape hyperlinkShape;

    if (renderer instanceof DrawChartRenderer) {
        Rectangle2D rect = new Rectangle2D.Double(image.getX(), image.getY(), image.getWidth(),
                image.getHeight());
        PptxGraphics2D grx2 = new PptxGraphics2D(rect, this, slide);
        // Background color is applied to whole Image
        backgroundShape = grx2.getShape(rect);
        renderer.render(jasperReportsContext, grx2, rect);

        // hyperlinks are only available for visible elements of the chart
        XSLFGroupShape grp = grx2.getShapeGroup();
        CTNonVisualDrawingProps cp = grp.getXmlObject().getNvGrpSpPr().getCNvPr();
        cp.setName(cp.getName().replaceFirst("[^ ]+", "JFreeChart"));
        hyperlinkShape = grp;
    } else {
        //   if (image.isLazy())//FIXMEDOCX learn how to link images            
        Renderable imgRenderer = image.getRenderable();
        if (imgRenderer.getTypeValue() == RenderableTypeEnum.SVG) {
            imgRenderer = new JRWrappingSvgRenderer(imgRenderer,
                    new Dimension(image.getWidth(), image.getHeight()),
                    ModeEnum.OPAQUE == image.getModeValue() ? image.getBackcolor() : null);
        }

        ImageTypeEnum mimeType = imgRenderer.getImageTypeValue();
        if (mimeType == null)
            mimeType = ImageTypeEnum.JPEG;
        int xsMime;
        switch (mimeType) {
        default:
        case UNKNOWN:
        case JPEG:
            xsMime = XSLFPictureData.PICTURE_TYPE_JPEG;
            break;
        case GIF:
            xsMime = XSLFPictureData.PICTURE_TYPE_GIF;
            break;
        case PNG:
            xsMime = XSLFPictureData.PICTURE_TYPE_PNG;
            break;
        case TIFF:
            xsMime = XSLFPictureData.PICTURE_TYPE_TIFF;
            break;
        }

        byte pictureData[] = imgRenderer.getImageData(jasperReportsContext);

        int idx = ppt.addPicture(pictureData, xsMime);
        backgroundShape = slide.createPicture(idx);
        hyperlinkShape = backgroundShape;
        CTPicture ct = (CTPicture) backgroundShape.getXmlObject();

        if (cropTop != 0 || cropRight != 0 || cropBottom != 0 || cropLeft != 0) {
            //            CTRelativeRect rrect = ct.getBlipFill().getStretch().getFillRect();
            CTRelativeRect rrect = ct.getBlipFill().addNewSrcRect();
            rrect.setT((int) cropTop);
            rrect.setR((int) cropRight);
            rrect.setB((int) cropBottom);
            rrect.setL((int) cropLeft);
        }

        Rectangle2D rect = new Rectangle2D.Double(image.getX() + getOffsetX() + leftPadding,
                image.getY() + getOffsetY() + topPadding, availableImageWidth, availableImageHeight);
        backgroundShape.setAnchor(rect);
    }

    exportElementAttributes(backgroundShape, image, image.getLinePen(), image, hyperlinkShape);
}