ireport+springMVC生成pdf

若是是少許,簡單的報表itext就輕鬆搞定,可是報表多了,itext會死人的。記錄下本人使用ireport+springMVC生成pdfjava

  1. 下載並安裝ireport
    web

  2. 將依賴的jar放到lib下面,jasperreports-5.6.0.jar、groovy-all-2.1.3.jar、iText-2.1.7.js2.jar、iTextAsian.jar、iTextAsianCmaps.jar(iTextAsian這幾個是解決中文亂碼的)spring

  3. 繼承JasperReportsMultiFormatView類,並重寫fillReport()方法,在該方法中增長setUrl()實現,這樣就可 以在controller中指定要使用的報表模板文件了。這樣作的好處是,只須要一個jasperReport配置文件,能夠在controller中動 態的設定報表模板url。
    app

  4. package com.hutong.ms.pdf.controller;
    
    import net.sf.jasperreports.engine.JRDataSource;
    import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    import com.hutong.ms.pdf.entity.UserTest;
    
    /**
     * @author :alex
     * @date :2015年12月17日 下午8:20:05
     * @description:
     */
    @Controller
    public class UserTestController {
    
        @RequestMapping(value="getpdf")
        public String report(Model model) {  
            // 報表數據源  
            JRDataSource jrDataSource = new JRBeanCollectionDataSource(UserTest.getList());  
            // 動態指定報表模板url  
    //        model.addAttribute("url", "/WEB-INF/jasper/MvcIReportExample.jasper");  
            model.addAttribute("url", "/WEB-INF/jasper/test1.jasper");  
            model.addAttribute("format", "pdf"); // 報表格式  
            model.addAttribute("jrMainDataSource", jrDataSource);  
                  
            return "iReportView"; // 對應jasper-defs.xml中的bean id  
        } 
        
    }

4.在/WEB-INF/jasper/目錄下建立報表視圖配置文件jasper-defs.xml,並指定解析器類爲自定義的視圖解析器類:ide

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="
http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">

<bean id="iReportView" class="com.hutong.ms.pdf.UserTestIreportView">
<!-- <property name="url" value="/WEB-INF/jasper/report2.jasper"/> -->
<property name="reportDataKey" value="jrMainDataSource">
</property>
</bean>
</beans>

5.Jasper報表的渲染須要用到XmlViewResolver視圖解析器,這樣你的項目中就會存在多個視圖解析器。須要注意的是,項目中若是 使用了多個視圖解析器,則須要設置order的值來區分解析器的使用順序,order值越小則越靠前。增長XmlViewResolver視圖解析器的同 時,並指定其要解析的配置文件路徑。測試

那麼,須要在/WEB-INF/spring/appServlet/servlet-context.xml中增長下述配置:ui

<!-- 註冊XmlViewResolver,用於iReport & JasperReports報表生成 -->  
    <beans:bean id="jasperReportResolver" class="org.springframework.web.servlet.view.XmlViewResolver">  
        <beans:property name="order">  
            <beans:value>0</beans:value>  
        </beans:property>  
        <beans:property name="location">  
            <beans:value>WEB-INF/jasper/jasper-defs.xml</beans:value>  
        </beans:property>  
    </beans:bean>

--------------------------------分割線-------------------------------------this

java測試代碼url

  1. 實體類:.net


  2. package com.hutong.ms.pdf.entity;
    
    import java.io.Serializable;
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * @author :alex
     * @date :2015年12月17日 下午8:16:26
     * @description:
     */
    public class UserTest implements Serializable {
    
        /**
         * 
         */
        private static final long serialVersionUID = 1L;
        
        private int id;
        private String name;
        private String nickname;
        private String phone;
        private int age;
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getNickname() {
            return nickname;
        }
        public void setNickname(String nickname) {
            this.nickname = nickname;
        }
        public String getPhone() {
            return phone;
        }
        public void setPhone(String phone) {
            this.phone = phone;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        @Override
        public String toString() {
            return "UserTest [id=" + id + ", name=" + name + ", nickname="
                    + nickname + ", phone=" + phone + ", age=" + age + "]";
        }
        
        public UserTest(int id, String name, String nickname, String phone, int age) {
            super();
            this.id = id;
            this.name = name;
            this.nickname = nickname;
            this.phone = phone;
            this.age = age;
        }
        public UserTest() {
            super();
        }
        public static List<UserTest> getList(){
            List<UserTest> list = new ArrayList<>();
            UserTest ut1 = new UserTest(1, "alex", "alex", "18976878", 23);
            UserTest ut2 = new UserTest(2, "alex2", "alex2", "18976878", 23);
            UserTest ut3 = new UserTest(3, "alex3", "alex3", "18976878", 23);
            UserTest ut4 = new UserTest(4, "alex4", "alex4", "18976878", 23);
            UserTest ut5 = new UserTest(5, "alex5", "alex5", "18976878", 23);
            UserTest ut6 = new UserTest(5, "哈哈", "哈哈", "18976878", 23);
            list.add(ut1);
            list.add(ut2);
            list.add(ut3);
            list.add(ut4);
            list.add(ut5);
            list.add(ut6);
            return list;
        }
    
    }

2.使用iReport設計報表模板,並編成.jasper二進制文件,並拷貝至\WEB-INF\jasper目錄下:


3.Controller代碼:

package com.hutong.ms.pdf.controller;

import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import com.hutong.ms.pdf.entity.UserTest;

/**
 * @author :zhouyong
 * @date :2015年12月17日 下午8:20:05
 * @description:
 */
@Controller
public class UserTestController {

    @RequestMapping(value="getpdf")
    public String report(Model model) {  
        // 報表數據源  
        JRDataSource jrDataSource = new JRBeanCollectionDataSource(UserTest.getList());  
        // 動態指定報表模板url  
//        model.addAttribute("url", "/WEB-INF/jasper/MvcIReportExample.jasper");  
        model.addAttribute("url", "/WEB-INF/jasper/test1.jasper");  
        model.addAttribute("format", "pdf"); // 報表格式  
        model.addAttribute("jrMainDataSource", jrDataSource);  
              
        return "iReportView"; // 對應jasper-defs.xml中的bean id  
    } 
    
}

4.運行效果;


若是上述的中文相關jar都天劍了中文不顯示的話:

在生成jasper的時候設置字段屬性:

Font name    宋體

Pdf Font name :   STSong-Light

Pdf Embedded  :  true

Pdf Encoding  :  UniGB-UCS2-H (Chinese Simplified)


簡單說下ireport配置javabean數據源:


此處路徑爲你javabean的class文件地址,



配置完成後左側就能夠看到了:



http://blog.csdn.net/xht555/article/details/43409637

相關文章
相關標籤/搜索