2010-12-01 6 views
23

hier ist mein Code. Es fügt korrekt die Bilder hinzu, die ich will und alles funktioniert außer, dass die Bilder ihre native Auflösung verwenden, wenn das Bild also groß ist, wird es abgeschnitten, um die Seite anzupassen.Hinzufügen eines Bildes zu einem PDF mit iTextSharp und skalieren Sie es richtig

Gibt es eine Möglichkeit, das Bild wie eine Zoom-Funktion zu verwenden, um zu dehnen, aber auch das Seitenverhältnis beizubehalten? Da muss etwas sein, dass ich dort vermisse. : P

Hier ist ein Bild, das Problem zu veranschaulichen: 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(); 
      } 
     } 
    } 
} 

Antwort

7

Sie können so etwas wie dies versuchen:

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

in Ihrem Fall So wird es sein: pic.ScaleAbsolute (Breite Höhe); – Hps

+2

Diese Methode nützt nichts, weil sie absolut skaliert ist. Es dehnt das Bild und verzerrt es. Ich brauche einen Weg, um es größer zu bekommen, während das Seitenverhältnis beibehalten und im Dokument gehalten wird. –

+4

Hier ist ein Artikel über die Bildauflösung in iTextSharp. Ich habe es nicht benutzt. Aber du kannst es versuchen. http://www.mikesdotnetting.com/Article/87/iTextSharp-Working-with-images – Hps

34

Ich löste es mit dem folgenden:

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

diese Methode hält das Seitenverhältnis des Bildes

4

Ich persönlich etwas verwenden Nähe von Lösung des fubo und es funktioniert gut:

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

Fügen Sie einige Erklärung mit der Antwort für wie diese Antwort helfen OP bei der aktuellen Problem beheben –

+0

Einstellung nur die Position verschiebt lediglich den sichtbaren Teil des Bildes, es skaliert es nicht implizit. – mkl

Verwandte Themen