Skip to Main Content

Java EE (Java Enterprise Edition) General Discussion

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

a big problem of Generate report with PDF format....Urgent

843838Feb 27 2006
I want to generate a report with pdf format through one java file, it have two page 1)gen_report.jsp 2) report_gen.java , the compliation was failed. However, i don't what the problem is .... i hope anyone can help me as it is very argent for me ....Thanks a lot

1)gen_report.jsp
<table  id="AutoNumber1">
   <tr>
     <td background="images/top5movie.png">
     <p align="center">&nbsp;</p>
    </td>
   </tr>
   <tr>
   <td >
      <div align="center">
        <table id="AutoNumber2" >
              <form method="GET" action="../report_gen" name="report_gen" target="_blank" onSubmit="javascript:return checkr1(this)">
                <tr> 
                  <td ><b>Report Description:</b></td>
                  <td >This report is to show the top five popular movies in cinemix for a period </td>
                </tr>
                <tr> 
                  <td><b>Data scope:</b></td>
                  <td >Start from 
                  <input type="text" name="start" value="2003-1-1" >to 
                  <input type="text" name="end" value="2006-1-1" ></td>
                 </tr>
                 <tr> 
                  <td><b>Data processing:</b></td>
                  <td >Show 
                    <select name="order_by">
                      <option value="desc" selected>top</option>
                      <option value="asc">bottom</option>
                    </select> 
                  5 films</td>
                </tr>
                <tr> 
                  <td> <p align="center"> 
                      <input type="submit" value="View_Report" name="subm">
                    </p></td>
                </tr>
                <input type="hidden" name="report" value="r1">
              </form>
              <form method="GET" action="../report_gen" name="report_gen" target="_blank" onSubmit="javascript:return checkr2(this)">
                <input type="hidden" name="report" value="r2">
              </form>
            </table>
     </div>
      </td>
    </tr>
  </table>
Then my java code is here

report_gen.java
import java.io.*;
import java.net.*;

import javax.servlet.*;
import javax.servlet.http.*;

import java.util.*;
import java.sql.*;

// chart and pdf out
import java.awt.Graphics2D;
import java.awt.geom.Rectangle2D;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.xy.*;
import org.jfree.data.xy.XYBarDataset;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.statistics.SimpleHistogramDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;

import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Rectangle;
import com.lowagie.text.pdf.DefaultFontMapper;
import com.lowagie.text.pdf.PdfContentByte;
import com.lowagie.text.pdf.PdfTemplate;
import com.lowagie.text.pdf.PdfWriter;

import com.lowagie.text.*;
import com.lowagie.text.pdf.*;
import com.lowagie.text.pdf.PdfPCell;


public class report_gen extends HttpServlet 
{
  
   private final String titles[] = {"Top Five popular movies ",
		          "Financial cirumstance of cinemas",
		          "Distribution of time segment",
		          "Distribution of favourite movie type"
		       };
    
   private final String descs[] = {"This report is to show the top five  popular movies in cinemix for a period ",
			"This report is to show the financial circumstance of each cinema site ",
			"This report is to analysis the customer when is the most visit time ",
			"This report is to analysis the customer which type of movie do they watch the most"
		};
    private final String bigTitle = "Cinemix";
    private final String driver = "org.gjt.mm.mysql.Driver";
    private final String url= "jdbc:mysql://localhost:3306/cinemix";
    private final String userID = "abc";
    private final String passwd = "abc";	
	
    public void init(ServletConfig config) throws ServletException 
    {
      super.init(config);
    }
   protected void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException 
    {
      final int width = 550;
     final int height = 200;
    
/ title font (centre and report title)
     final Font fTitle0 = FontFactory.getFont("Helvetica", 42, Font.BOLD);
     final Font fTitle1 = FontFactory.getFont("Helvetica", 30, Font.BOLD);
    
		// centre name:
    final String title0 = bigTitle;
    
   // Default category for DefaultCategoryDataset
   final String cat = "data";
    
   Connection conn;
  JFreeChart chart;
    
   String title1     = "xyz Report";
   String chartDesc = "description";
   String notes[] = new String[4];
   String chartTitle = "so bad this is title";
   String chartXTitle = "this is x";
   String chartYTitle = "this is y.";
   String report = request.getParameter("report");	
   int max=-10000;
   int min=10000; 
   int j=0;		
  // do some basic checking
   if (report == null || report.equals("")) 
   {
     report = "-1";  // this course unknow report error message
   }
     String start   = request.getParameter("start");
     String end  = request.getParameter("end");
     String order_by  = request.getParameter("order_by");  // ToDo: check invalid string
       int topN  = 5;
    String order = (order_by.equals("desc")) ? "Top" : "Last";
    
   String inv[] = {"08:30", "09:30", "10:30", "11:30", "12:30", "11:30", "12:30", "13:30", "14:30", "15:30", "16:30", "17:30","18:30","19:30","20:30","21:30","22:30","23:30"};
     int inv_val[] = new int[inv.length - 1];
     try 
         {
        Class.forName(driver).newInstance(); 
        } 
         catch(Exception e) 
        {
        printE("Cannot load mysql database driver!", response);
          e.printStackTrace();
           return;
       }
       try 
         {
             conn = DriverManager.getConnection(url, userID, passwd);
              if (report.equals("r1")) {  // report 1
           DefaultCategoryDataset dataset = new DefaultCategoryDataset();
          Statement stmt = conn.createStatement();
          String sql = "select *,count(f.Name),f.Name from film f, filmDetail fd, ticket t where f.startDate > '" + start + "' and f.endDate <  '" + end + "'and fd.filmID = f.filmID and fd.filmDetailID = t.filmDetailID group by f.name order by fd.filmDetailID asc limit '" +topN+"'";
          ResultSet rs = stmt.executeQuery(sql);
        while (rs.next())
       {
       if (rs.getInt("fd.filmDetailID") > max) max = rs.getInt("fd.filmDetailID");
     if (rs.getInt("fd.filmDetailID") < min) min = rs.getInt("fd.filmDetailID");
      j++;
       ataset.setValue(rs.getInt("fd.filmDetailID"), cat,rs.getString("f.Name"));
   }
       title1     = titles[0];
     chartDesc  = descs[0];
     chartTitle = order + " " + topN + " popular movie";
      chartYTitle = "Box Office record";
      chartXTitle = "Film Name";
      gender = " ";
      chart = ChartFactory.createBarChart(chartTitle, chartXTitle,   chartYTitle, dataset,PlotOrientation.VERTICAL, false, true, false);
   }
    else
         {
          print("Error: I don't inderstand your request!", response);
	return;
        }
}
       catch (SQLException e) 
      {
     printE("Cannot open database connection? <br>", response);
     // printE(e.toString);
  e.printStackTrace();
  return;
  }
     response.setContentType("application/pdf");
     Document document = new Document(PageSize.A4, 5, 5, 5, 5);
    try 
     {
         PdfWriter writer;
     writer = PdfWriter.getInstance(document, response.getOutputStream());
    HeaderFooter footer = new HeaderFooter(new Phrase("Page: "), true);
     footer.setBorder(Rectangle.NO_BORDER);
document.setFooter(footer);
			footer.setAlignment(Element.ALIGN_CENTER);
      
			// step 3
			document.open();
			document.add(getHeader(title0, title1, start, end, gender, order, topN, chartDesc));
			document.add(printChart(chart, writer));
			document.add(getFooter(notes));
		}
		catch(DocumentException de) 
		{
			de.printStackTrace();
		}
		// step 5
		document.close();

		return;
  
	}// end doGet()
  
	/** Handles the HTTP <code>POST</code> method.
	 * @param request servlet request
	 * @param response servlet response
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException 
	{
		// processRequest(request, response);
	}
  
	/** Returns a short description of the servlet.
	 */
	public String getServletInfo() 
	{
		return "Generate reports for " + bigTitle;
	}
  
	/* To print en error and exit(?) */
	private void printE(Object obj, HttpServletResponse response) throws IOException
	{
		response.setContentType("text/html");
		PrintWriter out;
		out = response.getWriter();
		out.print(obj.toString());
		out.close();
		// To-Do: how to force exiting?
	}
  
  
	// create data chart
	private PdfPTable getHeader(String title0, String title1, String start, String end, String sex, String order, int topN, String desc)
	{
    
		Font fTitle0 = FontFactory.getFont("Helvetica", 42, Font.BOLD);
		Font fTitle1 = FontFactory.getFont("Helvetica", 24, Font.BOLD);
		Font fTitle3 = FontFactory.getFont("Helvetica", 12, Font.BOLD);
		Font fValue = FontFactory.getFont("Helvetica", 12, Font.UNDERLINE);
    
		Paragraph parStartEnd = new Paragraph();
		parStartEnd.add(new Phrase("Data start from:                  ", fTitle3));
		parStartEnd.add(new Phrase(start, fValue));
		parStartEnd.add(new Phrase("     to     ", fTitle3));
		parStartEnd.add(new Phrase(end, fValue));
    
		Paragraph parGenerateDate = new Paragraph();
		parGenerateDate.add(new Phrase("Report generated at:         ", fTitle3));
		parGenerateDate.add(new Phrase(new java.util.Date().toString(), fValue));
    
		Paragraph parGender = new Paragraph();
		parGender.add(new Phrase("Current show gender:       ", fTitle3));
		parGender.add(new Phrase(sex, fValue));
    
		Paragraph parTopN = new Paragraph();
		parTopN.add(new Phrase("Now is showing                 ", fTitle3));
		parTopN.add(new Phrase(order, fValue));
		parTopN.add(new Phrase("  ", fValue));
		parTopN.add(new Phrase(new Integer(topN).toString(), fValue));
		parTopN.add(new Phrase("   record(s)", fTitle3));
    

		// Start main table
		PdfPTable tblMain = new PdfPTable(1);
		tblMain.getDefaultCell().setBorder(0);

		// Print title
		tblMain.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER);
		tblMain.addCell(new Paragraph(title0, fTitle0));
		tblMain.addCell(new Paragraph(title1, fTitle1));
		tblMain.addCell("");
		tblMain.addCell("");
		tblMain.addCell("");

		// Print headers data
		//tblMain.getDefaultCell().setHorizontalAlignment(Element.ALIGN_RIGHT);
		//tblMain.addCell(parInvoiceNum);
		//tblMain.addCell("");
		tblMain.getDefaultCell().setHorizontalAlignment(Element.ALIGN_LEFT);
		tblMain.addCell(parStartEnd);
		tblMain.addCell("");
		tblMain.addCell(parGenerateDate);
		tblMain.addCell("");
		if (sex != " ")
			tblMain.addCell(parGender);
		else if(order != null && topN > 0)
			tblMain.addCell(parTopN);
		else
			tblMain.addCell(" \n");
    
		tblMain.addCell("");
		tblMain.setWidthPercentage(96);
		tblMain.addCell(new Paragraph("Description of this report:", fTitle3));
		tblMain.addCell(desc);
		tblMain.addCell("\n");

		// Finish main table
		return tblMain;
	}
  
	// print a chart _directly_ to pdf and return a empty Pdftable...
	public PdfPTable printChart(JFreeChart chart, PdfWriter writer) 
	{
		PdfContentByte cb = writer.getDirectContent();
		int width = 550;
		int height = 450;
		PdfTemplate tp = cb.createTemplate(width, height);
		Graphics2D g2d = tp.createGraphics(width, height, new DefaultFontMapper());
		Rectangle2D r2d = new Rectangle2D.Double(0, 0, width, height); //->,
		chart.draw(g2d, r2d);
		g2d.dispose();
    
		cb.addTemplate(tp, 20, 170);
    
		// quick method to push down the footer text
		// the only things this method return
		PdfPTable tblDownDown = new PdfPTable(1);
		tblDownDown.getDefaultCell().setBorder(0);
		tblDownDown.addCell(" \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n");
		tblDownDown.addCell(" \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n");
		tblDownDown.addCell(" \n \n \n \n \n \n");
		return tblDownDown;
	}
  
	public PdfPTable getFooter(String notes[])
	{
		Font fNote = FontFactory.getFont("Helvetica", 14, Font.UNDERLINE);
		Font fComment = FontFactory.getFont("Helvetica", 12, Font.ITALIC);
		Font fTitle1 = FontFactory.getFont("Helvetica", 30, Font.ITALIC);
    
		// Start footer table
		PdfPTable tblFooter = new PdfPTable(1);
		tblFooter.getDefaultCell().setBorder(0);
    
		if (notes != null)
		{
			tblFooter.addCell(new Paragraph("Notes:", fNote));
			tblFooter.addCell("");
			tblFooter.addCell("");
			tblFooter.getDefaultCell().setHorizontalAlignment(Element.ALIGN_LEFT);
      
			for (int i=0;i<notes.length;i++)
			{
				if (notes[i] != null)
				{
					tblFooter.addCell(new Paragraph("" + (i+1) + ". " + notes[i] + "", fComment));
					tblFooter.addCell("");
					tblFooter.addCell("");
				}
				tblFooter.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER);
				tblFooter.addCell(new Paragraph("- End of report -", fComment));
				return tblFooter;
			}
		}	
	}
}
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Mar 27 2006
Added on Feb 27 2006
0 comments
274 views