首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > PowerDesigner >

应用 flying saucer 来生成 PDF

2012-07-30 
使用 flying saucer来生成 PDF最近产品开发遇到一个比较棘手的问题,我们产品的PDF 生成这快是用Itext 来做

使用 flying saucer 来生成 PDF

最近产品开发遇到一个比较棘手的问题,我们产品的PDF 生成这快是用Itext 来做的,因为pdf layout比较复杂导致生成pdf的代码写的比较复杂,现在来了一个新的需求,许多新上线的国家想用自己的页面layout跟样式,这就要求我们pdf生成这块要给每个上线国家做扩展,但是我们没有用pdf template,导致layout的change 涉及到大量的代码要重写,而且每来一个新的国家这部分代码就要重写一下。 从做产品的角度,这样的change 显然是不能接受的,于是就想是不是有跟好的方法可以解决这样的问题,现在网上有很多通过解析html 生成pdf的框架,这就是我要找的方向,经过一段时间研究发现有一个很有用的pdf 生成框架flying saucer ,它不光可以可以解析html/xhtml 生成pdf,就连这些页面使用的css也可以解析并在pdf中反映出来,这不就是我想要的吗?pdf生成逻辑完全被剥离开来,开发者完全不用操心pdf是怎么生成的,我们只要给每个要生成的pdf做一个html/xhtml的模板并apply相应的样式css(按照business 要求的layout 跟样式) 完全不用写任何的pdf 生成代码,就能够给不同的国家生成不同的pdf.

以下是一段实例代码

?看下它的pdf生成代码

HttpServletResponse response = (HttpServletResponse)resp;String renderType = request.getParameter("RenderOutputType");...StringReader contentReader = new StringReader(capContent.getContent());InputSource source = new InputSource(contentReader);Document xhtmlContent = documentBuilder.parse(source);...if(renderType.equals("pdf")){   ITextRenderer renderer = new ITextRenderer();   Renderer.setDocument(xhtmlContent,"");   renderer.layout();   response.setContentType("application/pdf");   OutputStream browserStream = response.getOutputStream();   renderer.createPDF(browserStream);   return;}

?大家可以看到,如果request 中的renderType等于pdf的话,我们就会调用itext跟flying saucer 的API把response 生成一个pdf.

大家可以看到上面这段生成pdf的逻辑非常简单, 是真正的write once , apply every where。 来再多的需求,我们只要create 相应的template(with CSS) 其余的生成逻辑全都一样。

希望这篇文章对跟我遇到相同问题的人有所帮助。

热点排行