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