Ich verwende iTextSharp, um ein PDF-Dokument zu drucken. Alles läuft gut, bis ich das Firmenlogo ausdrucken muss.iTextSharp rendert Bild mit schlechter Qualität in PDF
Zuerst bemerkte ich, dass das Logo eine schlechte Qualität hatte, aber nachdem ich mit mehreren Bildern getestet hatte, merkte ich, dass das iTextSharp es schlecht darstellte. Der Test, den ich gemacht habe, war, das PDF mit meinem Code zu drucken und dann das Dokument mit Acrobat 8.0 zu bearbeiten und ein Bild zu zeichnen. Dann druckten die beiden Dokumente und sahen den erkennbaren Unterschied. Meine Frage ist, wenn jemand weiß, ob dies auf ein Skalierungsproblem zurückzuführen sein kann, wo ich iTextSharp nicht sagen kann, wie es das Bild rendern muss oder eine iTextSharp-Beschränkung ist.
Der Code um das Bild zu aufzubereiten ist folgende: alt text http://img710.imageshack.us/img710/4199/sshot2y.png
Bild gedruckt direkt mit iTextSharp
alt text http://img231.imageshack.us/img231/3610/sshot1z.png
Bild bearbeitet:
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)
Die gedruckten Bilder folgend und mit Acrobat 8
gedrucktEDIT: Diese Logo-Bilder werden von einer Upload-Seite geladen, wo der Benutzer uploades was auch immer das Logo-Bild er will, und ich war das Bild mit dem folgenden Code Skalierung:
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
Dies verursache Informationen zu verlieren Aus dem Originalbild, also wenn es in der PDF gedruckt wurde, war das Verlieren von Informationen sehr auffällig, weil iTextSharp irgendwie größer zeichnete, als es war, egal welche Skalierung ich dort hineinlegte. Also habe ich versucht, das Bild so zu speichern, wie es ursprünglich war. Der Benutzer konnte keine Bilder größer als 200K hochladen und die Größe des Bildes ändern, um das Seitenverhältnis beizubehalten und diese Größe mit dem iTextSharp Image Objekt zu verwenden, bevor es gedruckt wurde. Dies löste mein Problem, dass das Bild mit schlechter Qualität für diese größeren Bilder gedruckt wurde, aber das PDF-Dokument einen Seitenumbruch hatte oder einfach nicht in die Seite passte, seltsam, weil das Bild in der Größe gut aussieht, aber es verhält sich wie es war größer. Diese ist ein Screen-Capture des neuen Bildes: alt text http://img38.imageshack.us/img38/5756/sshot3tc.png
EDIT 2:
Wenn die iTextSharp Bild Inspektion, die gedruckt werden gesendet wird, zeigt es keine Änderungen nach der Skalierung mit ScaleAbsolute, deshalb Die Seite bricht ab. Aber wird korrekt angezeigt, wie das Bild erfolgreich skaliert wurde, aber der Hintergrund "Papier" war nicht. Der Code bisher verwendete ist die folgende:
Dim imageFile As String = String.Format("{0}{1}", GetAppSetting("UploadDirectory"), myCompany.LogoUrl)
Dim thisImage als Bild = 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)
Verfahren ResizeImage() tun das Größenanpassung der Breite und Höhe unter Berücksichtigung des Seitenverhältnisses und Einhaltung einer maximalen Breite und einer maximalen Höhe.
Bitte lassen Sie mich wissen, wenn ich weitere Informationen bereitstellen muss. Danke
Mein erster Gedanke wäre, dass dies ein Problem mit der Auflösung ist, dass, wenn schaffe ich das Bild aus der Datei und deren Größe festgelegt, ich mache ich es falsch, also ist es mit weniger Auflösung erstellt als die itextSharp es mit fairer Qualität rendern muss, aber ich würde gerne wissen, was Sie denken. – Sebastian