利用Freemarker、itext和Flying saucer导出复杂表格的PDF格式文档
来源:互联网 发布:什么装机软件好 编辑:程序博客网 时间:2024/04/28 03:47
在现实的项目中,客户提出来要把表格导出成为PDF格式的,但是利用传统的IText来做的话,对于简单的表格还是可以的,对于复杂表格来说就很困难了,在原来导出Word和Excel的经验基础上,想到可不可以利用freemarker模版技术来导出文档,于是网上搜索了很多资料研究了一下!!
iText是一个生成PDF文档的开源java库,能够动态从XML或者数据库生成PDF,同时它具备PDF文档的绝大多数属性(比如加密……),支持java,C#等。
Flying Saucer(或者叫xhtmlrender project on java.net)是一个基于iText的开源java库,能够轻松的将html(带css2.1)生成pdf。
FreeMarker是一个模版引擎,一个基于文本的模板输出工具(生成任意的HTML表单代码)。
下面给一个链接,根据这个我写了一个基于response保存的例子:
http://git.oschina.net/lemonzone2010/doc-render
这是我action的例子:
/** * 导出PDF * @throws com.canglang.etc.pdf.freemarker.DocumentGeneratingException */public void test() throws com.canglang.etc.pdf.freemarker.DocumentGeneratingException {long start = System.currentTimeMillis();//TableModel tableModel = (TableModel) tableModelService.getEntityByID(TableModel.class, tmId);// 模板数据com.canglang.etc.pdf.pdf.OverseaVo overseaVo = new com.canglang.etc.pdf.pdf.OverseaVo();//放置模板数据Map<String, Object> variables = new HashMap<String, Object>();if(name.equals("中心机房检查表")){checkHostRoom = (CheckHostRoom) checkHostRoomService.getEntityByID(CheckHostRoom.class, id);variables = checkHostRoom.fillDataMap();}HttpServletResponse response = getResponse();response.setContentType("application/pdf"); response.setHeader("Pragma", "public");response.setHeader("Cache-Control", "max-age=30");try {response.setHeader("Content-disposition", "attachment; filename="+ new String(name.getBytes("gb2312"), "iso8859-1")+".pdf");} catch (UnsupportedEncodingException e) {// TODO Auto-generated catch blocke.printStackTrace();}// classpath 中模板路径String savepath = UploadUtil.generateSaveRealPath("CheckModel");String template = savepath+name+".html";HtmlGenerator htmlGenerator = new HtmlGenerator();try {String htmlContent = htmlGenerator.generate(template,variables);DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();Document doc = builder.parse(new ByteArrayInputStream(htmlContent.getBytes("UTF-8")));ServletOutputStream out = response.getOutputStream();ITextRenderer iTextRenderer = (ITextRenderer) ITextRendererObjectFactory.getObjectPool().borrowObject();try {iTextRenderer.setDocument(doc, null);iTextRenderer.layout();iTextRenderer.createPDF(out);} catch (Exception e) {ITextRendererObjectFactory.getObjectPool().invalidateObject(iTextRenderer);iTextRenderer = null;throw e;}} catch (Exception e) {e.printStackTrace();}}
0 0
- 利用Freemarker、itext和Flying saucer导出复杂表格的PDF格式文档
- flying-saucer + iText + Freemarker实现pdf的导出, 支持中文、css以及图片
- 利用Flying Saucer 和 iText 实现HTMl转PDF(java)
- 利用Flying Saucer 和 iText 实现生成PDF报表
- 利用Flying Saucer 和 java iText 实现HTMl转PDF
- iText和flying saucer结合生成pdf的技术
- iText和flying saucer结合生成pdf的技术
- iText和flying saucer结合生成pdf的技术
- iText和flying saucer结合生成pdf的技术
- itext+Flying Saucer生成pdf
- java-pdf-(flying-saucer)+freemarker 生成pdf 文档
- iText+Flying Saucer生成pdf文档,中文不显示和不自动换行问题
- 解决iText+flying saucer+freemark导出pdf不支持base64的解决办法
- 解决iText+flying saucer+freemark导出pdf不支持base64的解决办法
- freemarker+flying-saucer生成pdf
- itext+flying saucer 生成PDF不换行
- iText+Flying Saucer生成pdf文档二:给pdf添加页脚
- 基于flying-saucer和freemark实现HTML导出pdf
- 路径专题
- [机器学习]kNN算法python实现(实例:数字识别)
- iOS开发之如何创建PCH文件以及如何使用PCH文件
- Unix系统进程控制方法
- URL编码简介
- 利用Freemarker、itext和Flying saucer导出复杂表格的PDF格式文档
- setUserData的使用
- 线性表的链式表示
- Ubuntu 14.04 64bit上编译安装MonaServer并测试
- C/C++读写excel文件
- 数据库 - gdbm
- Discrete Mathematics and Its applications - 离散数学及其应用 读书笔记 ( 二 )
- 实现1位,4位,8位,24位BMP位图的互相转换的方法,32位转24位
- extern