贾斯珀报告:"文件没有页面"

时间:2015-08-01 11:41:12

标签: javascript java jasper-reports

运行此代码时遇到问题。我总是得到这样的信息:"文件没有页面"在pdf文件中有一个空白页。

注意:我使用的是NetBeans IDE 7.2 Beta。

导入的Jar文件是:

  • com.lowagie.text-2.1.7.jar
  • 公地BeanUtils的-1.5.jar
  • 公地集合-2.1.jar
  • 公地消化器-2.1.jar
  • 公地javaflow.jar
  • 共享记录-1.3.jar
  • 的JasperReports-5.5.1.jar
  • javax.servlet.jar

我需要你的帮助。

这是我的代码:

import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Currency;
import java.util.HashMap;
import javax.swing.JFrame;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.swing.JRViewer;


public class Report extends JFrame{


   public Report(String month,int year){

                    try{
                        //load the driver
                Class.forName("com.mysql.jdbc.Driver");
                String url="jdbc:mysql://localhost:3306/motor";
                String user="root";
                String pass="";

                Connection cn=DriverManager.getConnection(url,user,pass);
                System.out.println("connected in report");
                PreparedStatement ps = cn.prepareStatement("select number,title,name,ikar,echtirak,price,tarakom from users order by number asc");
                ResultSet rs;
                rs=ps.executeQuery();

                 JasperPrint jasperPrint=null;
               HashMap<String, Object> mapParameters = new HashMap <String, Object>();

             // jrxml compiling process

           JasperReport jasperReport = JasperCompileManager.compileReport("C:/Users/user/Documents/NetBeansProjects/MotorApp/MyReports/motorReport.jrxml");
           int i=1;
                while(rs.next()){

                 mapParameters.put("Name", rs.getString("title")+" "+rs.getString("name"));
                 mapParameters.put("Number",rs.getString("number"));
                 mapParameters.put("Ikar",rs.getString("ikar"));
                 mapParameters.put("Amperage",rs.getString("echtirak")+" A");
                 mapParameters.put("tarakom",rs.getString("tarakom")+" $");
                 mapParameters.put("monthPrice",rs.getString("price")+" $");

                 Integer total=Integer.parseInt(rs.getString("price"))+Integer.parseInt(rs.getString("tarakom"));
                 mapParameters.put("totalPrice",total+" $");
                 mapParameters.put("monthYear",year+" "+month);


                 try{

                System.out.println("Filling report...");
                jasperPrint = JasperFillManager.fillReport(jasperReport, mapParameters,cn);
                JRViewer viewer = new JRViewer(jasperPrint);
                 System.out.println("Done!");
                JasperExportManager.exportReportToPdfFile(jasperPrint,"C:/Users/user/Desktop/"+month+" "+year+".pdf");

                 }catch(JRException elle){
                     System.out.println(elle.getMessage());
                 }

                 }

             }catch(Exception ev){
                 System.out.println(ev.getMessage());
             }

   }


}

我真的很感谢你的帮助。

2 个答案:

答案 0 :(得分:0)

我首先想到的是motorReport.jrxml文件。它的内容可能有一些问题。尝试将报告的内容减少到代码工作的位置,并且报告可以正确显示。它可能会为您提供问题原因的线索。如果你仍然无法解决这个问题,那就回到这里了解更多细节。

答案 1 :(得分:0)

代码中的mapParameters不是DataSource的记录。它是报告的参数,因此报告没有记录。

可能的解决方案之一:将ResultSet转换为BeanCollection,生成JRBeanCollectionDataSource并将其传递给fillReport。

制作bean以保存查询结果。

public class UserBean {
private String name;

public String getName() {
  return name;
}

public void setName(String name) {
  this.name = name;
}
.... 

}

例如结果是

List myList = new ArrayList<UserBean>();

转换为此处的集合示例stackoverflow.com/questions/17206523/put-resultset-values-into-collection-object-then-add-to-arraylist

转换后,你必须像这样调用fillReport:

 jasperPrint = JasperFillManager.fillReport(jasperReport, new HashMap<String,Object>, new JRBeanCollectionDataSource(myList));