First scale the image, then open the scaled image using iText.
ImageDataFactory has a create method that accepts an AWT image. First scale the image using AWT tools, then open it as follows:
String imagePath = "C:\\path\\to\\image.jpg"; java.awt.Image awtImage = ImageIO.read(new File(imagePath));
For more information on image scaling, see How do I resize an image using Java?
If you need the original size when adding to the PDF, just scale it again.
itextImage.scale(2f, 2f);
Note. This code has not been verified.
EDIT in response to award comments
You made me think and watch. It seems iText is considering importing AWT images as a raw image. I guess it treats it the same way as BMP, which simply writes pixel data using / FlateDecode , which is probably much less than optimal. The only thing I can think of to achieve your requirement is to use ImageIO to write a scaled image to the file system or ByteArrayOutputStream as jpeg, and then use the resulting file / bytes to open with iText.
Here is an example using byte arrays. If you want to know more about compression levels, etc., see here .
String imagePath = "C:\\path\\to\\image.jpg"; java.awt.Image awtImage = ImageIO.read(new File(imagePath)); // scale image here int scaledWidth = awtImage.getWidth(null) / 2; int scaledHeight = awtImage.getHeight(null) / 2; BufferedImage scaledAwtImage = new BufferedImage(scaledWidth, scaledHeight, BufferedImage.TYPE_INT_RGB); Graphics2D g = scaledAwtImage.createGraphics(); g.drawImage(awtImage, 0, 0, scaledWidth, scaledHeight, null); g.dispose(); ByteArrayOutputStream bout = new ByteArrayOutputStream() ImageIO.write(scaledAwtImage, "jpeg", bout); byte[] imageBytes = bout.toByteArray(); Image itextImage = new Image(ImageDataFactory.create(imageBytes));