Ich habe einen Bericht, der Bilder (jpg) rendert, die aus verschiedenen Quellen stammen. Dies funktioniert gut innerhalb der Berichtsanzeige und beim Export über Excel.
Beim Export in PDF werden jedoch etwa 5% der Bilder falsch wiedergegeben, wie unten zu sehen ist, wobei das Original auf der linken Seite und das, was auf der rechten Seite gerendert wird;
Ich finde, wenn ich eines dieser Bilder in mspaint öffne und einfach auf Speichern klicke, wird das Bild beim nächsten Bericht-Lauf nun korrekt gerendert.
Gibt es Regeln, welche Bildeigenschaften / Formate für SSRS geeignet sind, um das Bild korrekt in einer PDF zu rendern? Im Wesentlichen möchte ich irgendwie diese Bilder finden, die falsch wiedergegeben werden, bevor der Bericht ausgeführt wird, und sie vorher beheben ...
Ich habe nie SSRS bekommen, um die Problembilder so anzuzeigen, wie sie waren, jedoch vor dem Ausführen des Berichts zu bestimmen, welche Bilder in den nicht darstellbaren Satz aufgenommen würden, damit sie in ein unterstütztes Format (automatisch) konvertiert werden konnten auch eine Lösung.
In meinem Fall wurden alle Bilder über Benutzer bereitgestellt, die auf eine Website hochgeladen haben, sodass ich die Bilder bei ihrer Ankunft identifizieren und konvertieren konnte. Für alle vorhandenen Bilder konnte ich ein Skript ausführen, das die Problembilder identifiziert und konvertiert.
Aus den Tausenden von Bildern, die ich hatte, konnte ich feststellen, dass die Bilder, die nicht korrekt gerendert wurden, die folgenden Eigenschaften hatten:
Ich habe ursprünglich die Standard-.NET-GDI ( System.Drawing
) verwendet, um Bilder zu manipulieren, aber die API ist oft anfällig für Abstürze ( OutOfMemoryException
), wenn Sie mit Bildern arbeiten, die zusätzliche Daten enthalten. Daher wechselte ich zu ImageMagick , wo für jedes der identifizierten Bilder I:
Beachten Sie, dass die Konvertierung in RGB aus CMYK ohne das Entfernen der Farbprofile nicht ausgereicht hat, um alle Bilder richtig darzustellen.
Am Ende habe ich nur diese Elemente in jedem Bild-Byte-Stream, den ich von Benutzern erhalten habe (ohne zuerst das Problem zu identifizieren), getan, bevor ich ein hochgeladenes Bild auf Platte speicherte. Danach hatte ich nie wieder das Rendering-Problem.
Wegen der Art, wie die Ausgabe aussieht, würde ich sagen, dass diese JPEG-Bilder CMYK-Farbraum haben, aber die SSRS nimmt an, dass sie RGB-Farbraum verwenden und den falschen Farbraum in PDF setzen Wenn Sie ein JPEG-Bild und ein Beispiel-PDF veröffentlichen können, kann ich Ihnen weitere Details geben.
Ich hatte genau das gleiche Problem mit einem Bild-Rendering, das korrekt auf dem Bildschirm ist, aber wie das in der Frage, als ich den Bericht in PDF exportiert habe. Hier ist, wie ich es gelöst habe.
Das Problem
Der erste Hinweis war Dieser Artikel stieß ich auf MSDN. Es scheint, dass unabhängig von der ursprünglichen Bilddichte der PDF-Renderer in SSRS alle Bilder auf 96 DPI skaliert. Wenn die ursprüngliche Größe des Bilds größer als die Größe der Seite (oder des Containers) ist, wird dieses Problem auftreten.
Die Lösung
Die Lösung besteht darin, das Quellbild so zu skalieren, dass es auf Ihre Seite passt. Das erfordert eine kleine Berechnung abhängig von Ihren Seitengröße und Randeinstellungen.
In meinem Fall verwende ich A4-Papierformat, das 21 cm x 29,7 cm groß ist. Mein linker Rand ist jedoch 1,5 cm, und mein rechter Rand ist 0,5 cm, für eine gesamte innere Breite von 19 cm. Ich erlaube eine zusätzliche 0,5 cm als Fehlerspanne, also benutze ich eine innere Breite von 18,5 cm.
%Vor%Wie bereits erwähnt, beträgt die vom PDF-Renderer generierte Auflösung 96 DPI (dots per inch). Für diejenigen von uns, nicht in den Vereinigten Staaten oder der Republik Liberia, das ist 37,79 DPC (Punkte pro Zentimeter). Also, um unsere Breite zu bekommen:
%Vor%Ihr Ergebnis hängt möglicherweise von (1) dem verwendeten Papierformat und (2) dem linken und rechten Rand ab.
Da die Seite höher als breit ist, müssen wir nur die Breite ändern, während das Bild proportional bleibt. Wenn Sie ein Papierformat verwenden, das breiter als hoch ist, verwenden Sie stattdessen die Länge.
Öffnen Sie nun das Quellbild in Paint (oder Ihrem gewünschten Bildbearbeitungsprogramm) und stellen Sie das Bild proportional auf die gewünschte Breite (oder Länge) in Pixel ein, speichern Sie es, importieren Sie es in Ihren Container und passen Sie das Bild visuell an in Bezug auf den Behälter. Es sollte auf dem Bildschirm gleich aussehen und jetzt korrekt in PDF gerendert werden.
Dies ist ein Problem, das Microsoft Connect gemeldet wurde.
Von SSRS 2008 So erhalten Sie die bestmögliche Bildqualität? :
Das Bildverhalten, das Sie in PDF sehen, ist das Ergebnis von Bildkonvertierungen, die der PDF-Renderer ausführt, basierend darauf, wie die PDF-Spezifikation Bilder in PDF serialisieren muss.
Wir wissen, dass es nicht ideal ist, und wir stufen den Verlust der Bildqualität als Produktproblem ein. Daher ist es schwierig, wirklich zu sagen, was zu tun ist, um das beste Qualitätsbild zu erhalten.
Anekdotisch habe ich gehört, dass Kunden gute Ergebnisse erzielen, wenn das Originalbild ein BMP ist
Tags und Links image pdf reporting-services ssrs-2008