java生成pdf方案总结

java生成pdf方案很多,常用的如下:

1. 利用jacob生成pdf:这种方法调用office的本地方法实现对pdf API的操作,只能在windows平台使用

2. 利用openoffice生成pdf:openoffice是开源软件且能在windows和linux平台下运行

3. itext + flying saucer生成pdf:itext和flying saucer都是免费开源的,且与平台无关,结合css和velocity技术,可以很好的实现。

我们重点介绍第三种方案。它实现的步骤是非常简单的:
1.新建一个ITextRenderer类
2.添加字体
3.设置ITextRenderer的源文档
4.调用layout()方法
5.调用createPdf()方法
6.关闭输出流

代码如下:
package com.hank.pdfhtml;

/**
 * @author Hank
 * 2009-12-30
 */

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.MalformedURLException;
import java.net.URL;

import org.xhtmlrenderer.pdf.ITextFontResolver;
import org.xhtmlrenderer.pdf.ITextRenderer;

import com.lowagie.text.DocumentException;
import com.lowagie.text.pdf.BaseFont;

public class Html2Pdf {
	private static void addFonts() throws DocumentException, IOException{
		if(null == renderer) {
			return;
		}
		
        // 添加所需的字体
        ITextFontResolver fontResolver = renderer.getFontResolver(); 

        URL fontsUrl = Html2Pdf.class.getResource("/com/hank/fonts/");//该文件夹下放所需字体文件
        File fonts = new File(fontsUrl.getPath());
        File[] fileList = fonts.listFiles();
        for(int i=0; i < fileList.length; i++){
        	fontResolver.addFont(fileList[i].getAbsolutePath(), BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
        }
        
	}
	
	public static String print2Pdf(String inputFile) {
        String url = null;
		try {
			url = new File(inputFile).toURI().toURL().toString();
		} catch (MalformedURLException e) {
			return null;
		}


		String outputFile = inputFile.substring(0, inputFile.lastIndexOf(".")) + ".pdf";

        OutputStream os = null;
		try {
			os = new FileOutputStream(outputFile);
		} catch (FileNotFoundException e) {
			
			return null;
		}

        ITextRenderer renderer = null;
		try {
			renderer = new ITextRenderer();
		} catch (Exception e) {
			return null;
		}
		
        renderer.setDocument(url);
        
        // 解决图片的相对路径问题
        renderer.getSharedContext().setBaseURL("file:/D:/working/HtmlTemp/image/");
        
        renderer.layout();
        try {
			renderer.createPDF(os);
		} catch (DocumentException e) {
			return null;
		}
        
        try {
			os.close();
		} catch (IOException e) {
			return null;
		}
        
        return outputFile;
	}

        public static void main(String args[]){
            String inputFile = "D:/working/HtmlTemp/test.html"; //必须符合W3C标准
            Html2Pdf.print2Pdf(inputFile);
        }
}



你可能感兴趣的:(java,linux,OS,velocity,Office)