2010-12-01 56 views
23

aquí está mi código. Se agrega correctamente las imágenes que quiero y todo funciona excepto que las imágenes están usando su resolución nativa, por lo que si la imagen es grande se está recortando para ajustarse a la página.Agregar una imagen a un PDF usando iTextSharp y escalarla correctamente

¿Hay alguna manera de hacer que la imagen se use como una función de Zoom para estirar para ajustarse pero también mantener la relación de aspecto? Tiene que haber algo que me falta allí. : P

Aquí hay una foto para ilustrar el problema: 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(); 
      } 
     } 
    } 
} 

Respuesta

7

Usted puede intentar algo como esto:

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

Así, en su caso, será: pic.ScaleAbsolute (ancho, alto); – Hps

+2

Este método no sirve porque se escala en absoluto. Estira la imagen y la distorsiona. Necesito una forma de hacerlo crecer mientras mantengo la relación de aspecto y me mantengo dentro del documento. –

+4

Aquí hay un artículo sobre la resolución de imagen en iTextSharp. No lo he usado Pero puedes intentar. http://www.mikesdotnetting.com/Article/87/iTextSharp-Working-with-images – Hps

34

Lo resuelto utilizando la siguiente:

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(); 
} 
3
image.ScaleToFit(500f,30f); 

este método mantiene la relación de aspecto de la imagen

4

Personalmente, utilizo algo cerca de la solución de fubo y funciona bien:

image.ScaleToFit(document.PageSize); 
image.SetAbsolutePosition(0,0); 
2
image.SetAbsolutePosition(1,1); 
+0

Agregue una explicación con la respuesta de cómo esta respuesta ayuda OP en la fijación de la edición actual –

+0

Estableciendo solo la posición simplemente cambia la sección visible de la imagen, no la escala implícitamente. – mkl

Cuestiones relacionadas