- 浏览: 37366 次
- 性别:
- 来自: 杭州
最新评论
-
zhunengfei:
唉, 没有源码,不知道 有没有用
利用poi,iText导出excel,pdf -
xinxi_falcons:
你好,你这边有一个 fontSrc.properties这个配 ...
利用poi,iText导出excel,pdf -
xinxi_falcons:
你好,你这边有一个
利用poi,iText导出excel,pdf -
galo:
kakaluyi 写道PS:楼主如果抱着不分享的精神上论坛,估 ...
迷你音乐下载器V1.0拍砖版 -
galo:
kakaluyi 写道PS:楼主如果抱着不分享的精神上论坛,估 ...
迷你音乐下载器V1.0拍砖版
先声明下,本人对poi,iText没有深入研究,只因网上实例很多,所以照葫芦画瓢,再加上自己进一步的重构,才有了下面的模型.只希望能帮助到大家。
代码写了很长时间了,现在也忘记结构了,大概应该能够帮助到需要的朋友.
//创建ExcelEntity import java.io.OutputStream; import java.util.List; public class ExcelEntity<T> { private String title = "报表标题"; private String[] headers; private List<T> dataset; private OutputStream os; private boolean hasComment = false; private String commentContent = "report"; private String commentAuthor = "Galo"; public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String[] getHeaders() { return headers; } public void setHeaders(String[] headers) { this.headers = headers; } public List<T> getDataset() { return dataset; } public void setDataset(List<T> dataset) { this.dataset = dataset; } public OutputStream getOs() { return os; } public void setOs(OutputStream os) { this.os = os; } public boolean isHasComment() { return hasComment; } public void setHasComment(boolean hasComment) { this.hasComment = hasComment; } public String getCommentContent() { return commentContent; } public void setCommentContent(String commentContent) { this.commentContent = commentContent; } public String getCommentAuthor() { return commentAuthor; } public void setCommentAuthor(String commentAuthor) { this.commentAuthor = commentAuthor; } } //创建PdfEntity import java.io.OutputStream; import java.util.List; public class PdfEntity<T> { private String title; //标题 private float margin_bottom = 50; //下边距 private float margin_left = 50; private float margin_top = 50; private float margin_right = 50; private String pageSize = "A4"; //纸张大小 private String fileName = "E://report.pdf"; //文件名称 private String author = "Galo"; //作者 private String subject = "Zhang"; //子项 private boolean creationDate = true; //创建时间 private String creator = "Galo"; //创建者 private String keywords = "报表"; //关键字 private String pageHeader; //页眉 private String pageFooter; //页脚 private String[] headers; //表头 private List<T> dataset; //数据集 private OutputStream os; //文件输出流 public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public float getMargin_bottom() { return margin_bottom; } public void setMargin_bottom(float margin_bottom) { this.margin_bottom = margin_bottom; } public float getMargin_left() { return margin_left; } public void setMargin_left(float margin_left) { this.margin_left = margin_left; } public float getMargin_top() { return margin_top; } public void setMargin_top(float margin_top) { this.margin_top = margin_top; } public float getMargin_right() { return margin_right; } public void setMargin_right(float margin_right) { this.margin_right = margin_right; } public String getPageSize() { return pageSize; } public void setPageSize(String pageSize) { this.pageSize = pageSize; } public String getFileName() { return fileName; } public void setFileName(String fileName) { this.fileName = fileName; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public String getSubject() { return subject; } public void setSubject(String subject) { this.subject = subject; } public boolean isCreationDate() { return creationDate; } public void setCreationDate(boolean creationDate) { this.creationDate = creationDate; } public String getCreator() { return creator; } public void setCreator(String creator) { this.creator = creator; } public String getKeywords() { return keywords; } public void setKeywords(String keywords) { this.keywords = keywords; } public String getPageHeader() { return pageHeader; } public void setPageHeader(String pageHeader) { this.pageHeader = pageHeader; } public String getPageFooter() { return pageFooter; } public void setPageFooter(String pageFooter) { this.pageFooter = pageFooter; } public String[] getHeaders() { return headers; } public void setHeaders(String[] headers) { this.headers = headers; } public List<T> getDataset() { return dataset; } public void setDataset(List<T> dataset) { this.dataset = dataset; } public OutputStream getOs() { return os; } public void setOs(OutputStream os) { this.os = os; } } //下面是具体导出方法 import java.awt.Color; import java.io.IOException; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.Collection; import java.util.Iterator; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFClientAnchor; import org.apache.poi.hssf.usermodel.HSSFComment; import org.apache.poi.hssf.usermodel.HSSFFont; import org.apache.poi.hssf.usermodel.HSSFPatriarch; import org.apache.poi.hssf.usermodel.HSSFRichTextString; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.util.HSSFColor; import com.jd.report.entity.ExcelEntity; import com.jd.report.entity.PdfEntity; import com.jd.report.util.PdfParagraph; import com.lowagie.text.Cell; import com.lowagie.text.Document; import com.lowagie.text.DocumentException; import com.lowagie.text.Element; import com.lowagie.text.HeaderFooter; import com.lowagie.text.PageSize; import com.lowagie.text.Rectangle; import com.lowagie.text.pdf.PdfPCell; import com.lowagie.text.pdf.PdfPTable; import com.lowagie.text.pdf.PdfWriter; public class ExportUtils<T> { @SuppressWarnings("unchecked") public void exportPdf(PdfEntity<T> pdfEntity){ String pageSize = pdfEntity.getPageSize(); Rectangle rectangle = new Rectangle(getPdfPageSize(pageSize)); Document document = new Document(rectangle,pdfEntity.getMargin_bottom(),pdfEntity.getMargin_left(),pdfEntity.getMargin_right(),pdfEntity.getMargin_top()); try { PdfWriter.getInstance(document, pdfEntity.getOs()); //基本配置信息 document.addTitle(pdfEntity.getTitle()); document.addAuthor(pdfEntity.getAuthor()); if(pdfEntity.isCreationDate()){ document.addCreationDate(); } document.addCreator(pdfEntity.getCreator()); document.addKeywords(pdfEntity.getKeywords()); document.addSubject(pdfEntity.getSubject()); //定义页眉和页脚 String pageHeader = pdfEntity.getPageHeader(); String pageFooter = pdfEntity.getPageFooter(); HeaderFooter header = null; HeaderFooter footer = null; if(pageHeader != null){ header = new HeaderFooter(new PdfParagraph(pageHeader,14,true),false); header.setBorderWidth(0); header.setAlignment(Element.ALIGN_CENTER); } if(pageFooter != null){ footer = new HeaderFooter(new PdfParagraph(pageFooter,14,true),false); footer.setBorderWidth(0); footer.setAlignment(Element.ALIGN_CENTER); } document.setHeader(header); document.setFooter(footer); //打开pdf文档 document.open(); String[] headers = pdfEntity.getHeaders(); //创建多少列的表格 PdfPTable table = new PdfPTable(headers.length); table.setHorizontalAlignment(Element.ALIGN_CENTER); table.setWidthPercentage(16 * headers.length); //产生表格栏 PdfPCell cell = null; for (int i = 0; i < headers.length; i++) { cell = new PdfPCell(new PdfParagraph(headers[i], 14,true)); cell.setHorizontalAlignment(Cell.ALIGN_CENTER); cell.setVerticalAlignment(Cell.ALIGN_MIDDLE); cell.setBackgroundColor(Color.cyan); cell.setBorderColor(Color.green); table.addCell(cell); } //装载数据行 Collection<T> dataset = pdfEntity.getDataset(); Iterator<T> it = dataset.iterator(); while(it.hasNext()){ T t = it.next(); Class tClass = t.getClass(); Field[] fields = tClass.getDeclaredFields(); for (int i = 0; i < fields.length; i++) { String fieldName = fields[i].getName(); String getMethodName = "get" + fieldName.substring(0,1).toUpperCase() + fieldName.substring(1); Method getMethod = tClass.getMethod(getMethodName, new Class[]{}); Object value = getMethod.invoke(t, new Object[]{}); value = value == null ? "" : value; if(value != null){ cell = new PdfPCell(new PdfParagraph(value.toString(),12,false)); cell.setHorizontalAlignment(Cell.ALIGN_CENTER); cell.setVerticalAlignment(Cell.ALIGN_MIDDLE); cell.setBorderColor(Color.green); table.addCell(cell); } } } document.add(table); document.close(); } catch (DocumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @SuppressWarnings("unchecked") public void exportExcel(ExcelEntity excelEntity){ String title = excelEntity.getTitle(); HSSFWorkbook workbook = new HSSFWorkbook(); //生成一个表格 HSSFSheet sheet = workbook.createSheet(title); //设置默认列宽度为15个字节 sheet.setDefaultColumnWidth(15); //生成一个标题样式 HSSFCellStyle style = workbook.createCellStyle(); //设置居中 style.setAlignment(HSSFCellStyle.ALIGN_CENTER); //设置填充前景色和背景色 style.setFillForegroundColor(HSSFColor.YELLOW.index); style.setFillBackgroundColor(HSSFColor.WHITE.index); style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); //设置线条宽度 style.setBorderBottom(HSSFCellStyle.BORDER_THIN); style.setBorderLeft(HSSFCellStyle.BORDER_THIN); style.setBorderRight(HSSFCellStyle.BORDER_THIN); style.setBorderTop(HSSFCellStyle.BORDER_THIN); //生成一个字体 HSSFFont font = workbook.createFont(); font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); font.setColor(HSSFColor.VIOLET.index); font.setFontHeightInPoints((short)12); //字体应用到样式 style.setFont(font); //生成主体样式 HSSFCellStyle bodyStyle = workbook.createCellStyle(); //设置居中 bodyStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); //设置填充前景色和背景色 bodyStyle.setFillForegroundColor(HSSFColor.WHITE.index); bodyStyle.setFillBackgroundColor(HSSFColor.WHITE.index); bodyStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); //设置线条宽度 bodyStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); bodyStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); bodyStyle.setBorderRight(HSSFCellStyle.BORDER_THIN); bodyStyle.setBorderTop(HSSFCellStyle.BORDER_THIN); //生成一个字体 HSSFFont bodyFont = workbook.createFont(); bodyFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); bodyFont.setColor(HSSFColor.VIOLET.index); bodyFont.setFontHeightInPoints((short)12); //字体应用到样式 bodyStyle.setFont(bodyFont); HSSFPatriarch patriarch = sheet.createDrawingPatriarch(); HSSFComment comment = patriarch.createComment(new HSSFClientAnchor(0,0,0,0,(short)4,2,(short)6,5)); comment.setString(new HSSFRichTextString(excelEntity.getCommentContent())); comment.setAuthor(excelEntity.getCommentAuthor()); //产生标题行 String[] headers = excelEntity.getHeaders(); int index = 0; HSSFRow row = sheet.createRow(index); HSSFCell cell = null; for (short i = 0; i < headers.length; i++) { cell = row.createCell(i); cell.setCellStyle(style); HSSFRichTextString text = new HSSFRichTextString(headers[i]); cell.setCellValue(text); } //遍历集合,产生数据行 Collection<T> dataset = excelEntity.getDataset(); Iterator<T> it = dataset.iterator(); while(it.hasNext()){ index++; row = sheet.createRow(index); T t = it.next(); Class tClass = t.getClass(); Field[] fields = tClass.getDeclaredFields(); for (int i = 0; i < fields.length; i++) { cell = row.createCell(i); cell.setCellStyle(style); String fieldName = fields[i].getName(); String getMethodName = "get" + fieldName.substring(0,1).toUpperCase() + fieldName.substring(1); try { Method getMethod = tClass.getMethod(getMethodName, new Class[]{}); Object value = getMethod.invoke(t, new Object[]{}); value = value == null ? "" : value; if(value != null){ HSSFRichTextString textString = new HSSFRichTextString(value.toString()); cell.setCellValue(textString); cell.setCellStyle(bodyStyle); } } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } try { //写出excel workbook.write(excelEntity.getOs()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void exportWord(){ } public Rectangle getPdfPageSize(String pageSize){ Rectangle pSize = null; if("A4".equals(pageSize)){ pSize = PageSize.A4; }else if("A3".equals(pageSize)){ pSize = PageSize.A3; }else if("A2".equals(pageSize)){ pSize = PageSize.A2; }else if("A1".equals(pageSize)){ pSize = PageSize.A1; }else{ pSize = PageSize.A4; } return pSize; } } //对于pdf中文乱码,有如下辅助类 import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util.Properties; import com.lowagie.text.BadElementException; import com.lowagie.text.Cell; import com.lowagie.text.Chunk; import com.lowagie.text.DocumentException; import com.lowagie.text.Font; import com.lowagie.text.Paragraph; import com.lowagie.text.Phrase; import com.lowagie.text.pdf.BaseFont; public class PdfParagraph extends Paragraph { private static final long serialVersionUID = -244970043180837974L; private static Properties pro ; private static InputStream is ; static{ try { is = PdfParagraph.class.getClassLoader().getResourceAsStream("fontSrc.properties"); pro = new Properties(); pro.load(is); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ try { is.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public static String getPlan(String source){ return pro.getProperty(source); } public PdfParagraph(String content) { super(content, getChineseFont(12, false)); } public PdfParagraph(String content, int fontSize, boolean isBold) { super(content, getChineseFont(fontSize, isBold)); } // 设置字体-返回中文字体 protected static Font getChineseFont(int nfontsize, boolean isBold) { BaseFont bfChinese; Font fontChinese = null; try { bfChinese = BaseFont.createFont(getPlan("fontSrc") + ":\\windows\\fonts\\simsun.ttc,1",BaseFont.IDENTITY_H, BaseFont.EMBEDDED); if (isBold) { fontChinese = new Font(bfChinese, nfontsize, Font.BOLD); } else { fontChinese = new Font(bfChinese, nfontsize, Font.NORMAL); } } catch (DocumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return fontChinese; } // 转化中文 protected Cell ChangeCell(String str, int nfontsize, boolean isBold) throws IOException, BadElementException, DocumentException { Phrase ph = ChangeChinese(str, nfontsize, isBold); Cell cell = new Cell(ph); // cell.setBorderWidth(3); return cell; } // 转化中文 protected Chunk ChangeChunk(String str, int nfontsize, boolean isBold) throws IOException, BadElementException, DocumentException { Font FontChinese = getChineseFont(nfontsize, isBold); Chunk chunk = new Chunk(str, FontChinese); return chunk; } // 转化中文 protected Phrase ChangeChinese(String str, int nfontsize, boolean isBold) throws IOException, BadElementException, DocumentException { Font FontChinese = getChineseFont(nfontsize, isBold); Phrase ph = new Phrase(str, FontChinese); return ph; } } }
代码写了很长时间了,现在也忘记结构了,大概应该能够帮助到需要的朋友.
评论
3 楼
zhunengfei
2015-04-11
唉, 没有源码,不知道 有没有用
2 楼
xinxi_falcons
2014-02-26
你好,你这边有一个
fontSrc.properties
这个配置文件的里面的内容是什么 ?
这个配置文件 配置 是为了读系统widows 下的字体 吗 ?
能否回答下,谢谢!
fontSrc.properties
这个配置文件的里面的内容是什么 ?
这个配置文件 配置 是为了读系统widows 下的字体 吗 ?
能否回答下,谢谢!
1 楼
xinxi_falcons
2014-02-26
你好,你这边有一个
相关推荐
在IT行业中,转换数据格式是常见的任务之一,例如将Excel表格转换为PDF文档。...总之,通过Apache POI和iText,开发者可以轻松地在Java环境中实现Excel到PDF的转换,满足不同场景下的数据展示需求。
总结来说,使用ITEXT导出Excel虽然不是其主要功能,但通过创建模拟Excel结构的PDF文档并转换,可以实现这一目标。不过,这种方式可能不如直接使用Apache POI等专门的Excel处理库那么高效和灵活。在实际开发中,应...
本文将深入探讨如何使用ITEXT库导出PDF和Word,以及利用Apache POI库导出Excel报表文件。 首先,让我们来了解ITEXT库。ITEXT是一个开源Java库,专门用于创建和修改PDF文档。使用ITEXT,你可以方便地生成包含文本、...
TestForExcel2PDF测试类可能包含这样的逻辑:首先,加载Excel文件,然后使用itextpdf的API将工作表的内容转换为PDF页面,最后保存为PDF文件。这个过程中可能涉及到对Excel表格的样式、字体、颜色等元素的保持,以...
同样,导出Excel功能可以通过创建一个新的工作簿,填充数据,然后设置样式和写入输出流来实现。以下是一个简单的导出示例: ```java @GetMapping("exportList") public void exportList(HttpServletResponse ...
在这个"Struts2+IText动态导出PDF示例源码"项目中,开发者利用这两者结合,实现了在Web应用中动态生成PDF文件的功能。这在报表生成、合同制作、证书打印等场景中非常实用。 首先,Struts2作为控制器层框架,负责...
虽然POI本身并不直接支持生成PDF,但可以通过结合其他库(如iText或Apache FOP)将创建的Word或Excel文档转换为PDF格式。这通常涉及到先使用POI创建文档,然后通过第三方库将其导出为PDF。 5. **处理图像(如.jpg...
- **easypoi-annotation**: 注解包,用于定义导出Excel时的数据模型和字段。 - **easypoi-base**: 导入导出包,是核心功能所在,它提供了数据和Excel文件互相转换的核心实现。 - **easypoi-web**: 这个包提供了与...
Apache POI是一个流行的开源Java API,主要用于读取和写入Microsoft Office格式的文件,如Word(.doc, .docx)、Excel(.xls, .xlsx)等。这里提到的“生成pdf等”,意味着除了PDF之外,可能还包括了HTML、图片或...
本文将详细介绍如何使用Apache POI库处理Excel数据,以及使用iText库将这些数据导出为PDF格式。Apache POI是Java中处理Microsoft Office格式文件(如Excel)的库,而iText则是用于创建和编辑PDF文档的库。 首先,...
Apache POI提供对Word文档的读取,Docx4j负责转换为PDF,而iText或PDFBox则用于格式优化。这种转换方法虽然涉及的组件较多,但能确保转换的准确性和灵活性,满足各种项目需求。在实际使用中,一定要注意依赖库的版本...
在Java编程中,导出Excel、Word和PDF是常见的数据呈现和报告生成需求。这些文件格式广泛用于数据存储、报表生成、文档分享等场景。以下将详细介绍如何使用Java实现这三种文件类型的导出。 首先,让我们关注Excel的...
本教程主要探讨如何利用HTML模板和iTextPDF库来创建PDF文件,同时也会提及Apache POI和Freemarker在导出Excel方面的应用,以及如何在PDF上添加文字水印。 首先,iTextPDF是一个强大的Java库,专门用于生成和修改PDF...
在Java开发中,导出Excel和PDF报表是常见的需求,特别是在数据分析、数据展示以及报告生成等场景下。本文将深入探讨如何使用Java实现这一功能,包括处理Excel和PDF的库、基本操作以及优化技巧。 首先,Java中常用的...
例如,你可以先使用数据库查询获取数据,然后利用Apache POI或JExcelApi生成Excel报表,接着使用iText将数据转化为PDF或Word格式,便于分发和打印。这些工具和库是IT专业人员日常工作中不可或缺的部分,它们极大地...
在Java编程中,根据JavaBean反射来实现数据的导出,如Excel、XML、PDF和CSV格式,是一种常见的数据处理技术。JavaBean是Java中的一种设计模式,它提供了一种标准的方式来封装对象属性,便于数据操作。反射机制则是...
3. Word到PDF转换:利用iText或PDFBox等库将处理后的Word内容转换为PDF格式。 4. 错误排查和修复:针对生成PDF过程中可能出现的问题进行调试和优化。 理解并掌握这些技术,可以帮助开发者实现高效且灵活的文档自动...
1. **准备库**:在JSP中导出Excel,通常会用到Apache POI库。这是一个用于读写Microsoft Office格式文件的Java库,包括Excel。首先,需要将POI库添加到项目依赖中。 2. **创建Excel工作簿**:通过`HSSFWorkbook`类...
在 JSP 中导出 PDF 和 Excel JSP(Java Server Pages)是一种服务器端技术,用于生成动态网页。近年来,随着企业信息化的发展,报表生成和...使用 iText 可以生成 PDF 文件,而使用 Apache POI 可以生成 Excel 文件。
"报表导出excel word pdf html"这个主题涵盖了将数据导出为不同格式的技术,这些格式都是日常工作和交流中常用的文档类型。以下是关于这些格式以及如何在Java环境中实现导出的详细知识: 1. Excel:Microsoft Excel...