Добавление изображения в PDF с помощью iTextSharp и его масштабирование

вот мой код. Он правильно добавляет фотографии, которые я хочу, и все работает кроме, что изображения используют свое собственное разрешение, поэтому, если изображение велико, оно обрезается, чтобы соответствовать странице.

Есть ли способ использовать изображение как функцию масштабирования для растягивания, чтобы соответствовать, но также поддерживать соотношение сторон? Там что-то мне не хватает.: P

Вот изображение, чтобы проиллюстрировать проблему: alt text

using System;
using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;
using System.Drawing;
using System.Collections.Generic;

namespace WinformsPlayground
{
    public class PDFWrapper
    {
        public void CreatePDF(List<System.Drawing.Image> images)
        {
            if (images.Count >= 1)
            {
                Document document = new Document(PageSize.LETTER);
                try
                {

                    // step 2:
                    // we create a writer that listens to the document
                    // and directs a PDF-stream to a file

                    PdfWriter.GetInstance(document, new FileStream("Chap0101.pdf", FileMode.Create));

                    // step 3: we open the document
                    document.Open();

                    foreach (var image in images)
                    {
                        iTextSharp.text.Image pic = iTextSharp.text.Image.GetInstance(image, System.Drawing.Imaging.ImageFormat.Jpeg);
                        document.Add(pic);
                        document.NewPage();
                    }
                }
                catch (DocumentException de)
                {
                    Console.Error.WriteLine(de.Message);
                }
                catch (IOException ioe)
                {
                    Console.Error.WriteLine(ioe.Message);
                }

                // step 5: we close the document
                document.Close();
            }
        }
    }
}

Ответ 1

Я решил это, используя следующее:

foreach (var image in images)
{
    iTextSharp.text.Image pic = iTextSharp.text.Image.GetInstance(image, System.Drawing.Imaging.ImageFormat.Jpeg);

    if (pic.Height > pic.Width)
    {
        //Maximum height is 800 pixels.
        float percentage = 0.0f;
        percentage = 700 / pic.Height;
        pic.ScalePercent(percentage * 100);
    }
    else
    {
        //Maximum width is 600 pixels.
        float percentage = 0.0f;
        percentage = 540 / pic.Width;
        pic.ScalePercent(percentage * 100);
    }

    pic.Border = iTextSharp.text.Rectangle.BOX;
    pic.BorderColor = iTextSharp.text.BaseColor.BLACK;
    pic.BorderWidth = 3f;
    document.Add(pic);
    document.NewPage();
}

Ответ 2

Вы можете попробовать что-то вроде этого:

      Image logo = Image.GetInstance("pathToTheImage")
      logo.ScaleAbsolute(500, 300)

Ответ 3

Лично я использую что-то близкое к решению fubo и хорошо работает:

image.ScaleToFit(document.PageSize);
image.SetAbsolutePosition(0,0);

Ответ 4

image.ScaleToFit(500f,30f);

этот метод сохраняет соотношение сторон изображения

Ответ 5

image.SetAbsolutePosition(1,1);