Как рассчитать правильный размер изображения в PDF, используя itextsharp? - PullRequest
11 голосов
/ 02 мая 2010

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

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

альтернативный текст http://www.freeimagehosting.net/uploads/727711dc70.png

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

альтернативный текст 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, и изображение по-прежнему отображается с неверными размерами.

Ответы [ 2 ]

20 голосов
/ 04 мая 2010

Я забыл упомянуть, что я использую 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 ).

0 голосов
/ 21 марта 2018

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

...