2010-09-02 7 views
17

Я хотел бы встроить изображение в файл JasperReports jrxml. У меня есть эта структура каталогов.URL-адрес выражения изображения в отчетах Jasper

Tomcat Root 
webapps 
    reports 
    -->images 
    --> company_logo.jpg 
    -->reports 
    -->sample.jasper 
    -->WEB-INF 
    -->classes 

И я попытался сделать это, думая, что это относительно моего отчетов контекста корня

<image> 
<reportElement x="0" y="0" width="104" height="40"/> 
<imageExpression class="java.lang.String"> 
    <![CDATA["images/company_logo.jpg"]]> 
</imageExpression> 
</image> 

..и это также

<image> 
<reportElement x="0" y="0" width="104" height="40"/> 
<imageExpression class="java.lang.String"> 
    <![CDATA["/images/company_logo.jpg"]]> 
</imageExpression> 
</image> 

, но он всегда говорит, что была ошибка загрузки байтов от местоположения JRLoader.

Я пробовал делать это, и это работает, но я немного смущен, почему мои первые две попытки этого не делают.

Действительно ли это встраивание изображений в JasperReports? Вам нужно поставить весь путь? Я думаю, что должна быть страница .

<image> 
<reportElement x="0" y="0" width="104" height="40"/> 
<imageExpression class="java.lang.String"> 
    <![CDATA["http://localhost:8080/reports/images/company_logo.jpg"]]> 
</imageExpression> 
</image> 

Я немного озадачен правильным способом.

ответ

24

<![CDATA["../images/company_logo.jpg"]]> должен сделать трюк. Путь относится к вашему файлу .jasper.

+0

это правильно! Спасибо –

+0

Следует отметить, что имена файлов и пути чувствительны к регистру! – venomrld

+1

Это не сработало для меня, когда Spring собирала файлы отчета Jasper на лету. Мне пришлось прибегнуть к описанной методике [здесь] (http://stackoverflow.com/questions/5376725/using-ireport-with-a-relative-path) –

2

иногда лучше использовать File.separtor: "ima" + File.separator + "logo.jpg"

9

Вам нужно создать параметр типа String, под названием, например КОНТЕКСТ, и из вашего JSP отправить контекст сервлета:

parameters.put("CONTEXT",this.getServletContext().getRealPath("/")); 

сейчас , в вашем отчете вы используете этот параметр:

$P{CONTEXT}.toString()+"reports/images/logo.png" 

То же самое относится к вспомогательным отчетам или другим вопросам b ресурсов, например:

$P{CONTEXT}.toString()+"reports/OrdenCompraAlmacen_Items.jasper" 

Надеюсь, это полезно.

+0

Работает как шарм! – Nik

-2

Положите вашу фотографию в следующей структуре:

webapps 
    reports 
     -->reports 
      -->sample.jasper 
-->WEB-INF 
     -->classes 
      -->images 
       --> company_logo.jpg 

<imageExpression class="java.lang.String"> 
    <![CDATA["company_logo.jpg"]]> 
</imageExpression> 
+0

английский язык пожалуйста. [so] является веб-сайтом только на английском языке. Вы можете перейти к [a51], чтобы узнать, есть ли сайт или предложение для одного на вашем языке. – Dukeling

2

С .jrxml при использовании абсолютного пути с изображением, когда упакованный банка filr будет развернут, вы получите:

java.lang.IllegalArgumentException: name 
at sun.misc.URLClassPath$Loader.findResource(Unknown Source) ~[na:1.8.0_121] 
at sun.misc.URLClassPath.findResource(Unknown Source) ~[na:1.8.0_121] 
at java.net.URLClassLoader$2.run(Unknown Source) ~[na:1.8.0_121] 
at java.net.URLClassLoader$2.run(Unknown Source) ~[na:1.8.0_121] 

Попробуйте загрузить ресурс как:

<imageExpression><![CDATA[this.getClass().getResourceAsStream("/img/mdg_logo.jpg")]]></imageExpression> 
+0

для мастера вышеназванное выражение прекрасно, как насчет суб-отчета –

0

Используйте ниже выражение в изображении Выражения яшмы IDE отчета о свойствах изображений в jrxml и относительного пути изображения

Соответственно изменить w.r.t пути

getClass().getResource("META-INF/resources/webjars/Bank/themes/default/images/Logo.png").openStream() 
Смежные вопросы