Hi there!
I'm going to take out my life if I don't generate a 126x126 mm today :S
I'm trying this during days. I have summerized my application in a main
(It can be usefull to everyone who is not looking for an specific size)
I create a 126 x 126 mm, inside this I put a pdfTemplate wich is 126 x 126
too. Then, inside this one I put many other pdfTemplates as Image Regions
and
inside every ImageRegion I draw an 180 dpiImage. I use this hierarchy cause
I can crop, put borders and things like that using the view of a
pdfTemplate.
Well, The pdf result is 44,4 x 44,4 mm :( Why?
Here is the code.
(I know I don't need too many imports :p)
import java.io.*;
import java.awt.Graphics2D;
import java.awt.image.*;
import java.awt.font.*;
import java.awt.color.ICC_Profile;
import java.awt.geom.AffineTransform;
import javax.imageio.ImageIO;
import javax.imageio.stream.*;
import java.util.*;
import java.lang.*;
import com.lowagie.text.*;
import com.lowagie.text.pdf.*;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
import javax.imageio.metadata.IIOMetadata;
import javax.imageio.metadata.IIOMetadataNode;
import java.awt.color.ColorSpace;
public class app{
public app()
{
}
public final static void main(String Args[])
{
try
{
float _width = 126;
float _height = 126;
String _file = "C:/output.pdf";
//I create a 126x126 rect, cause I'ld like my document to be 126x126
mm
Rectangle rect = new Rectangle(126,126);
Document _document = new com.lowagie.text.Document(rect,0,0,0,0);
FileOutputStream fos = new FileOutputStream(_file);
BufferedOutputStream bos = new BufferedOutputStream(fos, 16384);
PdfWriter _pdfWriter = PdfWriter.getInstance(_document, bos);
_pdfWriter.setPdfVersion(PdfWriter.VERSION_1_5);
_document.open();
PdfContentByte _pdfCB = _pdfWriter.getDirectContent();
//I create a Template to fit in the page;
PdfTemplate _pTemplate = _pdfCB.createTemplate(800,600);
//I create a Template to fit my content. I'ts going to be added to
the _pTemplate
PdfTemplate regionTemplate = _pdfCB.createTemplate(100, 100);
//Load 72 dpi image
FileInputStream fileInputStream = new
FileInputStream("D:/Photolife/imatges/180.jpg");
java.awt.Image img = ImageIO.read(fileInputStream);
//Calcule the final image size in mm
float finalw = 100;
float finalh = 100*img.getHeight(null)/img.getWidth(null);
//Create a new 100 mm width image to 180 dpi
BufferedImage img2 = new
BufferedImage((int)(finalw*180/24.5),(int)(finalh*180/24.5) ,
BufferedImage.TYPE_INT_RGB);
Graphics2D gps = img2.createGraphics();
gps.drawImage(img,0,0,img2.getWidth(null),img2.getHeight
(null),null);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(baos);
JPEGEncodeParam param = JPEGCodec.getDefaultJPEGEncodeParam(img2);
param.setQuality(1f, true);
param.setDensityUnit(JPEGEncodeParam.DENSITY_UNIT_DOTS_INCH);
param.setXDensity(180);
param.setYDensity(180);
encoder.setJPEGEncodeParam(param);
encoder.encode(img2);
img2.flush();
img2 = null;
com.lowagie.text.Image img3 = com.lowagie.text.Image.getInstance(
baos.toByteArray());
//In this point, img3 is a 180 dpi Image
//Add all the information inside the other information
regionTemplate.addImage(img3,finalw,0f,0f,finalh, 0,0);
_pTemplate.saveState();
_pTemplate.transform(new AffineTransform(1,0,0,1,0,0));
_pTemplate.addTemplate(regionTemplate, 0, 0);
_pTemplate.restoreState();
_pdfCB.addTemplate(_pTemplate,1,0,0,1,0,0);
_document.close();
}
catch(Exception e)
{
System.out.println("Error");
}
}
}
Thanks!
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
iText-questions mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/itext-questions
Buy the iText book: http://itext.ugent.be/itext-in-action/