2014-01-15 2 views
0

Я пытаюсь передать изображение в ireports в качестве логотипа параметра, но когда появляется отчет, он отображает строковое определение изображения вместо логотипа.Передача изображения как параметра jasperreports

В Iireports я создал логотип параметра и сделал его выражение как объект и перетащил изображение на него из палитры. Изображение i сделало свое выражение на изображении

private void generateRptForm(String sql, String reportloader) { 
    PreparedStatement pstmt = null; 
    ResultSet rs = null; 
    ByteArrayOutputStream baos = null; 
    Connection connect = null; 
    try { 
     baos = new ByteArrayOutputStream(); 
     Class.forName("com.mysql.jdbc.Driver").newInstance(); 
     connect = DriverManager.getConnection("jdbc:mysql://localhost:3306/" + "school", user, password); 
     pstmt = connect.prepareStatement("SELECT image FROM picture WHERE id = 1"); 
     rs = pstmt.executeQuery(); 
     InputStream imageStream = null; 
     BufferedImage image = null; 
     while (rs.next()) { 
      imageStream = rs.getBinaryStream(1); 
      image = ImageIO.read(imageStream); 
     } 
     System.out.println("image..." + image); 
     connect.close(); 
     connect.close(); 

     Class.forName("com.mysql.jdbc.Driver"); 
     conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/" + "school", user, password); 
     stmt = conn.createStatement(); 
     JasperDesign jd = JRXmlLoader.load(reportloader); 
     String sqltrans = sql; 
     JRDesignQuery newQuery = new JRDesignQuery(); 
     newQuery.setText(sqltrans); 
     jd.setQuery(newQuery); 
     // Get data from registration table 

     String[] split = null; 
     String schname = this.getTitle(); 
     split = schname.split("\\["); 
     schname = split[1]; 
     split = schname.split("\\]"); 
     String[] regdetails = dbutils.checker.regdetails(split[0]); 

     Map<String, Object> param = new HashMap<String, Object>(); 

     param.put("schoolname", regdetails[0]); 
     param.put("address", regdetails[3]); 
     param.put("zipcode", regdetails[4]); 
     param.put("telephone", regdetails[5]); 
     param.put("location", regdetails[1]); 
     param.put("country", regdetails[2]); 
     param.put("email", regdetails[6]); 

     param.put("logo", image); 

     JasperReport jr = JasperCompileManager.compileReport(jd); 
     JasperPrint jp = JasperFillManager.fillReport(jr, param, conn); 
     JasperViewer.viewReport(jp, false); 
    } catch (Exception e) { 
     JOptionPane.showMessageDialog(null, e); 
     System.out.println(e); 
    } 
} 
+0

несоответствующего Примечание: Вам не нужно открывать два соединения к БД, использование первого для второго запроса также отлично и лучше. –

+0

И соответствующий вопрос: как вы используете изображение в файле 'jrxml'? Можете ли вы разместить соответствующую часть? –

+0

Спасибо за руководство. – user3114376

ответ

0

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

<image> 
    <reportElement ... /> 
    <imageExpression class="java.awt.Image"><![CDATA[$P{logo}]]></imageExpression> 
</image> 

I.e. убедитесь, что класс выражения равен java.awt.Image, и само выражение указывает на правильный параметр.

Смежные вопросы