iText 的结构允许使用相同的代码生成以上任意类型的文档。比如可以用相同的代码生成pdf 和excel。
iTextAPI:
com.lowagie.text.Document是生成 PDF 的主要的类。它是需要使用的第一个类。一旦开始创建文档,将需要一个写入器向文档中写入内容。com.lowagie.text.pdf.PdfWriter 就是一个 PDF 写入器。下面列出了通常需要使用的类:
- com.lowagie.text.Paragraph —— 这个类表示一个缩进的段落。
- com.lowagie.text.Chapter —— 这个类表示 PDF 文档中的章节。使用 Paragraph 作为题目并使用 int 作为章节号码来创建它。
- com.lowagie.text.Font —— 这个类包含了全部的字体规范,例如字体、大小、样式和颜色。各种字体都在这个类中声明为静态常数。
- com.lowagie.text.List —— 这个类表示一个列表,按顺序包含许多 ListItems。
- com.lowagie.text.Table —— 这个类表示包含单元格的表,单元格有序地排列在矩阵中。
创建步骤:
第一步是创建一个文档Document。文档是 PDF 文档的所有元素的容器。
Document document =new Document(PageSize.A4, 50, 50, 50, 50);
第二步是创建 PdfWriter 对象
PdfWriter writer =PdfWriter.getInstance(document, new \\ITextTest.pdf"));
FileOutputStream("Cdocument.open();
注: 第一个参数是对文档对象的引用,第二个参数是文件的实际名称,在该名称中还会给出其输出路径。接下来,打开文档以写入内容
第三步是 创建段落对象
document.add(new Paragraph("First page of thedocument."));
document.add(new Paragraph("Some more text.",
FontFactory.getFont(FontFactory.COURIER, 14, Font.BOLD, new Color(255, 150,200))));
当然在这其中我们可以创建 表格,序列,节点等对象,只要将他们添加到document中即可。
在上面代码的结尾处添加 document.close(); 以关闭文档,否则创建的PDF无法打开。
总结:
在使用IText处理数据以生成PDF时,我们会通常 将 PdfWriter Paragraph PDFCell Font进行封装,最后继承PdfWriter 类进行PDF 的生成操作。对外我们只须提供filePath与一些数据访问参数即可。
例如对PdfWriter 的封装如下:
abstract public class PDFWriter {
protected Document document = null;
protected FileOutputStream out = null;
protected Rectangle pageSize = null;
protected String filePath = null;//此文件路径包括撮要创建的文件名
protected Cell cell = null;
protected Table table = null;
protected PDFParFontBOLD header = null;
protected PDFPar prg = null;
public PDFWriter(String filePath) {
try {
this.filePath = filePath;
document = new Document();
out = new FileOutputStream(filePath);
PdfWriter.getInstance(document, out);//第一个参数是对文档对象的引用,第二个参数是文件的实际名称,在该名称中还会给出其输出路径
document.open();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
}
}
public void close() {
try {
document.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Java 将数据处理成 Excel 格式
将数据处理Excel或Word格式,其原理与使用与 生成PDF一样,只不过生成PDF用的是 PDFWrite对象,而生成Excel 或Word用的是 HtmlWriter 对象,filePath 中的文件名给后缀为Excel格式(.xls)或Word格式(.doc)。
在将oracle数据库中的日期输出到EXCEL时,会遇到日期格式改变,比如 2011/09 会被改成 Sep-11
如何解决这个问题呢?将取出来的数据进行文本化,Excel 就不会再处理这个日期了,比如你在数据后面追加除空格的任何字符,这是会自动被转化为字符形式,但是 为什么追加空格不会被文本话呢?这个还没有弄清楚。到底有没有跟好的处理办法呢?在网上查了,使用SimpleDateFormat和cell.setParse进行转换都不成功,最后采取的办法是将2011/09 转换成 2011年9月 :
String regex = "/";
Pattern p = Pattern.compile(regex);
String[] tempArr = p.split(tblLeaderDesc.getCsny());
String CSNY = tempArr[0]+"年"+tempArr[1]+"月";
table.addCell(new PDFCell(String.valueOf(CSNY), 1, 1));