java pdf 表格_java 如何在pdf中生成表格

这个Java代码示例展示了如何使用iText库创建和填充PDF文档。首先,它初始化Document对象并设置页面大小,然后通过反射获取对象属性以填充表格内容。最后,将表格添加到PDF文档中并关闭流。此代码适用于生成包含中文的PDF报告或文档。
摘要由CSDN通过智能技术生成

packagecom.zcr.service;importjava.io.File;importjava.io.FileOutputStream;importjava.io.IOException;importjava.lang.reflect.InvocationTargetException;importjava.lang.reflect.Method;importjava.util.ArrayList;importjava.util.List;importcom.lowagie.text.Document;importcom.lowagie.text.DocumentException;importcom.lowagie.text.Element;importcom.lowagie.text.Font;importcom.lowagie.text.PageSize;importcom.lowagie.text.Phrase;importcom.lowagie.text.pdf.BaseFont;importcom.lowagie.text.pdf.PdfPCell;importcom.lowagie.text.pdf.PdfPTable;importcom.lowagie.text.pdf.PdfWriter;importcom.zcr.until.GenerateFileName;importcom.zcr.until.GetFilePlace;importcom.zcr.until.User;/*** 生成pdf

*@authorzcr

**/

public classCreatePdf

{

Document document= new Document();//建立一个Document对象

private static Font headfont;//设置字体大小

private static Font keyfont;//设置字体大小

private static Font textfont;//设置字体大小

static{//中文格式

BaseFont bfChinese;try{//设置中文显示

bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);

headfont= new Font(bfChinese, 10, Font.BOLD);//设置字体大小

keyfont = new Font(bfChinese, 8, Font.BOLD);//设置字体大小

textfont = new Font(bfChinese, 8, Font.NORMAL);//设置字体大小

}catch(Exception e)

{

e.printStackTrace();

}

}/*** 文成文件

*@paramfile 待生成的文件名*/

publicCreatePdf(File file)

{

document.setPageSize(PageSize.A4);//设置页面大小

try{

PdfWriter.getInstance(document,newFileOutputStream(file));

document.open();

}catch(Exception e)

{

e.printStackTrace();

}

}publicCreatePdf()

{

}public voidinitFile(File file)

{

document.setPageSize(PageSize.A4);//设置页面大小

try{

PdfWriter.getInstance(document,newFileOutputStream(file));

document.open();

}catch(Exception e)

{

e.printStackTrace();

}

}int maxWidth = 520;/*** 为表格添加一个内容

*@paramvalue 值

*@paramfont 字体

*@paramalign 对齐方式

*@return添加的文本框*/

public PdfPCell createCell(String value, Font font, intalign)

{

PdfPCell cell= newPdfPCell();

cell.setVerticalAlignment(Element.ALIGN_MIDDLE);

cell.setHorizontalAlignment(align);

cell.setPhrase(newPhrase(value, font));returncell;

}/*** 为表格添加一个内容

*@paramvalue 值

*@paramfont 字体

*@return添加的文本框*/

publicPdfPCell createCell(String value, Font font)

{

PdfPCell cell= newPdfPCell();

cell.setVerticalAlignment(Element.ALIGN_MIDDLE);

cell.setHorizontalAlignment(Element.ALIGN_CENTER);

cell.setPhrase(newPhrase(value, font));returncell;

}/*** 为表格添加一个内容

*@paramvalue 值

*@paramfont 字体

*@paramalign 对齐方式

*@paramcolspan 占多少列

*@return添加的文本框*/

public PdfPCell createCell(String value, Font font, int align, intcolspan)

{

PdfPCell cell= newPdfPCell();

cell.setVerticalAlignment(Element.ALIGN_MIDDLE);

cell.setHorizontalAlignment(align);

cell.setColspan(colspan);

cell.setPhrase(newPhrase(value, font));returncell;

}/*** 为表格添加一个内容

*@paramvalue 值

*@paramfont 字体

*@paramalign 对齐方式

*@paramcolspan 占多少列

*@paramboderFlag 是否有有边框

*@return添加的文本框*/

public PdfPCell createCell(String value, Font font, int align, intcolspan,booleanboderFlag)

{

PdfPCell cell= newPdfPCell();

cell.setVerticalAlignment(Element.ALIGN_MIDDLE);

cell.setHorizontalAlignment(align);

cell.setColspan(colspan);

cell.setPhrase(newPhrase(value, font));

cell.setPadding(3.0f);if (!boderFlag)

{

cell.setBorder(0);

cell.setPaddingTop(15.0f);

cell.setPaddingBottom(8.0f);

}returncell;

}/*** 创建一个表格对象

*@paramcolNumber 表格的列数

*@return生成的表格对象*/

public PdfPTable createTable(intcolNumber)

{

PdfPTable table= newPdfPTable(colNumber);try{

table.setTotalWidth(maxWidth);

table.setLockedWidth(true);

table.setHorizontalAlignment(Element.ALIGN_CENTER);

table.getDefaultCell().setBorder(1);

}catch(Exception e)

{

e.printStackTrace();

}returntable;

}public PdfPTable createTable(float[] widths)

{

PdfPTable table= newPdfPTable(widths);try{

table.setTotalWidth(maxWidth);

table.setLockedWidth(true);

table.setHorizontalAlignment(Element.ALIGN_CENTER);

table.getDefaultCell().setBorder(1);

}catch(Exception e)

{

e.printStackTrace();

}returntable;

}publicPdfPTable createBlankTable()

{

PdfPTable table= new PdfPTable(1);

table.getDefaultCell().setBorder(0);

table.addCell(createCell("", keyfont));

table.setSpacingAfter(20.0f);

table.setSpacingBefore(20.0f);returntable;

}public void generatePDF(String [] head,List list,intcolNum)

{

Class classType= list.get(0).getClass();//创建一个只有5列的表格

PdfPTable table =createTable(colNum);//添加备注,靠左,不显示边框

table.addCell(createCell("APP信息列表:", keyfont, Element.ALIGN_LEFT, colNum,false));//设置表头

for(int i = 0 ; i < colNum ; i++)

{

table.addCell(createCell(head[i], keyfont, Element.ALIGN_CENTER));

}if(null != list && list.size() > 0)

{int size =list.size();for(int i = 0 ; i < size ; i++)

{

T t=list.get(i);for(int j = 0 ; j < colNum ; j ++)

{//获得首字母

String firstLetter = head[j].substring(0,1).toUpperCase();//获得get方法,getName,getAge等

String getMethodName = "get" + firstLetter + head[j].substring(1);

Method method;try{//通过反射获得相应的get方法,用于获得相应的属性值

method = classType.getMethod(getMethodName, newClass[]{});try{

System.out.print(getMethodName+":" + method.invoke(t, new Class[]{}) +",");//添加数据

table.addCell(createCell(method.invoke(t, newClass[]{}).toString(), textfont));

}catch(IllegalArgumentException e)

{

e.printStackTrace();

}catch(IllegalAccessException e)

{

e.printStackTrace();

}catch(InvocationTargetException e)

{

e.printStackTrace();

}

}catch(SecurityException e)

{

e.printStackTrace();

}catch(NoSuchMethodException e)

{

e.printStackTrace();

}

}

System.out.println("");

}

}try{//将表格添加到文档中

document.add(table);

}catch(DocumentException e)

{

e.printStackTrace();

}//关闭流

document.close();

}/*** 提供外界调用的接口,生成以head为表头,list为数据的pdf

*@paramhead //数据表头

*@paramlist //数据

*@return//excel所在的路径*/

public String generatePDFs(String [] head,Listlist)

{final String FilePath = "pdfPath";

String saveFilePathAndName= "";//获得存储的根目录

String savePath = newGetFilePlace().getFileDirFromProperties(FilePath);//获得当天存储的路径,不存在则生成当天的文件夹

String realSavePath = newGenerateFold().getFold(savePath);

saveFilePathAndName= new GenerateFileName().generateFileName(realSavePath,"pdf");

File file= newFile(saveFilePathAndName);try{

file.createNewFile();

}catch(IOException e1)

{//TODO Auto-generated catch block

e1.printStackTrace();

}

initFile(file);try{

file.createNewFile();//生成一个pdf文件

}catch(IOException e)

{//TODO Auto-generated catch block

e.printStackTrace();

}newCreatePdf(file).generatePDF(head,list,head.length);returnsaveFilePathAndName;

}}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值