2010-12-01 2 views
23

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

ответ

7

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

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

Таким образом, в вашем случае это будет: pic.ScaleAbsolute (ширина высота); – Hps 2010-12-01 14:16:51

+2

Этот метод бесполезен, потому что он масштабирует его абсолютным. Он растягивает изображение и искажает его. Мне нужно, чтобы он стал больше, сохраняя пропорции и сохраняя в документе. – 2010-12-01 14:36:39

34

я решил его с помощью следующей:

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); 

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

4

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

image.ScaleToFit(document.PageSize); 
image.SetAbsolutePosition(0,0); 
Смежные вопросы