2010-05-02 8 views
11

Sto cercando di aggiungere un'immagine a un pdf utilizzando itextsharp, indipendentemente dalle dimensioni dell'immagine che sembra sempre essere mappata su una dimensione diversa all'interno del pdf?Come calcolare la dimensione dell'immagine corretta in out pdf usando itextsharp?

L'immagine che ho aggiungere è 624x500 pixel (DPI: 72):

alt text http://www.freeimagehosting.net/uploads/727711dc70.png

E qui è uno schermo del pdf uscita:

alt text http://www.freeimagehosting.net/uploads/313d49044d.png

Ed ecco come lo ha creato il documento:

Document document = new Document();     
       System.IO.MemoryStream stream = new MemoryStream(); 
       PdfWriter writer = PdfWriter.GetInstance(document, stream); 
       document.Open(); 


       System.Drawing.Image pngImage = System.Drawing.Image.FromFile("test.png"); 
       Image pdfImage = Image.GetInstance(pngImage, System.Drawing.Imaging.ImageFormat.Png); 


       document.Add(pdfImage); 
       document.Close(); 

       byte[] buffer = stream.GetBuffer(); 
       FileStream fs = new FileStream("test.pdf", FileMode.Create); 
       fs.Write(buffer, 0, buffer.Length); 
       fs.Close(); 

Un un'idea su come calcolare la taglia corretta?

Ho già provato ScaleAbsolute e l'immagine viene ancora visualizzata con dimensioni errate.

risposta

19

Ho dimenticato di dire che sto usando itextsharp 5.0.2.

Si è scoperto che PDF DPI = 110, il che significa 110 pixel per pollice, e dal momento che utilizza iTextSharp punti come unità di measurment poi:

  • n pixel = n/110 pollici.
  • n pollici = n * 72 punti.

Avere un metodo di supporto per convertire i pixel a punti è tutto quello che dovevo:

public static float PixelsToPoints(float value,int dpi) 
{ 
    return value/dpi * 72; 
} 

Usando la formula di cui sopra e il superamento di un valore di dpi di 110 ha funzionato perfettamente:

alt text http://www.freeimagehosting.net/uploads/1c8287b8d9.png

Nota: poiché è possibile creare documenti PDF in qualsiasi dimensione desiderata, questo potrebbe comportare un ridimensionamento errato durante la stampa dei documenti. Per ovviare a questo problema, è sufficiente disporre delle proporzioni corrette tra larghezza e altezza [circa 1: 1,4142] (vedere: Paper Size - The international standard: ISO 216).

Problemi correlati