web-dev-qa-db-fra.com

Ajouter une image à un PDF en utilisant iTextSharp et la mettre à l'échelle correctement

voici mon code. Il ajoute correctement les images que je veux et tout fonctionne sauf que les images utilisent leur résolution native, donc si l'image est grande, elle est rognée pour s'adapter à la page.

Existe-t-il un moyen d'utiliser l'image comme une fonction de zoom pour l'étirer pour l'ajuster, mais aussi de maintenir le rapport d'aspect? Il doit y avoir quelque chose qui me manque. : P

Voici une image pour illustrer le problème: 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();
            }
        }
    }
}
26
delete

Je l'ai résolu en utilisant ce qui suit:

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();
}
38
delete

Personnellement, j'utilise quelque chose de proche de la solution de fubo et ça marche bien:

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

Vous pouvez essayer quelque chose comme ceci:

      Image logo = Image.GetInstance("pathToTheImage")
      logo.ScaleAbsolute(500, 300)
7
Hps
image.ScaleToFit(500f,30f);

cette méthode conserve le rapport hauteur/largeur de l'image

4
fubo
image.SetAbsolutePosition(1,1);
1
Mạc Văn Cương