package org.rosenjiang.servlet;

import java.awt.Color;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

import org.rosenjiang.service.UserService;
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Font;
import com.lowagie.text.Paragraph;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfPCell;
import com.lowagie.text.pdf.PdfPTable;
import com.lowagie.text.pdf.PdfWriter;

public class ReportServlet extends HttpServlet {
       
    /**
     * Return a PDF document for download.
     * 
     */
    public void doGet (HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException {
        String account_id = request.getParameter("account_id");
        String search_date_from = request.getParameter("search_date_from");
        String to = request.getParameter("to");
        WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(this.getServletContext());
        UserService userService = (UserService)ctx.getBean("userService");
        List<Map<String, Object>> list = userService.getAccountActivity(account_id, search_date_from, to);
        // create PDF document
        Document document = new Document();
        try {
            //set response info
            response.setContentType("application/x-msdownload;charset=UTF-8");
            response.setHeader("Content-Disposition","attachment;filename=report.pdf");
            //open output stream
            PdfWriter.getInstance(document, response.getOutputStream());
            // open PDF document
            document.open();
            // set chinese font
            BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);  
            Font f2 = new Font(bfChinese, 2, Font.NORMAL);
            Font f6 = new Font(bfChinese, 6, Font.NORMAL);
            Font f8 = new Font(bfChinese, 8, Font.NORMAL);
            Font f10 = new Font(bfChinese, 10, Font.NORMAL);
            Font f12 = new Font(bfChinese, 12, Font.BOLD);
            //set title
            document.add(new Paragraph("金融报表", f12)); 
            //<br>
            document.add(new Paragraph(" ",f6)); 
            //set sub title
            document.add(new Paragraph("账户信息", f10)); 
            //<br>
            document.add(new Paragraph(" ", f2));
            //process business data
            if(list.size()>0 && list.get(0).get("bankbook_no")!=null){
                float openBalance = 0;
                //create table with 7 columns
                PdfPTable table = new PdfPTable(7);
                //100% width
                table.setWidthPercentage(100);
                table.setHorizontalAlignment(PdfPTable.ALIGN_LEFT);
                //create cells
                PdfPCell cell = new PdfPCell();
                //set color
                cell.setBackgroundColor(new Color(213, 141, 69));
                cell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
                //
                cell.setPhrase(new Paragraph("交易日", f8));
                table.addCell(cell);
                cell.setPhrase(new Paragraph("类型", f8));
                table.addCell(cell);
                cell.setPhrase(new Paragraph("备注", f8));
                table.addCell(cell);
                cell.setPhrase(new Paragraph("ID", f8));
                table.addCell(cell);
                cell.setPhrase(new Paragraph("票号", f8));
                table.addCell(cell);
                cell.setPhrase(new Paragraph("合计", f8));
                table.addCell(cell);
                cell.setPhrase(new Paragraph("余额", f8));
                table.addCell(cell);
                //create another cell
                PdfPCell newcell = new PdfPCell();
                newcell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
                
                Map<String, Object> map = new HashMap<String, Object>();
                for(int i = 0; i < list.size(); i++){
                    map = list.get(i);
                    String cashInout = map.get("cash_inout").toString();
                    newcell.setPhrase(new Paragraph(map.get("trade_date").toString(), f8));
                    table.addCell(newcell);
                    newcell.setPhrase(new Paragraph(map.get("bankbook_type").toString(), f8));
                    table.addCell(newcell);
                    newcell.setPhrase(new Paragraph(map.get("memo").toString(), f8));
                    table.addCell(newcell);
                    newcell.setPhrase(new Paragraph(map.get("account_id").toString(), f8));
                    table.addCell(newcell);
                    newcell.setPhrase(new Paragraph(map.get("ticket_no").toString(), f8));
                    table.addCell(newcell);
                    newcell.setPhrase(new Paragraph(map.get("amount").toString(), f8));
                    table.addCell(newcell);
                    newcell.setPhrase(new Paragraph(openBalance+"", f8));
                    table.addCell(newcell);
                    if(cashInout.equals("I")){
                        openBalance = openBalance + Float.valueOf(map.get("amount").toString());
                    }else if(cashInout.equals("O")){
                        openBalance = openBalance - Float.valueOf(map.get("amount").toString());
                    }
                }
                //print total column
                newcell.setPhrase(new Paragraph("合计"+openBalance, f8));
                table.addCell("");
                table.addCell("");
                table.addCell("");
                table.addCell("");
                table.addCell("");
                table.addCell("");
                table.addCell(newcell);
                document.add(table);
            }else{
                PdfPTable table = new PdfPTable(1);
                table.setWidthPercentage(100);
                table.setHorizontalAlignment(PdfPTable.ALIGN_LEFT);
                PdfPCell cell = new PdfPCell(new Paragraph("暂无数据"));
                cell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
                table.addCell(cell);
                document.add(table);
            }
        }
        catch(DocumentException de) {
            de.printStackTrace();
            System.err.println("document: " + de.getMessage());
        }finally{
            // close the document and the outputstream is also closed internally
            document.close();
        }        
    }
}

------------------------------ 

table = new PdfPTable(2);
                table.setTotalWidth(pageTableWidth);
                table.setWidthPercentage(100);
                float[] widths = {5f, 95f};
                table.setWidths(widths);
                dCell = table.getDefaultCell();
                dCell.setBorder(Rectangle.NO_BORDER);
                dCell.setBorderWidth(0);
                dCell.setPadding(1);
 
                PdfPCell desc = new PdfPCell(new Phrase(""));
                desc.setBorder(0);
                desc.setColspan(2);

--------------------------------------------------