Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to calculate the correct image size in out pdf using itextsharp?

Tags:

dpi

itextsharp

I' am trying to add an image to a pdf using itextsharp, regardless of the image size it always appears to be mapped to a different greater size inside the pdf ?

The image I add is 624x500 pixel (DPI:72):

alt text http://www.freeimagehosting.net/uploads/727711dc70.png

And here is a screen of the output pdf:

alt text http://www.freeimagehosting.net/uploads/313d49044d.png

And here is how I created the document:

Document document = new Document();                
                System.IO.MemoryStream stream = new MemoryStream();
                PdfWriter writer = PdfWriter.GetInstance(document, stream);
                document.Open();


                System.Drawing.Image pngImage = System.Drawing.Image.FromFile("test.png");
                Image pdfImage = Image.GetInstance(pngImage, System.Drawing.Imaging.ImageFormat.Png);


                document.Add(pdfImage);
                document.Close();

                byte[] buffer = stream.GetBuffer();
                FileStream fs = new FileStream("test.pdf", FileMode.Create);
                fs.Write(buffer, 0, buffer.Length);
                fs.Close();

Any idea on how to calculate the correct size ?

I alreay tried ScaleAbsolute and the image still renders with incorrect dimensions.

like image 220
MK. Avatar asked May 02 '10 07:05

MK.


People also ask

How to find image dimensions in pdf?

Once downloaded, simply open your pdf file in Adobe Acrobat Reader, press Ctrl+D or File > Properties (Document Properties). And voilà! In the Advanced Information section, you will find 'Page size'. Now, if you want to know your dimensions in units other than inches, simply convert it (1 inch -> 2.54 cm).

How to calculate dpi of image?

The DPI of a digital image is calculated by dividing the total number of dots wide by the total number of inches wide OR by calculating the total number of dots high by the total number of inches high.


1 Answers

I forget to mention that I' am using itextsharp 5.0.2.

It turned out that PDF DPI = 110, which means 110 pixels per inch, and since itextsharp uses points as measurment unit then :

  • n pixels = n/110 inches.
  • n inches = n * 72 points.

Having a helper method to convert pixels to points is all I needed:

public static float PixelsToPoints(float value,int dpi)
{
   return value / dpi * 72;
}

By using the above formula and passing a dpi value of 110 it worked perfectly:

Note: Since you can create pdf documents in any size you want, this may lead to incorrect scaling when printing out your documents. To overcome this issue all you need to do is to have the correct aspect ratio between width and height [approximately 1:1.4142] (see : Paper Size - The international standard: ISO 216 ).

like image 50
MK. Avatar answered Oct 04 '22 16:10

MK.