您的位置:首页 > 编程语言 > Java开发

java操作office和pdf文件(四)页面列表导出cvs,excel、pdf报表.

2012-11-26 12:55 861 查看
在平常的开发中我们常常遇到不仅仅只是导出excel报表的情况。有时候也需要导出pdf或者CSV报表。其实原理都差不多。刚开始本来不打算也这篇博客介绍这个的。感觉这篇博客和前面的博客有点雷同。原理基本都一样。但想了想。有时候可能有些童鞋遇到这样的需求会无从下手。所以还是记录下来。帮助一下那些需要这个需求的童鞋。如果你对前面几篇博客的原理都搞明白了。这篇博客你完全可以不看了。仅仅只是代码的实现不同而已。好了。下面我们来看一下需求吧。

这个图就是我们的需求



  就像你看到的一样。我们的需求就是列表内容是从数据库中读出来的。而我们想把从数据库得到的这个列表导出pdf、csv、excel报表。也不多说了。看代码吧:

<PRE class=java name="code">package com.bzu.csh;  
  
import java.io.ByteArrayOutputStream;  
import java.io.File;  
import java.io.FileOutputStream;  
import java.io.OutputStream;  
import java.util.ArrayList;  
import java.util.List;  <
4000
/li>  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
  
import jxl.Workbook;  
import jxl.write.Label;  
import jxl.write.WritableFont;  
import jxl.write.WritableSheet;  
import jxl.write.WritableWorkbook;  
  
import org.apache.struts2.ServletActionContext;  
  
import com.lowagie.text.Document;  
import com.lowagie.text.Element;  
import com.lowagie.text.Font;  
import com.lowagie.text.PageSize;  
import com.lowagie.text.Paragraph;  
import com.lowagie.text.pdf.PdfPTable;  
import com.lowagie.text.pdf.PdfWriter;  
import com.opensymphony.xwork2.Action;  
  
public class downloadAction implements Action {  
  
    private String downType;  
  
    public String getDownType() {  
        return downType;  
    }  
  
    public void setDownType(String downType) {  
        this.downType = downType;  
    }  
  
    public String execute() {  
        // TODO Auto-generated method stub
  
        HttpServletRequest request = ServletActionContext.getRequest();  
        //HttpServletResponse response = ServletActionContext.getResponse();
  
        //此处模拟数据库读出的数据。在真正的项目中。我们可以通过在session中保存的前端数据集合替换这里
  
        List<Person> list = new ArrayList<Person>();  
        for (int i = 1; i < 6; i++) {  
            Person person = new Person();  
            person.setId(String.valueOf(i));  
            person.setName(String.valueOf((char) (i + 64)));  
            person.setAge(i + 20);  
            person.setSex("man");  
            list.add(person);  
        }  
        OutputStream os = null;  
        String fname = "personlist";  
        if ("PDF".equals(downType)) {  
            try {  
            //  response.reset();   
            //  os = response.getOutputStream();
  
                FileOutputStream out = new FileOutputStream("d://a.pdf");  
                Document document = new Document(PageSize.A4, 50, 50, 50, 50);  
            //  response.setContentType("application/pdf");
  
            //  response.setHeader("Content-disposition",
  
            //          "attachment;filename=" + fname + ".pdf");
  
                ByteArrayOutputStream baos = new ByteArrayOutputStream();  
  
                PdfWriter.getInstance(document, out);  
                document.open();  
                int cols = list.size();  
                // 创建PDF表格   
                PdfPTable table = new PdfPTable(4);  
                // 设置pdf表格的宽度   
                table.setTotalWidth(500);  
                // 设置是否要固定其宽度   
                table.setLockedWidth(true);  
                // 表头字体   
                Font thfont = new Font();  
                // 设置表头字体的大小   
                thfont.setSize(7);  
                // 设置表头字体的样式   
                thfont.setStyle(Font.BOLD);  
                Font tdfont = new Font();  
                tdfont.setSize(7);  
                tdfont.setStyle(Font.NORMAL);  
                // 设置水平对齐方式   
                table.setHorizontalAlignment(Element.ALIGN_MIDDLE);  
                // 设置table的header   
                table.addCell(new Paragraph("id", thfont));  
                table.addCell(new Paragraph("name", thfont));  
                table.addCell(new Paragraph("sex", thfont));  
                table.addCell(new Paragraph("age", thfont));  
                // 循环设置table的每一行   
                for (int i = 0; i < list.size(); i++) {  
                    Person p = (Person) list.get(i);  
                    table.addCell(new Paragraph(p.getId(), tdfont));  
                    table.addCell(new Paragraph(p.getName(), tdfont));  
                    table.addCell(new Paragraph(p.getSex(), tdfont));  
                    table.addCell(new Paragraph(String.valueOf(p.getAge()),  
                            tdfont));  
                }  
                document.add(table);  
                document.close();  
            //  baos.writeTo(response.getOutputStream());
  
                baos.close();  
            } catch (Exception e) {  
                e.printStackTrace();  
            }  
        } else if ("CSV".equals(downType)) {  
        //  response.reset();   
            // 生成csv文件   
            //response.setHeader("Content-disposition", "attachment;filename="
  
            //      + fname + ".csv");   
            //response.setContentType("text/csv");
  
            //response.setCharacterEncoding("UTF-8");
  
            FileOutputStream out ;  
            String sep = ",";  
            try {  
                out = new FileOutputStream(new File("d://a.cvs"));  
                //out = response.getOutputStream();
  
                out.write("id".getBytes());  
                out.write(sep.getBytes());  
                out.write("name".getBytes());  
                out.write(sep.getBytes());  
                out.write("sex".getBytes());  
                out.write(sep.getBytes());  
                out.write("age".getBytes());  
                out.write(sep.getBytes());  
                out.write(System.getProperty("line.separator").getBytes());  
                for (int i = 0; i < list.size(); i++) {  
                    Person p = (Person) list.get(i);  
                    out.write(p.getId().getBytes());  
                    out.write((sep + "/t").getBytes());  
                    out.write(p.getName().getBytes());  
                    out.write((sep + "/t").getBytes());  
                    out.write(p.getSex().getBytes());  
                    out.write((sep + "/t").getBytes());  
                    out.write(String.valueOf(p.getAge()).getBytes());  
                    out.write((sep + "/t").getBytes());  
                    out.write(sep.getBytes());  
                    out.write(System.getProperty("line.separator").getBytes());  
                }  
                out.flush();  
                //out.cloute();   
            } catch (Exception e) {  
                e.printStackTrace();  
            }  
        } else if (downType.equals("Excel")) {  
            //response.reset();   
            // 生成xls文件   
            //response.setContentType("application/vnd.ms-excel");
  
            //response.setHeader("Content-disposition", "attachment;filename="
  
            //      + fname + ".xls");   
            try {  
                //os = response.getOutputStream();
  
                Label l = null;  
                WritableWorkbook wbook = Workbook.createWorkbook(new File(  
                        "d://a.xls"));  
                // 写sheet名称   
                WritableSheet sheet = wbook.createSheet("my excel file", 0);  
                jxl.write.WritableFont wfc4 = new jxl.write.WritableFont(  
                        WritableFont.ARIAL, 9, WritableFont.NO_BOLD, false,  
                        jxl.format.UnderlineStyle.NO_UNDERLINE,  
                        jxl.format.Colour.BLACK);  
                jxl.write.WritableCellFormat wcfFC4 = new jxl.write.WritableCellFormat(  
                        wfc4);  
                wcfFC4.setBackground(jxl.format.Colour.LIGHT_GREEN);  
                int col = 0;  
                sheet.setColumnView(col, 12);                  l = new Label(col, 0, "id", wcfFC4);  
                sheet.addCell(l);  
                col++;  
                sheet.setColumnView(col, 12);  
                l = new Label(col, 0, "name", wcfFC4);  
                sheet.addCell(l);  
                col++;  
                sheet.setColumnView(col, 12);  
                l = new Label(col, 0, "sex", wcfFC4);  
                sheet.addCell(l);  
                col++;  
                sheet.setColumnView(col, 12);  
                l = new Label(col, 0, "age", wcfFC4);  
                sheet.addCell(l);  
  
                // 设置字体样式   
                jxl.write.WritableFont wfc5 = new jxl.write.WritableFont(  
                        WritableFont.ARIAL, 9, WritableFont.NO_BOLD, false,  
                        jxl.format.UnderlineStyle.NO_UNDERLINE,  
                        jxl.format.Colour.BLACK);  
                jxl.write.WritableCellFormat wcfFC5 = new jxl.write.WritableCellFormat(  
                        wfc5);  
                for (int i = 0; i < list.size(); i++) {  
                    Person p = (Person) list.get(i);  
                    int j = 0;  
                    l = new Label(j, i + 1, p.getId(), wcfFC5);  
                    sheet.addCell(l);  
                    j++;  
                    l = new Label(j, i + 1, p.getName(), wcfFC5);  
                    sheet.addCell(l);  
                    j++;  
                    l = new Label(j, i + 1, p.getSex(), wcfFC5);  
                    sheet.addCell(l);  
                    j++;  
                    l = new Label(j, i + 1, String.valueOf(p.getAge()), wcfFC5);  
                    sheet.addCell(l);  
                    j++;  
                }  
                // 写入流中   
                wbook.write();  
                wbook.close();  
  
            } catch (Exception e) {  
                e.printStackTrace();  
            }  
        }  
        return SUCCESS;  
    }  
    }  
    </PRE><BR><BR>  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐