wuhongyan008 发表于 2013-1-15 02:41:13

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.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);      }}
页: [1]
查看完整版本: java生成pdf方案总结