2010-05-02 16 views
11

Estoy tratando de agregar una imagen a un pdf usando itextsharp, independientemente del tamaño de la imagen, siempre parece estar asignado a un tamaño diferente dentro del pdf.¿Cómo calcular el tamaño de imagen correcto en formato PDF utilizando itextsharp?

La imagen de añado es 624x500 píxeles (DPI: 72):

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

Y aquí es una pantalla del pdf de salida:

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

Y aquí es como yo creó el 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(); 

An y idea sobre cómo calcular el tamaño correcto?

Ya probé Scale Absoluto y la imagen aún se muestra con dimensiones incorrectas.

Respuesta

19

Olvidé mencionar que estoy usando itextsharp 5.0.2.

Resultó que PDF DPI = 110, lo que significa 110 píxeles por pulgada, y desde iTextSharp utiliza puntos como unidad de measurment entonces:

  • n pixeles = n/110 pulgadas.
  • n pulgadas = n * 72 puntos.

Tener un método de ayuda para convertir píxeles a puntos es todo lo que necesitaba:

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

Mediante el uso de la fórmula anterior y pasando un valor dpi de 110 funcionó a la perfección:

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

Nota: Dado que puede crear documentos PDF de cualquier tamaño que desee, esto puede ocasionar una escala incorrecta al imprimir sus documentos. Para solucionar este problema, todo lo que necesita hacer es tener la relación de aspecto correcta entre ancho y alto [aproximadamente 1: 1.4142] (consulte: Paper Size - The international standard: ISO 216).

Cuestiones relacionadas