Commit f7ce60c7 by Juho Juopperi

pdf for usercardservlet

1 parent 71b73b1a
......@@ -17,6 +17,14 @@ import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.pdfjet.Box;
import com.pdfjet.CoreFont;
import com.pdfjet.Image;
import com.pdfjet.ImageType;
import com.pdfjet.PDF;
import com.pdfjet.Page;
import com.pdfjet.TextLine;
import fi.insomnia.bortal.beans.CardTemplateBeanLocal;
import fi.insomnia.bortal.beans.PermissionBeanLocal;
import fi.insomnia.bortal.beans.UserBeanLocal;
......@@ -51,7 +59,8 @@ public class UserCardServlet extends GenericImageServlet {
@EJB
private transient CardTemplateBeanLocal cardbean;
private static final Logger logger = LoggerFactory.getLogger(UserCardServlet.class);
private static final Logger logger = LoggerFactory
.getLogger(UserCardServlet.class);
@Override
protected ImageMover getImagedata() {
......@@ -63,37 +72,40 @@ public class UserCardServlet extends GenericImageServlet {
if (card != null) {
if (!permbean.isCurrentUser(card.getUser())
&& !permbean.hasPermission(UserPermission.MODIFY)
&& !lhMatcher.matcher(request.getLocalAddr()).matches())
{
&& !lhMatcher.matcher(request.getLocalAddr()).matches()) {
ret.setResponse(HttpServletResponse.SC_FORBIDDEN);
}
else
{
} else {
try {
ret.setData(mkCard(card));
ret.setImagetype("image/jpeg");
// ret.setImagetype("image/jpeg");
ret.setImagetype("application/pdf");
} catch (IOException e) {
ret.setResponse(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
} catch (Exception e) {
ret.setResponse(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
e.printStackTrace();
}
}
} else
{
} else {
ret.setResponse(HttpServletResponse.SC_NOT_FOUND);
}
return ret;
}
private byte[] mkCard(PrintedCard card) throws IOException {
private byte[] mkCardJpeg(PrintedCard card) throws IOException {
EventUser user = card.getUser();
BufferedImage face = ImageIO.read(new ByteArrayInputStream(user.getUser().getCurrentImage().getImageData()));
BufferedImage face = ImageIO.read(new ByteArrayInputStream(user
.getUser().getCurrentImage().getImageData()));
BufferedImage base = ImageIO.read(new ByteArrayInputStream(card.getTemplate().getImage()));
BufferedImage base = ImageIO.read(new ByteArrayInputStream(card
.getTemplate().getImage()));
BufferedImage outimage = new BufferedImage(base.getWidth(), base.getHeight(), BufferedImage.TYPE_INT_RGB);
BufferedImage outimage = new BufferedImage(base.getWidth(),
base.getHeight(), BufferedImage.TYPE_INT_RGB);
Graphics2D g = outimage.createGraphics();
// g.drawImage(org, AffineTransform.getScaleInstance(0.31, 0.31), null);
......@@ -113,7 +125,8 @@ public class UserCardServlet extends GenericImageServlet {
g.setFont(new Font("Century gothic", Font.BOLD, 45));
StringBuilder wholeName = new StringBuilder();
wholeName.append(user.getUser().getFirstnames()).append(" ").append(user.getUser().getLastname());
wholeName.append(user.getUser().getFirstnames()).append(" ")
.append(user.getUser().getLastname());
// g.setFont(new Font("Arial", Font.BOLD, 35));
// g.drawString(name, 595 -
......@@ -125,10 +138,13 @@ public class UserCardServlet extends GenericImageServlet {
g.drawString(wholeName.toString(), 60, 865);
g.drawString(card.getTemplate().getName(), 60, 915);
String barcodeString = String.valueOf(user.getUser().getCreated().getTime().getTime());
String barcodeString = String.valueOf(user.getUser().getCreated()
.getTime().getTime());
barcodeString = barcodeString.substring(barcodeString.length() - 12);
BufferedImage image = ImageIO.read(BarcodeUtils.getBarcodeEAN(barcodeString));
g.drawImage(image, 0, base.getHeight() - 120, base.getWidth(), 120, null);
BufferedImage image = ImageIO.read(BarcodeUtils
.getBarcodeEAN(barcodeString));
g.drawImage(image, 0, base.getHeight() - 120, base.getWidth(), 120,
null);
g.dispose();
......@@ -137,4 +153,102 @@ public class UserCardServlet extends GenericImageServlet {
ImageIO.write(outimage, "jpeg", ostr);
return ostr.toByteArray();
}
// 300 dpi, 1016 px pituus, 648 px leveys,
// 85,5 mm x 54,0 mm
private byte[] mkCard(PrintedCard card) throws Exception {
EventUser user = card.getUser();
BufferedImage cardBackground = ImageIO.read(new ByteArrayInputStream(
card.getTemplate().getImage()));
BufferedImage faceBufferedImage = ImageIO
.read(new ByteArrayInputStream(user.getUser().getCurrentImage()
.getImageData()));
// double[] pageSize = new double[] { cardBackground.getWidth(),
// cardBackground.getHeight() };
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
PDF pdf = new PDF(outputStream);
pdf.setTitle("CARD");
double pagex = 155.52; // 54,0 mm
double pagey = 243.84; // 85,5 mm
Page page = new Page(pdf, new double[] { pagex, pagey });
// Render background image
Image templateImage = new Image(pdf,
convertBufferedImageToPng(cardBackground), ImageType.PNG);
templateImage.setPosition(0, 0);
templateImage.scaleBy(0.245);
templateImage.drawOn(page);
// Render face image
Image faceImage = new Image(pdf,
convertBufferedImageToPng(faceBufferedImage), ImageType.PNG);
faceImage.setPosition(15.5, 70.0);
faceImage.scaleBy(0.32);
faceImage.drawOn(page);
// Render texts
// Big font for nick
com.pdfjet.Font nickFont = new com.pdfjet.Font(pdf, CoreFont.HELVETICA);
nickFont.setSize(16.0);
// User nick text
TextLine nickTextLine = new TextLine(nickFont);
nickTextLine.setText(user.getUser().getNick());
nickTextLine.setPosition(19.0, 193.0);
nickTextLine.setColor(new double[] {1.0, 1.0, 1.0});
nickTextLine.drawOn(page);
// Smaller font
com.pdfjet.Font font = new com.pdfjet.Font(pdf, CoreFont.HELVETICA);
font.setSize(10.0);
// Full name text
String wholeName = user.getUser().getFirstnames() + " "
+ user.getUser().getLastname();
TextLine wholeNameText = new TextLine(font);
wholeNameText.setText(wholeName);
wholeNameText.setPosition(17.0, 212.0);
wholeNameText.setColor(new double[] {1.0, 1.0, 1.0});
wholeNameText.drawOn(page);
// Role text
TextLine roleTextLine = new TextLine(font);
roleTextLine.setText(card.getTemplate().getName());
roleTextLine.setPosition(17.0, 223.0);
roleTextLine.setColor(new double[] {1.0, 1.0, 1.0});
roleTextLine.drawOn(page);
// Barcode
String barcodeString = String.valueOf(user.getUser().getCreated()
.getTime().getTime());
barcodeString = barcodeString.substring(barcodeString.length() - 12);
BufferedImage barCodeBufferedImage = ImageIO.read(BarcodeUtils
.getBarcodeEAN(barcodeString));
Image barCodeImage = new Image(pdf,
convertBufferedImageToPng(barCodeBufferedImage), ImageType.PNG);
barCodeImage.setPosition(0.0, 243.5);
barCodeImage.scaleBy(0.7);
barCodeImage.drawOn(page);
// Write out the pdf
pdf.flush();
outputStream.close();
return outputStream.toByteArray();
}
private ByteArrayInputStream convertBufferedImageToPng(BufferedImage img)
throws IOException {
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
ImageIO.write(img, "png", outStream);
outStream.close();
return new ByteArrayInputStream(outStream.toByteArray());
}
}
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!