用Itext把数据导出到Pdf文档

> 最近研究这个问题, java 相关的开源项目挺多的,有些号称完美解决的也有好几个, 但是移植到android就有问题,  有人用freemarker模板做, 有人用POI ,还有人用itext 来弄个, 我试验了下,android不支持java的awt,所以很多包不能直接在android上用, 最后用POI做出来一个,在android上完美运行, 但是poi 读取word还行,写文件,真的不敢恭维,写出来的格式word2007报错,但是不影响使用,看网上说是老板的格式,WPS打开是乱码。 freemarker模板感觉很不错,并且能生成漂亮的表格,可惜就是不知道android, itext还没来得及尝试, 晚上说的都是模板替换的,感觉太有局限性。

> webview打开pdf文件的方法
public class WebViewDemoActivity extends Activity {
 private WebView wv;
 private static String url = "http://www.abc.pdf";
   
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        wv = (WebView) this.findViewById(R.id.webView);
        wv.getSettings().setJavaScriptEnabled(true);
        wv.setWebChromeClient(new WebChromeClient());
        wv.loadUrl("http://docs.google.com/gview?embedded=true&url="+url);
    }
}

> itextpdf,Itext
安卓通过itext创建包含中文的pdf出错-- http://blog.csdn.net/nijian81/article/details/52948640
itextpdf-- https://github.com/itext/itextpdf/releases
  If you want to use iText on Android or the Google App Engine, you need to use iTextG. iTextG is almost identical to iText, except that it only uses classes that are white-listed by Google. All references to java.awt, javax.nio and other "forbidden" packages have been removed. You can download the source code and binaries from the release page on GitHub. As there are no dependencies on classes that aren't supported on Android in the PDF/A and XML Worker packages, you can download the Java version of these projects.

> 先用POI实现了把数据导出为Excel,现在又实现了用Itext把数据导出为Pdf文档.因为这些技术是以前都没有接触的,而现在又都基本掌握了,所以心里略有一些成就感.现把完整程序代码列在下面,以供对Itext有兴趣的朋友参考. 
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包括表格处理,图像处理,报表等复杂的应用. 

简单的完整可运行的代码如下:
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包和官方文档。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值