iTextSharp rendert ein Bild mit schlechter Qualität in PDF

Verwende ich iTextSharp zum drucken eines PDF-Dokuments. Geht alles ok bis ich auf drucken, um das Unternehmens-logo in ihm.

Zuerst habe ich bemerkt, dass das logo hatte schlechte Qualität, aber nach Tests mit mehreren Bildern, erkenne ich, dass war der iTextSharp-rendering es schlecht.
Den test habe ich zu sagen, war Sie zum drucken der PDF-Datei mit meinem code und dann das Dokument Bearbeiten mit Acrobat 8.0 und ich zeichnete ein Bild. Dann druckte die beiden Dokumente und sah den spürbaren Unterschied.
Meine Frage ist, dass, wenn jemand weiß, wenn dies aufgrund einer Skalierung problem, wo ich versage, zu sagen, iTextSharp, wie muss es Rendern das Bild oder ist eine iTextSharp Einschränkung.

Den code zum Rendern des Bildes ist die folgende:

            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)

Den gedruckten Bildern sind die folgenden:
alt-text http://img710.imageshack.us/img710/4199/sshot2y.png

Bild direkt gedruckt mit iTextSharp

alt-text http://img231.imageshack.us/img231/3610/sshot1z.png

Bild bearbeitet und ausgedruckt mit Acrobat 8

BEARBEITEN:
Diese logo-Bilder sind geladen von einer Upload-Seite, wo der Benutzer uploades was auch immer das logo-Bild, das er will, und ich war die Skalierung das Bild mit dem folgenden code:

            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

Dieser wurde verursacht, um zu verlieren info aus dem ursprünglichen Bild, so dass beim drucken in der pdf-Datei, die zum Verlust der info war sehr Auffällig, weil Sie, irgendwie, iTextSharp zeichnen war größer, als es war, egal, die Skalierung, die ich in es gesetzt.
Also habe ich versucht um das Bild zu speichern, wie es ursprünglich war, die Verhinderung der Benutzer keine Bilder hochladen, die größer als 200 KB und die Größe des Bildes, so konnte ich mantain das Seitenverhältnis, und das ändern der Größe mit der iTextSharp-Bild-Objekt, bevor es gedruckt wurde.
Dies löste mein problem der das Bild gedruckt wird mit schlechter Qualität für diese größere Bilder, aber verursacht das pdf-Dokument, um eine Seite zu brechen oder einfach nur nicht fit in die Seite, seltsame Sache, denn das Bild sieht gut aus in der Größe, sondern es verhält sich, wie es war größer.
Dies ist ein screen-capture-das neue Bild:
alt-text http://img38.imageshack.us/img38/5756/sshot3tc.png

EDIT 2:

Beim prüfen der iTextSharp-Bild, das gesendet wird, gedruckt werden, es zeigt keine Veränderungen nach der Skalierung mit ScaleAbsolute, das ist, warum Sie die Seitenumbrüche. Aber wird korrekt angezeigt, wie das Bild wurde erfolgreich skaliert, aber der hintergrund "Papier" war das nicht.
Der code, so weit ist die folgende:

                Dim imageFile As String = String.Format("{0}{1}", GetAppSetting("UploadDirectory"), myCompany.LogoUrl)

Dim thisImage Als Bild = Bild.GetInstance(imageFile)
thisImage.Ausrichtung = Bild.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)

Die Methode ResizeImage() machen Sie die Größe der Breite und Höhe der Achtung, die das Seitenverhältnis und halten eine maximale Breite und eine maximale Höhe begrenzt.

Bitte lassen Sie mich wissen, wenn ich Bedarf an mehr info. Dank

  • Mein Erster Gedanke wäre, dass diese von der Auflösung ist das problem, dass wenn ich das Bild aus der Datei und die Größe, ich mache es falsch ist, so erstellt, ist es mit weniger Auflösung als die itextSharp machen muss, ist es mit fair-Qualität, aber ich würde gerne wissen, was Sie tun, denken.
InformationsquelleAutor Sebastian | 2010-03-26
Schreibe einen Kommentar