主要代码参考了 这篇帖子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,可以自行测试。仅在此记录一下,我也正在看 文档,有了新的想法,再加