我的Java开发学习之旅------>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.关闭输出流

代码如下:
Java代码 收藏代码
  1. packagecom.hank.pdfhtml;
  2. /**
  3. *@authorHank
  4. *2009-12-30
  5. */
  6. importjava.io.File;
  7. importjava.io.FileNotFoundException;
  8. importjava.io.FileOutputStream;
  9. importjava.io.IOException;
  10. importjava.io.OutputStream;
  11. importjava.net.MalformedURLException;
  12. importjava.net.URL;
  13. importorg.xhtmlrenderer.pdf.ITextFontResolver;
  14. importorg.xhtmlrenderer.pdf.ITextRenderer;
  15. importcom.lowagie.text.DocumentException;
  16. importcom.lowagie.text.pdf.BaseFont;
  17. publicclassHtml2Pdf{
  18. privatestaticvoidaddFonts()throwsDocumentException,IOException{
  19. if(null==renderer){
  20. return;
  21. }
  22. //添加所需的字体
  23. ITextFontResolverfontResolver=renderer.getFontResolver();
  24. URLfontsUrl=Html2Pdf.class.getResource("/com/hank/fonts/");//该文件夹下放所需字体文件
  25. Filefonts=newFile(fontsUrl.getPath());
  26. File[]fileList=fonts.listFiles();
  27. for(inti=0;i<fileList.length;i++){
  28. fontResolver.addFont(fileList[i].getAbsolutePath(),BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);
  29. }
  30. }
  31. publicstaticStringprint2Pdf(StringinputFile){
  32. Stringurl=null;
  33. try{
  34. url=newFile(inputFile).toURI().toURL().toString();
  35. }catch(MalformedURLExceptione){
  36. returnnull;
  37. }
  38. StringoutputFile=inputFile.substring(0,inputFile.lastIndexOf("."))+".pdf";
  39. OutputStreamos=null;
  40. try{
  41. os=newFileOutputStream(outputFile);
  42. }catch(FileNotFoundExceptione){
  43. returnnull;
  44. }
  45. ITextRendererrenderer=null;
  46. try{
  47. renderer=newITextRenderer();
  48. }catch(Exceptione){
  49. returnnull;
  50. }
  51. renderer.setDocument(url);
  52. //解决图片的相对路径问题
  53. renderer.getSharedContext().setBaseURL("file:/D:/working/HtmlTemp/image/");
  54. renderer.layout();
  55. try{
  56. renderer.createPDF(os);
  57. }catch(DocumentExceptione){
  58. returnnull;
  59. }
  60. try{
  61. os.close();
  62. }catch(IOExceptione){
  63. returnnull;
  64. }
  65. returnoutputFile;
  66. }
  67. publicstaticvoidmain(Stringargs[]){
  68. StringinputFile="D:/working/HtmlTemp/test.html";//必须符合W3C标准
  69. Html2Pdf.print2Pdf(inputFile);
  70. }
  71. }

你可能感兴趣的:(java开发)