All Downloads are FREE. Search and download functionalities are using the official Maven repository.
Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
net.sf.jasperreports.engine.export.draw.ImageDrawer Maven / Gradle / Ivy
/*
* JasperReports - Free Java Reporting Library.
* Copyright (C) 2001 - 2011 Jaspersoft Corporation. All rights reserved.
* http://www.jaspersoft.com
*
* Unless you have purchased a commercial license agreement from Jaspersoft,
* the following license terms apply:
*
* This program is part of JasperReports.
*
* JasperReports is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* JasperReports 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with JasperReports. If not, see .
*/
/*
* Contributors:
* Eugene D - [email protected]
* Adrian Jackson - [email protected]
* David Taylor - [email protected]
* Lars Kristensen - [email protected]
*/
package net.sf.jasperreports.engine.export.draw;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.Shape;
import java.awt.geom.Dimension2D;
import net.sf.jasperreports.engine.DefaultJasperReportsContext;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRPrintImage;
import net.sf.jasperreports.engine.JasperReportsContext;
import net.sf.jasperreports.engine.Renderable;
import net.sf.jasperreports.engine.RenderableUtil;
import net.sf.jasperreports.engine.type.ModeEnum;
import net.sf.jasperreports.engine.type.RenderableTypeEnum;
/**
* @author Teodor Danciu ([email protected] )
* @version $Id: ImageDrawer.java 5074 2012-03-14 12:08:10Z teodord $
*/
public class ImageDrawer extends ElementDrawer
{
/**
* @deprecated Replaced by {@link #ImageDrawer(JasperReportsContext)}.
*/
public ImageDrawer()
{
this(DefaultJasperReportsContext.getInstance());
}
/**
*
*/
public ImageDrawer(JasperReportsContext jasperReportsContext)
{
super(jasperReportsContext);
}
/**
*
*/
public void draw(Graphics2D grx, JRPrintImage printImage, int offsetX, int offsetY) throws JRException
{
if (printImage.getModeValue() == ModeEnum.OPAQUE)
{
grx.setColor(printImage.getBackcolor());
grx.fillRect(
printImage.getX() + offsetX,
printImage.getY() + offsetY,
printImage.getWidth(),
printImage.getHeight()
);
}
int topPadding = printImage.getLineBox().getTopPadding().intValue();
int leftPadding = printImage.getLineBox().getLeftPadding().intValue();
int bottomPadding = printImage.getLineBox().getBottomPadding().intValue();
int rightPadding = printImage.getLineBox().getRightPadding().intValue();
int availableImageWidth = printImage.getWidth() - leftPadding - rightPadding;
availableImageWidth = (availableImageWidth < 0)?0:availableImageWidth;
int availableImageHeight = printImage.getHeight() - topPadding - bottomPadding;
availableImageHeight = (availableImageHeight < 0)?0:availableImageHeight;
Renderable renderer = printImage.getRenderable();
if (
renderer != null &&
availableImageWidth > 0 &&
availableImageHeight > 0
)
{
if (renderer.getTypeValue() == RenderableTypeEnum.IMAGE)
{
// Image renderers are all asked for their image data and dimension at some point.
// Better to test and replace the renderer now, in case of lazy load error.
renderer = RenderableUtil.getInstance(getJasperReportsContext()).getOnErrorRendererForImageData(renderer, printImage.getOnErrorTypeValue());
if (renderer != null)
{
renderer = RenderableUtil.getInstance(getJasperReportsContext()).getOnErrorRendererForDimension(renderer, printImage.getOnErrorTypeValue());
}
}
}
else
{
renderer = null;
}
if (renderer != null)
{
int normalWidth = availableImageWidth;
int normalHeight = availableImageHeight;
Dimension2D dimension = renderer.getDimension(getJasperReportsContext());
if (dimension != null)
{
normalWidth = (int)dimension.getWidth();
normalHeight = (int)dimension.getHeight();
}
float xalignFactor = 0f;
switch (printImage.getHorizontalAlignmentValue())
{
case RIGHT :
{
xalignFactor = 1f;
break;
}
case CENTER :
{
xalignFactor = 0.5f;
break;
}
case LEFT :
default :
{
xalignFactor = 0f;
break;
}
}
float yalignFactor = 0f;
switch (printImage.getVerticalAlignmentValue())
{
case BOTTOM :
{
yalignFactor = 1f;
break;
}
case MIDDLE :
{
yalignFactor = 0.5f;
break;
}
case TOP :
default :
{
yalignFactor = 0f;
break;
}
}
switch (printImage.getScaleImageValue())// FIXME maybe put this in JRFiller
{
case CLIP :
{
int xoffset = (int)(xalignFactor * (availableImageWidth - normalWidth));
int yoffset = (int)(yalignFactor * (availableImageHeight - normalHeight));
Shape oldClipShape = grx.getClip();
grx.clip(
new Rectangle(
printImage.getX() + leftPadding + offsetX,
printImage.getY() + topPadding + offsetY,
availableImageWidth,
availableImageHeight
)
);
try
{
renderer.render(
getJasperReportsContext(),
grx,
new Rectangle(
printImage.getX() + leftPadding + offsetX + xoffset,
printImage.getY() + topPadding + offsetY + yoffset,
normalWidth,
normalHeight
)
);
}
finally
{
grx.setClip(oldClipShape);
}
break;
}
case FILL_FRAME :
{
renderer.render(
getJasperReportsContext(),
grx,
new Rectangle(
printImage.getX() + leftPadding + offsetX,
printImage.getY() + topPadding + offsetY,
availableImageWidth,
availableImageHeight
)
);
break;
}
case RETAIN_SHAPE :
default :
{
if (printImage.getHeight() > 0)
{
double ratio = (double)normalWidth / (double)normalHeight;
if( ratio > (double)availableImageWidth / (double)availableImageHeight )
{
normalWidth = availableImageWidth;
normalHeight = (int)(availableImageWidth / ratio);
}
else
{
normalWidth = (int)(availableImageHeight * ratio);
normalHeight = availableImageHeight;
}
int xoffset = (int)(xalignFactor * (availableImageWidth - normalWidth));
int yoffset = (int)(yalignFactor * (availableImageHeight - normalHeight));
renderer.render(
getJasperReportsContext(),
grx,
new Rectangle(
printImage.getX() + leftPadding + offsetX + xoffset,
printImage.getY() + topPadding + offsetY + yoffset,
normalWidth,
normalHeight
)
);
}
break;
}
}
}
if (
printImage.getLineBox().getTopPen().getLineWidth().floatValue() <= 0f &&
printImage.getLineBox().getLeftPen().getLineWidth().floatValue() <= 0f &&
printImage.getLineBox().getBottomPen().getLineWidth().floatValue() <= 0f &&
printImage.getLineBox().getRightPen().getLineWidth().floatValue() <= 0f
)
{
if (printImage.getLinePen().getLineWidth().floatValue() != 0)
{
drawPen(
grx,
printImage.getLinePen(),
printImage,
offsetX,
offsetY
);
}
}
else
{
drawBox(grx, printImage.getLineBox(), printImage, offsetX, offsetY);
}
}
}