html2pdf 实现思路和代码

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

你可能感兴趣的:(XHTML,css,OS,ITeye,grails)