您的位置:首页 > 编程语言 > Java开发

我的Java开发学习之旅------>java生成pdf方案

2013-03-07 00:57 344 查看
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.关闭输出流

代码如下:

Java代码  


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);  
        }  
}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐