Comment afficher une image sur jasper rapport?
Je veux afficher une image sur une jasper rapport. J'ai le texte suivant sur le .jrxml:
<image>
<reportElement x="181" y="0" width="209" height="74"/>
<imageExpression class="java.lang.String"><![CDATA["logo.jpg"]]></imageExpression>
</image>
L'image logo.jpg est dans le même répertoire que le .jrxml. En mettant juste qu'il ne fonctionne pas pour moi. J'ai googlé un peu et a trouvé que jasper rapport tient compte de ce que j'ai mis sur le .jrxml comme un chemin relatif au répertoire JVM et que pour changer cela, j'ai besoin de passer comme un "REPORT_FILE_RESOLVER" paramètre un FileResolver qui renvoie le fichier. Donc, je n'ai la suite dans ma .java (qui est situé au même endroit que les .jrxml et de l'image)
FileResolver fileResolver = new FileResolver() {
@Override
public File resolveFile(String fileName) {
return new File(fileName);
}
};
HashMap<String, Object> parameters = new HashMap<String, Object>();
parameters.put("REPORT_FILE_RESOLVER", fileResolver);
...
Qui doit renvoyer le fichier attendu, mais j'ai toujours un
net.sf.jasperreports.engine.JRException: Error loading byte data : logo.jpg
at net.sf.jasperreports.engine.util.JRLoader.loadBytes(JRLoader.java:301)
at net.sf.jasperreports.engine.util.JRLoader.loadBytesFromLocation(JRLoader.java:479)
at net.sf.jasperreports.engine.JRImageRenderer.getInstance(JRImageRenderer.java:180)
...
Ce que je fais mal?
Merci!
Vous devez vous connecter pour publier un commentaire.
J'ai fait ce travail en passant un paramètre spécifiant l'emplacement absolu du fichier:
Je faire de cette façon - image est transmise par voie:
.jrxml
...ou l'image est transmise en tant
InputStream
(je ne sais pas pourquoi, mais<image>
besoin d'avoironErrorType
attribut"Blank"
, sinon il ne fonctionne pas - throws exception):.jrxml
Là était le problème:
Comme je l'ai dit précédemment j'ai dans le même répertoire que le .jrxml, l'logo.jpg et le .java qui utilise le .jrxml.
Le truc, c'est que le fileResolver
n'ai pas renvoyé le fichier image. J'ai découvert il mappé sur un répertoire différent et pas celui que j'attendais. Donc, je l'ai changé pour:
Et ça a fonctionné. J'ai oublié le fait que:
(prises à partir de l'api java - Fichier (Plate-forme Java SE 6))
Le répertoire dans lequel la JVM est invoquée n'est pas celui que j'ai toutes ces données.
Merci!
Essayer
declaring
un paramètre comme la myImg de typeInputStream
dans votre page de rapport. Déclarer ce type à la fois pour les param et de l'image de l'espace réservé sur la page. Ensuite, prenez l'image de chemin de classe en utilisant quelque chose comme (en supposant que le nom de l'image est " imgName.ext "et il est dans le paquet nommé" votre.package')