2010-09-02 37 views
17

Tôi muốn nhúng hình ảnh vào tệp jrxml JasperReports của mình. Tôi có cấu trúc thư mục này.URL biểu hiện hình ảnh trong Báo cáo Jasper

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

Và tôi đã cố gắng làm suy nghĩ này rằng đây là tương đối so với báo cáo của tôi bối cảnh gốc

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

..và này cũng

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

nhưng nó luôn luôn nói là có lỗi khi tải byte từ vị trí JRLoader.

Tôi đã thử làm điều này và nó hoạt động, nhưng tôi hơi bối rối vì sao hai lần thử đầu tiên của tôi lại không.

Đây có phải là cách bạn nhúng hình ảnh vào JasperReport không? Bạn có cần cung cấp toàn bộ đường dẫn không? Tôi nghĩ rằng nên có một trang tương đối một cái gì đó.

<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> 

Tôi hơi bối rối về cách chính xác.

Trả lời

24

<![CDATA["../images/company_logo.jpg"]]> nên thực hiện thủ thuật. Đường dẫn có liên quan đến tệp .jasper của bạn.

+0

này là đúng! Cảm ơn –

+0

Một điểm cần lưu ý là các tên tệp và đường dẫn phân biệt chữ hoa chữ thường! – venomrld

+1

Điều này không hiệu quả đối với tôi khi Spring đang biên soạn các tập tin báo cáo Jasper khi đang bay. Tôi đã phải sử dụng kỹ thuật được mô tả [ở đây] (http://stackoverflow.com/questions/5376725/using-ireport-with-a-relative-path) –

2

đôi khi là tốt hơn sử dụng File.separtor: "ima" + File.separator + "logo.jpg"

9

Bạn cần phải tạo một tham số kiểu String gọi là ví dụ BỐI CẢNH, và từ JSP của bạn gửi bối cảnh servlet:

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

Bây giờ , trong báo cáo của bạn, bạn sử dụng thông số:

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

Điều tương tự cũng áp dụng cho các báo cáo phụ hoặc khác b tài nguyên, ví dụ:

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

Tôi hy vọng nó hữu ích.

+0

Hoạt động như một sự quyến rũ! – Nik

-2

Đặt hình ảnh của bạn trong cấu trúc sau:

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

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

Tiếng Anh, vui lòng. [như vậy] là một trang web chỉ có tiếng Anh. Bạn có thể truy cập [a51] để xem có trang web hoặc đề xuất cho một trang web bằng ngôn ngữ của bạn hay không. – Dukeling

2

Với .jrxml khi sử dụng một đường dẫn tuyệt đối với hình ảnh, khi đóng gói jar filr sẽ được triển khai, bạn sẽ nhận được:

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] 

Hãy thử tải tài nguyên dưới dạng:

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

để làm chủ các biểu thức trên là tốt, làm thế nào về báo cáo phụ –

0

Sử dụng các biểu hiện dưới đây trong các biểu thức hình ảnh của jasper báo cáo IDE trên thuộc tính hình ảnh của jrxml và đường dẫn hình ảnh tương đối

Theo đó thay đổi con đường w.r.t

getClass().getResource("META-INF/resources/webjars/Bank/themes/default/images/Logo.png").openStream() 
Các vấn đề liên quan