Anzeige ein byte-array als ein Bild in ein JasperReport
Habe ich ein Bild gespeichert, wie byte[]
und ich möchte, um es anzuzeigen als ein Bild in ein JasperReport. Ich habe versucht, immer die Daten von Java-Methoden:
public InputStream getImage(){
return new ByteArrayInputStream(getImageByteArray());
}
und
public Image getImage() throws IOException{
return ImageIO.read(new ByteArrayInputStream(getImageByteArray()));
}
und
public String getImage(){
return new String((new org.apache.commons.codec.binary.Base64()).encode(getImageByteArray()));
}
aber keiner von Ihnen scheinen zu arbeiten.
Den jrxml sieht wie folgt aus:
<image hAlign="Center" vAlign="Middle" isUsingCache="true" isLazy="true">
<reportElement positionType="Float" x="0" y="0" width="164" height="32" isRemoveLineWhenBlank="true" isPrintWhenDetailOverflows="true" uuid="c63c84a8-41c7-4ca3-8451-751d43fa8a9e"/>
<imageExpression><![CDATA[$P{paramObject}.getImage()]]></imageExpression>
</image>
Einige Dinge, die ich versuchen, die Ausnahmen und einige drucken die JasperReport aber der Bereich wo das Bild sein sollte leer ist.
Ich weiß, die Bild-Daten ist es, weil ich Sie anzeigen kann in einer JSF-Seite.
Die image-Daten SVG-Daten.
InformationsquelleAutor cbender | 2015-11-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Benutzerdefiniertes Bild Transcoder
Schreiben Sie ein benutzerdefiniertes Bild transcoder, der Lesen kann, eine SVG-Datei und wandeln diese Ressource in eine PNG-oder SVG-Datei. Beim exportieren als PDF, es ist in Ordnung mit einer SVG-Datei direkt. Bedenken Sie:
Import Transcoder
In der JRXML-Datei, importieren Sie die voll qualifizierte Klasse:
Anwendung Von Bild-Transcoder
Drag-and-drop ein Bild aus der palette auf den Bericht, wie gewohnt. Seine Ausdruck:
Wenn du unbedingt eine PNG-version, dann transcode it-on-the-fly:
HTML vs PDF
Mit HTML, typischerweise PNG-Bilder werden immer noch bevorzugt. Es gibt eine Reihe von Ansätze, die Sie ergreifen können, um zu differenzieren HTML-Format (PNG) vom PDF-Format (SVG). Eine einfache Möglichkeit ist das zuweisen von zwei verschiedenen Schlüssel-Werte von zwei verschiedenen Bild-Elemente. Zum Beispiel:
Dann können Sie ausschließen, eine oder die andere stützt sich auf den export-Typ:
Zusammenfassung
Während es einfacher ist, um ein PNG-Bild konvertieren das PNG-Bild aus SVG ist eine zusätzliche Schritt, die vermieden werden können. Seit der JasperReports-Bibliothek verwendet das Batik-engine für das Rendern von Bildern, nutzen es zum konvertieren einer SVG-Datei als PNG, wenn der Bericht generiert wird.
Diese Weise die SVG-dient als einzige Quelle für alle Formate, unabhängig davon, ob eine PNG-oder SVG-Datei, die im Bericht verwendet.
Sicherstellen, dass die
IMAGES_PATH
undIMAGE_FILENAME
Parameter als geeignet.HTML-und Base64 -
Kraft das Bild einbetten mit:
PNG-Bild wird zu einem Base64-kodierten String:
Dadurch wird der Bericht laden ein bisschen schneller (keine zusätzliche HTTP-Anfrage für das Bild) und vereinfachen die Architektur, wie es beseitigt eine externe Abhängigkeit. Das heißt, dass ein web-server ist nicht mehr erforderlich, um das Bild, denn es ist ganz und gar eingebettet.
InformationsquelleAutor Dave Jarvis
Angenommen, Sie haben Bild-bytes codiert base64, können Sie mit folgenden
InformationsquelleAutor Aram Arabyan
Setzen Ihre image-parameter (hier ist es img) InputStream
Legen Sie dann onErrorType="Blank" zu deinem Bild-element(weiss auch gar nicht der Grund dazu 🙂 )
onErrorType="Blank"
macht es nur, wenn es ein Fehler ist, setzen das Bild in dem Bericht, statt eine Ausnahme zu werfen, es bleibt nur das Bild, der Raum leer. Dass nicht helfen, das Bild anzuzeigen.Ich habe versucht, es zu sehen, und es hat nicht funktioniert
Für mich ist es die einfachste Lösung ist, als andere Lösungen. Danke.
InformationsquelleAutor Madushan Perera
Schlage ich eine einfache Lösung. Es funktioniert, ich verwende es. Auf diese Weise vermeiden wir die intermediate-code und Modifikationen zu unserer Anwendung.
Wir aufbauen müssen Sie die folgenden Import:
Definition unserer Feld für das Bild muss vom Typ Objet:
Und dann in den Hauptteil des Berichts müssen wir das image mit dem folgenden Ausdruck:
Das ist alles. Wie funktioniert die Lösung arbeiten? Wir importieren die
javax.swing.ImageIcon
Bibliothek, die uns erlaubt, erstellen Sie ein neues ImageIcon aus einembyte[]
, dann können wir konvertieren einImageIcon
zuImage
mitgetImage()
.InformationsquelleAutor cesAR
Die definition der unser Feld für das Bild muss vom Typ Objet:
Und dann in den Hauptteil des Berichts müssen wir das image mit dem folgenden Ausdruck:
dieser code ist für mich arbeiten....
InformationsquelleAutor tamkhade mahesh