Wie man ein Bild in MS Reporting Services Berichten dynamisch zentriert
Wenn Sie jemals mit MS Reporting Services gearbeitet haben, haben Sie vielleicht festgestellt, dass es eine knifflige Aufgabe sein kann, ein Bild innerhalb eines Berichts zu zentrieren, insbesondere wenn die Bilddimensionen während der Entwurfsphase unbekannt sind. Standardmäßig ist das Bildelement an der oberen linken Ecke des zugewiesenen Bereichs verankert, was zu weniger idealen Layouts führen kann, wenn das Bild kleiner als der vorgesehene Bereich ist.
In diesem Tutorial werden wir eine Lösung erkunden, die es Ihnen ermöglicht, ein Bild basierend auf den Bilddimensionen, die Sie zur Laufzeit abrufen, dynamisch in Ihren Berichten zu zentrieren.
Die Herausforderung
Die Haupt Herausforderung besteht darin, dass das Bild, das Sie anzeigen möchten, kleiner als der im Berichtslayout bereitgestellte Platz sein kann. MS Reporting Services unterstützt das dynamische Zentrieren von Bildern in solchen Fällen nicht nativ. Mit einigen cleveren Anpassungen können Sie jedoch diese Einschränkung überwinden:
- Problem: Bilder sind an der oberen linken Ecke verankert.
- Bedarf: Bilder mit unbekannten Dimensionen zur Entwurfszeit zentrieren.
Die Lösung
Mit Hilfe des Ansatzes von Chris Hays können Sie Bilder erfolgreich basierend auf ihren Laufzeitdimensionen zentrieren. Hier ist eine Übersicht über die Schritte, die Sie befolgen müssen:
1. Bildgröße festlegen
Zuerst stellen Sie sicher, dass das Bildelement auf die gewünschten Dimensionen eingestellt ist, auch wenn die genaue Bildgröße variieren kann. In unserem Fall werden wir die Dimensionen auf 4,625 Zoll breit und 1,125 Zoll hoch festlegen.
- Größeigenschaft: Ändern Sie die “Größe”-Eigenschaft des Bildelements auf “Clip.” Dies ermöglicht es, das Bild ohne Verzerrung anzuzeigen.
2. Dynamisch den linken Abstand festlegen
Als nächstes müssen Sie den linken Abstand des Bildes dynamisch basierend auf seiner Breite festlegen. Verwenden Sie den folgenden Ausdruck, um den linken Abstand zu berechnen:
=CStr(Round((4.625 - System.Drawing.Image.FromStream(System.Net.WebRequest.Create(Parameters!LogoURL.Value).GetResponse().GetResponseStream()).Width / 96) / 2, 2)) & "in"
3. Dynamisch den oberen Abstand festlegen
Ähnlich müssen Sie auch den oberen Abstand dynamisch festlegen, indem Sie diesen Ausdruck verwenden:
=CStr(Round((1.125 - System.Drawing.Image.FromStream(System.Net.WebRequest.Create(Parameters!LogoURL.Value).GetResponse().GetResponseStream()).Height / 96) / 2, 2)) & "in"
Änderungen und Verbesserungen
Bei der Umsetzung der oben beschriebenen Lösung wurden einige wichtige Anpassungen vorgenommen:
- Die Dimensionen des Bildelements wurden angepasst, um meinen spezifischen Anforderungen von 4,625 Zoll Breite und 1,125 Zoll Höhe zu entsprechen.
- Der Code wurde geändert, um den Bildstream von einer URL anstelle einer Datenbank abzurufen. Dazu habe ich
WebRequest.Create.GetResponse
verwendet, was sehr nützlich ist, um Ressourcen online abzurufen.
Fazit
Durch die Implementierung dieser Schritte können Sie Bilder in Ihren MS Reporting Services Berichten effektiv zentrieren und so ein professionelles und sauberes Aussehen für Ihre Präsentationen sicherstellen. Die beschriebene Methode hebt die Kraft dynamischer Ausdrücke hervor und wie sie Flexibilität im Berichtsdesign bieten können.
Also, das nächste Mal, wenn Sie mit dem dynamischen Zentrieren eines Bildes konfrontiert sind, denken Sie an diesen Leitfaden und gestalten Sie Ihre Berichterstattung deutlich visuell ansprechender!