zoukankan      html  css  js  c++  java
  • 用Itext把数据导出到Pdf文档

    工夫不负有心人!先用POI实现了把数据导出为Excel,现在又实现了用Itext把数据导出为Pdf文档.因为这些技术是以前都没有接触的,而现在又都基本掌握了,所以心里略有一些成就感.现把完整程序代码列在下面,以供对Itext有兴趣的朋友参考. 

    ItextPdfDmo.java

    package com.javaeye.yongsky;
    
    import java.awt.Color;
    import java.io.FileOutputStream;
    import java.sql.ResultSet;
    
    import com.lowagie.text.Document;
    import com.lowagie.text.Element;
    import com.lowagie.text.Font;
    import com.lowagie.text.Paragraph;
    import com.lowagie.text.Rectangle;
    import com.lowagie.text.pdf.BaseFont;
    import com.lowagie.text.pdf.PdfPTable;
    import com.lowagie.text.pdf.PdfWriter;
    /**
     * 
     * @author yangshoujun
     * 
     */
    public class ItextPdfDmo {
    
        //表头
        public static final String[] tableHeader = { "企业中文名", "所属国家", "企业英文名",
                "2003年排名", "2004年排名", "2005年排名", "2006年排名", "2007年排名", "主要业务",
                "2003年营业额", "2004年营业额", "2005年营业额", "2006年营业额", "2007年营业额", "企业编号",
                "名次升降", "图片", "状况" };
        //数据表字段数
        private static final int colNumber = 18;
        //表格的设置
        private static final int spacing = 2;
        //表格的设置
        private static final int padding = 2;
        //导出Pdf文挡
        public static void exportPdfdocument() {
            // 创建文Pdf文挡
            Document document = new Document(new Rectangle(1500, 2000), 10, 10, 10,
                    10);
            try {
                PdfWriter.getInstance(document, new FileOutputStream(
                        "d:\\世界五百强企业名次表.pdf"));
                document.open();
                // 中文字体
                BaseFont bfChinese = BaseFont.createFont("STSong-Light",
                        "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
                Font fontChinese = new Font(bfChinese, 12, Font.HELVETICA);
                // 创建有colNumber(18)列的表格
                PdfPTable datatable = new PdfPTable(colNumber);
                int[] cellsWidth = { 8, 5, 8, 3, 3, 3, 3, 2, 6, 4, 4, 4, 4, 2, 2,
                        2, 2, 2 };
                datatable.setWidths(cellsWidth);
                datatable.setWidthPercentage(100); // 表格的宽度百分比
                datatable.getDefaultCell().setPadding(padding);
                datatable.getDefaultCell().setBorderWidth(spacing);
                datatable.getDefaultCell().setBackgroundColor(Color.ORANGE);
                datatable.getDefaultCell().setHorizontalAlignment(
                        Element.ALIGN_CENTER);
                // 添加表头元素
                for (int i = 0; i < colNumber; i++) {
                    datatable.addCell(new Paragraph(tableHeader[i], fontChinese));
                }
                datatable.setHeaderRows(1); // 表头结束
                datatable.getDefaultCell().setBorderWidth(1);
    
                ResultSet rs = SheetDataSource.selectAllDataFromDB();
                int rowIndex = 1;
                while (rs.next()) {
                    if (rowIndex % 2 == 1) {
                        datatable.getDefaultCell().setGrayFill(0.9f);
                    }
                    for (int i = 1; i <= colNumber; i++)
                        datatable.addCell(new Paragraph(rs.getString(i),
                                fontChinese));
                    if (rowIndex % 2 == 1) {
                        datatable.getDefaultCell().setGrayFill(1.0f);
                    }
                    rowIndex++;
                }
                document.add(datatable);
            } catch (Exception e) {
                e.printStackTrace();
            }
            document.close();
        }
    
        public static void main(String[] args) {
            exportPdfdocument();
        }
    }

    本程序主要功能 : 程序可以把数据库中数据以表格的形式导出到Pdf文档,并对表格做了些简单的设置.本程序引用我的前一篇文章中用到的SheetDataSource.java这个文件,文章附件中有详细代码. 

    有关Itext[附]: 

    (一)Itext简单介绍 :iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。 

    (二)Itext入门 
    使用Itext主要有五个步骤: 
    (1)建立com.lowagie.text.Document对象的实例

     Document document = new Document();

    (2)建立一个书写器(Writer)与document对象关联,通过书写器(Writer)可以将文档写入到磁盘中。

    PDFWriter.getInstance(document, new FileOutputStream("D:\\HelloItext.PDF")); 

    (3)打开文档。

    document.open();

    (4)向文档中添加内容。

    document.add(new Paragraph("Hello Itext"));

    (5)关闭文档。

    document.close();

    通过上面的5个步骤,就能产生一个简单HelloItext.PDF的文件,文件内容为"Hello Itext"。当然用Itext实现这样的功能很简单,但是如果要达到我们实际的要求就没有这么简单了.如果要完全掌握Itext还需要阅读文档和有关资料.Itext包括表格处理,图像处理,报表等复杂的应用. 

    简单的完整可运行的代码如下:

    package com.javaeye.yongsky;
    
    import java.io.FileOutputStream;
    
    import com.lowagie.text.Document;
    import com.lowagie.text.PageSize;
    import com.lowagie.text.Paragraph;
    import com.lowagie.text.pdf.PdfWriter;
    
    public class HelloItext {
    
        public static void main(String[] args) {
            Document document = new Document(PageSize.A4.rotate(), 10, 10, 10, 10);
            try {
                PdfWriter.getInstance(document, new FileOutputStream("D:\\HelloItext.pdf"));
                document.open();
                document.add(new Paragraph("Hello Itext"));
            } catch (Exception de) {
                de.printStackTrace();
            }
            document.close();
        }
    }

    提示: 
        下面附件中有Itext的JAR包可和官方文档供下载

    转:http://yongsky.iteye.com/blog/99406

  • 相关阅读:
    高斯拉普拉斯算子(Laplace of Gaussian)
    Windows的TCP协议参数
    poj 1182食物链(并查集)
    linux网络体系架构
    谈谈对于企业级系统架构的理解
    Redis源码解析(1)——源码目录介绍
    在多台服务器上简单实现Redis的数据主从复制
    利用Nginx做负载均衡
    C#中的BackgroundWorker控件
    C#中的线程(四)高级话题
  • 原文地址:https://www.cnblogs.com/gzggyy/p/2918135.html
Copyright © 2011-2022 走看看