主要代码参考了 这篇帖子http://www.iteye.com/topic/509417 ,写的非常不错。尤其看他的的解决问题的思路特别受启发,我在看这篇帖子之前也看到了flying-saucer ,并且下载了jar包做了例子,但是没有成功我就匆忙放弃了,又踏上了寻找的路途。 以后要记得看 要找的项目的介绍,如果合适,就去看文档,文档里面一般是非常全面的。
首先itext就不用说了,自己去google。 直接上saucer的介绍:
Flying Saucer takes XML or XHTML and applies CSS 2.1-compliant stylesheets to it, in order to render to PDF (via iText), images, and on-screen using Swing or SWT. The library implements (basically) the entirety of CSS 2.1 and aims to be fully compliant with the W3C specification; it includes a small handful of CSS 3 features.
意思: saucer支持 xml和xhtml css2.1,并且可以生成pdf,图片,这个貌似是 java可视化界面。
这个库实现了 全部css2.1并致力于 符合w3c标准,同时包含一些css3的属性,如 @page,可以用来定制 pdf的宽高和margin。
又从下面看到,它没有支持传统的html,只支持xhmtl和css; 它支持xhtml+css要弱于 xml+css。
看来还可以生成image,这也是个不错的东东。
我第一次实验saucer时 就用了 html,悲剧啊 。
还有它对中文支持情况,如果你打算在html中使用中文,就必须在 css中全局定义 字体。并在 代码中 添加该字体文件。否则是不能显示中文的。
上代码
public static void main(String[] args) throws Exception { String inputFile = "index11.html"; System.out.println(new File(inputFile).getAbsolutePath()); String url = new File(inputFile).toURI().toURL().toString(); String outputFile = "firstdoc.pdf"; OutputStream os = new FileOutputStream(outputFile); ITextRenderer renderer = new ITextRenderer(); renderer.setDocument(url); // 解决中文支持问题 ITextFontResolver fontResolver = renderer.getFontResolver(); fontResolver.addFont("C:/Windows/Fonts/SIMSUN.TTC ", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); // 你可以把该文件放到项目中,这样打包后就不用依赖机器环境了 // 我这里指定为sinsun 是因为我在css中指定 了字体为 宋体 // 解决图片的相对路径问题 (这里我发现不用指定 ,图片显示也会正常,只是图片必须要指定为相对路径) // renderer.getSharedContext().setBaseURL("file:/D:/grails-work/html2pdf/"); renderer.layout(); renderer.createPDF(os); os.close(); }
rar中有html和css图片,还有生成的pdf,也有需要的jar,可以自行测试。仅在此记录一下,我也正在看 文档,有了新的想法,再加