注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

北漂的小羊

Java编程,开发者,程序员,软件开发,编程,代码。新浪微博号:IT国子监

 
 
 

日志

 
 
关于我

在这里是面向程序员的高品质IT技术学习社区,是程序员学习成长的地方。让我们更好地用技术改变世界。请关注新浪微博号: IT国子监(http://weibo.com/itguozijian)

网易考拉推荐

java解决html中导出pdf时中文、样式问题  

2012-11-26 17:48:15|  分类: JAVA |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

新浪微博:IT国子监(记得关注噢) http://weibo.com/itguozijian


对于java中如何从html中直接导出pdf,有很多的开源代码,这里个人用itext转。


依赖包:

    core-renderer-1.0.jar

core-renderer-R8pre1.jar

core-renderer.jar

iText-2.0.8.jar

jtidy-4aug2000r7-dev.jar

Tidy.jar

iTextAsian.jar

实例:

java代码的话就比较简单了。具体是先用Tidy将html转换为xhtml,将xhtml转换为其它各种格式的。虽然在转化到pdf时也是用的iText。代码如下:


  1. else if("Html2Pdf".equalsIgnoreCase(action)){  
  2.     exportPdfFile("http://localhost:8080/jsp/test.jsp");  
  3.     return null;  
  4. }  
  5.   
  6. // 导出pdf add by huangt 2012.6.1  
  7.     public File exportPdfFile(String urlStr) throws BaseException {  
  8.         // String outputFile = this.fileRoot + "/" +  
  9.         // ServiceConstants.DIR_PUBINFO_EXPORT + "/" + getFileName() + ".pdf";  
  10.         String outputFile = "d:/test3.pdf";  
  11.         OutputStream os;  
  12.         try {  
  13.             os = new FileOutputStream(outputFile);  
  14.   
  15.             ITextRenderer renderer = new ITextRenderer();  
  16.   
  17.             String str = getHtmlFile(urlStr);  
  18.             renderer.setDocumentFromString(str);  
  19.             ITextFontResolver fontResolver = renderer.getFontResolver();  
  20.               
  21.             fontResolver.addFont("C:/WINDOWS/Fonts/SimSun.ttc",BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);// 宋体字  
  22.             fontResolver.addFont("C:/WINDOWS/Fonts/Arial.ttf",BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);// 宋体字  
  23.             renderer.layout();  
  24.   
  25.             renderer.createPDF(os);  
  26.   
  27.             System.out.println("转换成功!");  
  28.             os.flush();  
  29.             os.close();  
  30.             return new File(outputFile);  
  31.         } catch (FileNotFoundException e) {  
  32.             // logger.error("不存在文件!" + e.getMessage());  
  33.             throw new BaseException(e);  
  34.         } catch (DocumentException e) {  
  35.             // logger.error("生成pdf时出错了!" + e.getMessage());  
  36.             throw new BaseException(e);  
  37.         } catch (IOException e) {  
  38.             // logger.error("pdf出错了!" + e.getMessage());  
  39.             throw new BaseException(e);  
  40.         }  
  41.   
  42.     }  
  43.   
  44.     // 读取页面内容 add by huangt 2012.6.1  
  45.     public String getHtmlFile(String urlStr) throws BaseException {  
  46.         URL url;  
  47.         try {  
  48.             if (urlStr.indexOf("?") != -1) {  
  49.                 urlStr = urlStr + "&locale="  
  50.                         + LocaleContextHolder.getLocale().toString();  
  51.             } else {  
  52.                 urlStr = urlStr + "?locale="  
  53.                         + LocaleContextHolder.getLocale().toString();  
  54.             }  
  55.             url = new URL(urlStr);  
  56.   
  57.             URLConnection uc = url.openConnection();  
  58.             InputStream is = uc.getInputStream();  
  59.               
  60.             Tidy tidy = new Tidy();  
  61.   
  62.             OutputStream os2 = new ByteArrayOutputStream();  
  63.             tidy.setXHTML(true); // 设定输出为xhtml(还可以输出为xml)  
  64.             tidy.setCharEncoding(Configuration.UTF8); // 设定编码以正常转换中文  
  65.             tidy.setTidyMark(false); // 不设置它会在输出的文件中给加条meta信息  
  66.             tidy.setXmlPi(true); // 让它加上<?xml version="1.0"?>  
  67.             tidy.setIndentContent(true); // 缩进,可以省略,只是让格式看起来漂亮一些  
  68.             tidy.parse(is, os2);  
  69.   
  70.             is.close();  
  71.   
  72.             // 解决乱码 --将转换后的输出流重新读取改变编码  
  73.             String temp;  
  74.             StringBuffer sb = new StringBuffer();  
  75.             BufferedReader in = new BufferedReader(new InputStreamReader(  
  76.                     new ByteArrayInputStream(  
  77.                             ((ByteArrayOutputStream) os2).toByteArray()),  
  78.                     "utf-8"));  
  79.             while ((temp = in.readLine()) != null) {  
  80.                 sb.append(temp);  
  81.             }  
  82.   
  83.             return sb.toString();  
  84.         } catch (IOException e) {  
  85.             // logger.error("读取客户端网页文本信息时出错了" + e.getMessage());  
  86.             throw new BaseException(e);  
  87.         }  
  88.   
  89.     }  


  评论这张
 
阅读(4075)| 评论(2)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016