Добавление изображения в PDF с помощью iTextSharp и правильное масштабирование - PullRequest
26 голосов
/ 01 декабря 2010

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

Есть ли способ использовать изображение, например, функцию масштабирования, чтобы растянуть, чтобы подогнать, но также сохранить соотношение сторон? Там должно быть что-то, чего мне не хватает там. : 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();
            }
        }
    }
}

Ответы [ 5 ]

38 голосов
/ 01 декабря 2010

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

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();
}
9 голосов
/ 21 марта 2016

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

image.ScaleToFit(document.PageSize);
image.SetAbsolutePosition(0,0);
7 голосов
/ 01 декабря 2010

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

      Image logo = Image.GetInstance("pathToTheImage")
      logo.ScaleAbsolute(500, 300)
4 голосов
/ 18 июля 2013
image.ScaleToFit(500f,30f);

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

1 голос
/ 16 ноября 2016
image.SetAbsolutePosition(1,1);
...