继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

JavaWeb itext 导出Pdf

qq_童年_1
关注TA
已关注
手记 11
粉丝 42
获赞 175

前两天刚刚写了一篇:JavaWeb POI 导出Excel的文章,现在来说一下:怎么将数据导出为:Pdf格式的简单文章,其实他们的基本逻辑思路都是一样的,只不过用的工具类不一样而已。废话不多说,下面是将数据导出为Pdf格式的具体过程,这个是根据我自己公司的项目的逻辑来写一个实现类,大家可以根据自己的需求做修改就行了。

ExportPdf(导出Pdf的工具类)

1. 创建一些导出Pdf页面所需要的对象

    //创建一个byte型别数组的缓冲区,利用ByteArrayOutputStream的实例向数组中写入数据
    private ByteArrayOutputStream baos;
    //定义PdfWriter对象
    private PdfWriter writer;
    //定义一个Pdf页面
    private Document document;
    //定义一个写入数据的Table
    private PdfPTable table;
    //定义Pdf的字体对象
    private BaseFont baseFont;
    private Font font;

    //定义每一列的宽度的比例
    float[] widths = {20, 20, 20, 20};

2. 初始化Table

    //初始化Table
    public void init() throws DocumentException, IOException {
        //设置Pdf页面的大小
        document = new Document(PageSize.A4.rotate(), -20, -20, 20, 20);
        baos = new ByteArrayOutputStream();
        writer = PdfWriter.getInstance(document, baos);
        document.open();
        //设置字体
        baseFont = BaseFont.createFont("simsun.ttc,1", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
    }

3. 生成Pdf标题

    //生成Pdf页面标题
    public void buildPdfTitile() throws DocumentException {
        //new 一个只有一列的Table
        table = new PdfPTable(1);
        //设置字体样式
        font = new Font(baseFont, 16, Font.BOLD, new BaseColor(0, 0, 0));
        PdfPCell cell = getPdfCell("学生表", font, 0, Element.ALIGN_CENTER);
        //插入数据
        table.addCell(cell);
        //把table添加到Document对象
        document.add(table);
    }

4. 生成Pdf页面的表头

    //生成Pdf表头
    public void buildPdfTableHeader() throws DocumentException {
        String[] tableHeaders = {"学号", "姓名", "年龄", "性别"};
        table = new PdfPTable(widths);
        //设置字体样式
        font = new Font(baseFont, 12, Font.BOLD, new BaseColor(0, 0, 0));
        for (int i = 0; i < tableHeaders.length; i++) {
            table.addCell(getPdfCell(tableHeaders[i], font, 1, Element.ALIGN_CENTER));
        }
        document.add(table);
    }

5. 写入Pdf表数据

    //写入Pdf表数据
    public void buildPdfTableBody(List<Student> list) throws DocumentException {
        table = new PdfPTable(widths);
        //定义每个单元格的默认边框宽度
        table.getDefaultCell().setBorderWidth((float) 0.1);
        //定义每个单元格的默认横向排列方式
        table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER);
        //设置字体样式
        font = new Font(baseFont, 12, Font.NORMAL, new BaseColor(0, 0, 0));
        //Pdf加入表数据
        for (int i = 0; i < list.size(); i++) {
            Student student = list.get(i);
            table.addCell(getPdfCell(student.getSno(), font, 1, Element.ALIGN_LEFT));
            table.addCell(getPdfCell(student.getName(), font, 1, Element.ALIGN_LEFT));
            table.addCell(getPdfCell(student.getAge(), font, 1, Element.ALIGN_RIGHT));
            table.addCell(getPdfCell(student.getSex(), font, 1, Element.ALIGN_LEFT));
        }
        document.add(table);
    }

6. 上面生成Pdf的过程都有一个getPdfCell()的方法,下面是这个方法的代码:

    //获得每个不同单元格的style,方法里面的参数分别为(单元格的值, 字体样式, 边框宽度, 水平位置)
    public PdfPCell getPdfCell(String value, Font font, float borderWidth, int align) {
        Phrase phrase = new Phrase(value, font);

        PdfPCell cell = new PdfPCell();
        cell.setPhrase(phrase);
        //设置边框宽度
        cell.setBorderWidth(borderWidth);
        //设置水平位置
        cell.setHorizontalAlignment(align);
        return cell;
    }

7. 实现导出Pdf的主方法exportPdf();

    //导出为Pdf
    public ByteArrayOutputStream exportPdf(List<Student> list) throws DocumentException, IOException {
        init();
        buildPdfTitile();
        buildPdfTableHeader();
        buildPdfTableBody(list);
        document.close();
        return baos;
    }

Action层调用Pdf工具类的主方法,得到导出Pdf的结果

    //导出Pdf
    public void exportPdf() throws DocumentException, IOException {
        //设置页面编码格式
        response.setContentType("text/plain;charaset=utf-8");
        response.setContentType("application/vnd.ms-pdf");
        response.setHeader("Content-Disposition", "attachment; filename=student.pdf");
        //List集合
        List<Student> list = new ArrayList<>();
        list.add(new Student("001", "A", "20", "男"));
        list.add(new Student("002", "B", "20", "男"));
        list.add(new Student("003", "C", "20", "女"));
        ExportPdf export = new ExportPdf();
        ByteArrayOutputStream baos = export.exportPdf(list);
        response.setContentLength(baos.size());
        OutputStream out = response.getOutputStream();
        baos.writeTo(out);
        baos.close();
        out.close();
    }

前台JS代码:

    <script>    
    function exportPdf(){
         location.href="export/Pdf";    
         <!--这里不能用ajax请求,ajax请求无法弹出下载保存对话框-->    
     }    
    </script>

    <a onclick="exportPdf()">导出Pdf</a>
打开App,阅读手记
7人推荐
发表评论
随时随地看视频慕课网APP

热门评论

好文!学习后对Itext绘制列表过程有了大致的了解,pdfbox的表格导出不知博主有木有研究过^_^

你好,请问这个需要导入什么jar包吗?

查看全部评论