Estoy usando iTextSharp para imprimir un documento PDF. Todo va bien hasta que tenga que imprimir el logotipo de la empresa.iTextSharp muestra imágenes con mala calidad en PDF
Primero me di cuenta de que el logotipo tenía mala calidad, pero después de probar con varias imágenes, me di cuenta de que era el iTextSharp que lo representaba mal. La prueba que hice para decir esto fue imprimir el PDF usando mi código y luego editar el documento con Acrobat 8.0 y dibujé una imagen. Luego imprimió los dos documentos y vio la notable diferencia. Mi pregunta es que si alguien sabe si esto puede deberse a un problema de escala en el que no le digo a iTextSharp cómo debe representar la imagen o si es una limitación de iTextSharp.
El código para hacer que la imagen es la siguiente:
Dim para As Paragraph = New Paragraph
para.Alignment = Image.RIGHT_ALIGN
para.Add(text)
Dim imageFile As String = String.Format("{0}{1}", GetAppSetting("UploadDirectory"), myCompany.LogoUrl)
Dim thisImage As Image = Image.GetInstance(imageFile)
thisImage.Alignment = Image.LEFT_ALIGN
para.Add(thisImage)
Las imágenes impresas son los siguientes: alt text http://img710.imageshack.us/img710/4199/sshot2y.png
imagen impresa directamente con iTextSharp
alt text http://img231.imageshack.us/img231/3610/sshot1z.png
imagen editada e impreso con Acrobat 8
EDIT: Estas imágenes del logotipo se cargan desde una página de carga, donde los uploades usuario cualquiera que sea la imagen del logotipo que quiera, y yo estaba escalando esa imagen utilizando el siguiente código:
Dim graph As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(newImage)
graph.CompositingMode = Drawing.Drawing2D.CompositingMode.SourceOver
graph.CompositingQuality = Drawing.Drawing2D.CompositingQuality.HighQuality
graph.InterpolationMode = Drawing.Drawing2D.InterpolationMode.Bicubic
graph.SmoothingMode = Drawing.Drawing2D.SmoothingMode.HighQuality
graph.PixelOffsetMode = Drawing.Drawing2D.PixelOffsetMode.HighQuality
graph.DrawImage(newImage, 0, 0, newWidth, newHeight)
graph.Dispose()
graph = Nothing
Esto estaba causando a perder información de la imagen original, así que cuando se imprimió en el pdf, esa pérdida de información fue muy notable porque, de alguna manera, iTextSharp estaba dibujando más grande de lo que era, sin importar la escala que puse allí. Intenté almacenar la imagen como estaba originalmente, evitando que el usuario cargue imágenes de más de 200K y cambie el tamaño de la imagen para poder mantener la relación de aspecto y usar ese cambio de tamaño con el objeto Imagen iTextSharp antes de imprimirlo. Esto resolvió mi problema de que la imagen se imprimiera con mala calidad para estas imágenes más grandes pero causó que el documento pdf tuviera un salto de página o simplemente no entrara en la página, cosa rara porque la imagen se ve bien pero se comporta como más grande. Esta es una captura de pantalla de la nueva imagen: alt text http://img38.imageshack.us/img38/5756/sshot3tc.png
EDIT 2:
Al inspeccionar la imagen iTextSharp que se envía a imprimir, no muestra cambios después de la escala usando ScaleAbsolute, por eso la página se rompe Pero se muestra correctamente, como si la imagen se escalara correctamente, pero el "papel" de fondo no. El código utilizado hasta ahora es el siguiente:
Dim imageFile As String = String.Format("{0}{1}", GetAppSetting("UploadDirectory"), myCompany.LogoUrl)
Dim thisImage como imagen = Image.GetInstance (imageFile) thisImage.Alignment = Image.LEFT_ALIGN
Dim newWidth As Integer = myCompany.LogoWidth
Dim newHeight As Integer = myCompany.LogoHeight
ResizeImageToMaxValues(newWidth, newHeight)
thisImage.ScaleAbsolute(newWidth, newHeight)
para.Add(thisImage)
pdf.PdfDocument.Add(para)
El ResizeImage método() hacer el cambio de tamaño del ancho y la altura respetando la relación de aspecto y manteniendo un ancho máximo y un límite máximo de altura.
Háganme saber si necesito proporcionar más información. Gracias
Mi primer pensamiento sería que este es un problema de resolución, que cuando se crea la imagen del archivo y establecer su tamaño, lo Lo estoy haciendo mal, por lo que se crea con menos resolución que itextSharp necesita para reproducirlo con buena calidad, pero me gustaría saber qué piensas. – Sebastian