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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe auch gute Erfahrung mit iTextSharp rendering sehr scharfe und klare Bilder. Ich habe versucht, sowohl das hinzufügen der Bilder direkt im Dokument und hinzufügen, um einen ersten Absatz. Beide geben sehr klare Ergebnisse.
Ich normalerweise verwenden .png-Bilder, aber ich hatte den gleichen Erfolg mit jpeg, gif, etc.
Sind Sie sicher, dass, wenn Sie um das Bild in iTextSharp ist es die genaue gleiche Bild, das Sie abrufen, wenn Sie in Acrobat? Ich Frage, weil es ist unklar, was genau Los ist in deinem code:
BEARBEITEN
Auch, um sicherzustellen, dass das Bild der Anzeige an die Größe, die Sie erwarten, speichern Sie Ihre Bilder mit 72dpi. 72 dpi ist das, was iTextSharp verwendet für alles (Bilder, Ränder, etc..).
So ein 100px x 100px Bild wird als 100x100 auf Ihrem pdf-Dokument. Sie müssen nicht sorgen zu machen über die Skalierung oder Größenänderung dann. Jedes mal, wenn Sie skalieren eines Bildes (oben oder unten) Sie laufen das Risiko der Einführung von aliasing-Artefakten (Unschärfe).
Abgesehen von der Drucker-Problem (Siehe oben), die 3 X Tipp von Ihrem Freund war die endgültige Lösung.
So, neu zu formulieren, wenn Sie möchten, dass das Bild 100 X 100 in der PDF-Datei, dann stellen Sie sicher, dass Ihr Bild 300px X 300px oder größer.
Ich versuche auch 300-dpi-Bilder und ich habe nicht getestet mit Bilder mit geringerer Qualität.
Dies ist mein Bild hinzufügen code:
Machen, die rendering-klar, versuchen Sie, um das Bild 3 mal das Originalbild, dann können Sie ScalePercent oder ScaleToFit, um die Größe, um bestimmte Größe.
Beispiel:
Merkwürdig. Bekomme ich super scharfe Bilder in meine pdf-Dateien. Es gibt einige Unterschiede zwischen dem, was ich Tue, und dem, was Sie haben. Zum Beispiel habe ich das Bild erstellen, wie diese:
Außerdem, seit mein Bild ist zu groß ich nennen:
Weiterer Unterschied ist, dass ich hinzufügen, dass das Bild direkt auf die
Document
und nicht um eineParagraph
, obwohl ich bezweifle, dass das ist es.Bearbeiten:
Und schließlich, meine Bilder sind jpegs.
Hoffe, es hilft.
Der trick ist, verwenden Sie größere Bilder und skaliert Sie runter. Wenn die Skala ist nicht gesetzt und das Bild hat seine Natürliche Größe, es wird von schlechter Qualität. Wenn der Maßstab festgelegt ist, und das Bild gezeichnet wird, kleiner als die Natürliche Größe, die Qualität wird besser sein.
Beispiel der Verkleinerung auf 7 Prozent-Größe (hohe Qualität):
Auf meiner Seite, es endete als ein Drucker Einstellung!
Ändern der Grafiken in Raster - (von Vector) gemacht, die Bilder so knackig wie Sie sein sollten, aber verlangsamt das system enorm.
Die zweite Lösung (Dank der FD) war die änderung der Grafik zurück, um Vektor -, sondern um die "Bildbearbeitung" zum Besten.
Sind wir mit einem RICOH Aficio MP C2050 PCL 6.
Größere png-Bilder und als mit iTextSharp die Größe zu ändern.
Ich lief in das gleiche problem. Ich war in der Lage, es zu beheben durch ausschalten der Kompression. Meine pdf-Dateien, die ich erzeugen, sind nicht sehr groß, sodass die Größe der Datei Treffer war nicht zu teuer.