Как рассчитать правильный размер изображения в pdf с помощью itextsharp?

Я пытаюсь добавить изображение в pdf, используя itextsharp, независимо от того, какой размер изображения он всегда отображается на другой размер большего размера внутри pdf?

Я добавляю изображение размером 624x500 пикселей (DPI: 72):

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

И вот экран вывода pdf:

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

И вот как я создал документ:

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();

Любая идея о том, как рассчитать правильный размер?

Я попробовал ScaleAbsolute, и изображение по-прежнему отображается с неправильными размерами.

Ответ 1

Я забыл упомянуть, что я использую itextsharp 5.0.2.

Оказалось, что PDF DPI = 110, что означает 110 пикселей на дюйм, а так как itextsharp использует точки в качестве единицы измерения, то:

  • n пикселей = n/110 дюймов.
  • n дюймов = n * 72 балла.

Мне нужен вспомогательный метод для преобразования пикселей в точки:

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

Используя вышеприведенную формулу и передав значение dpi, равное 110, она отлично работала:

Примечание. Поскольку вы можете создавать PDF-документы любого размера, это может привести к неправильному масштабированию при печати документов. Чтобы преодолеть эту проблему, все, что вам нужно сделать, это иметь правильное соотношение сторон между шириной и высотой [приблизительно 1:1,4142] (см. Размер бумаги - международный стандарт: ISO 216).

Ответ 2

Умножьте высоту и ширину изображения на 72 и разделите их на dpi (ppi): points = pixels * 72/dpi.