<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    中文JAVA技術平等自由協(xié)作創(chuàng)造

    Java專題文章博客和開源

    常用鏈接

    統(tǒng)計

    最新評論

    Java實現(xiàn)HTML頁面轉PDF解決方案

      首先,當然是找到能夠解析PDF的完美組件,百度和谷歌不約而同的告訴我們。IText是王道。而目前開源的組件中,Itext的確是一個First Choice,如果各位單純是做把圖片轉成PDF或者自己寫了Velocity或者FreeMarker模板生成了HTML是非常推薦直接用Itext來進行的。而如果,大家像我這樣已經有前人寫好了HTML頁面或者懶得寫FreeMarker模板的話。可以直接看下一段。

      由于他們已經寫好了HTML頁面,而且顯示已經很完美了。那我要做的就是能完美解析HTML+CSS的PDF生成工具。這時候flying-saucer進入了我的選擇范圍中。

      這個工具托管在GoogleCode上面,作者做他們能夠做下面的工作:

      Flying Saucer takes XML or XHTML and applies CSS 2.1-compliant stylesheets to it, in order to render to PDF (via iText), images, and on-screen using Swing or SWT.

      不難看出工作原理,就是解析XML或者XHTML并且包括css樣式表,并且用Swing或者SWT的組件生成PDF的功能。這解決了頁面的顯示問題。IText自身的一個很嚴重的問題就是解析CSS有很大的問題。而這個解決了。下面就是用Flying Saucer來實現(xiàn)的代碼:

      public boolean convertHtmlToPdf(String inputFile, String outputFile)

      throws Exception {

      OutputStream os = new FileOutputStream(outputFile);

      ITextRenderer renderer = new ITextRenderer();

      String url = new File(inputFile)。toURI()。toURL()。toString();

      renderer.setDocument(url);

      // 解決中文支持問題

      ITextFontResolver fontResolver = renderer.getFontResolver();

      fontResolver.addFont("C:/Windows/Fonts/SIMSUN.TTC", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);

      //解決圖片的相對路徑問題

      renderer.getSharedContext()。setBaseURL("file:/D:/");

      renderer.layout();

      renderer.createPDF(os);

      os.flush();

      os.close();

      return true;

      }

      上面這段代碼是這樣的,輸入一個HTML地址URL = inputFile,輸入一個要輸出的地址,就可以在輸出的PDF地址中生成這個PDF.

      注意事項:

      1.輸入的HTML頁面必須是標準的XHTML頁面。頁面的頂上必須是這樣的格式:

      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ".org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

      <html xmlns=".org/1999/xhtml">

      并且HTML頁面的語法必須是非常嚴謹?shù)模袠撕灦急仨氶]合等等(由于flying-Saucer做了XML解析的工作,不嚴謹會報錯的。),這是對頁面的第一個要求。

      2.要用到圖片的地方寫相對路徑的形式,比如:

      <img src="a.jpg" alt="323" width="252" height="80" />

      而它的圖片位置則必須在Java代碼中指定。

      renderer.getSharedContext()。setBaseURL("file:/D:/");

      也有另一種方法就是直接在<img>標簽中寫絕對路徑。

      3.Flying-Saucer在解析tiff格式的圖片的時候會報錯。具體原因我還沒找到。希望大家能夠指點我。

      4.如果在頁面中有中文字體的話。必須在HTML代碼中的樣式中寫上某種字體的css,并且必須是用英文的,然后在Java代碼中寫上對應的文件位置。

      ITextFontResolver fontResolver = renderer.getFontResolver();

      fontResolver.addFont("C:/Windows/Fonts/SIMSUN.TTC", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);

      上面的方法是添加了宋體。也可以添加其他字體。

      以上就是解決方案托福答案

    posted on 2013-12-15 10:57 好不容易 閱讀(226) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發(fā)表評論。


    網站導航:
     
    PK10開獎 PK10開獎
    主站蜘蛛池模板: 亚洲AV第一成肉网| 亚洲一区二区三区在线网站| 亚洲高清中文字幕免费| 日韩免费观看一区| 亚洲成A人片777777| h视频免费高清在线观看| 国产成人精品免费视频大全五级| 91精品国产亚洲爽啪在线影院| a级毛片无码免费真人久久| 亚洲精品97久久中文字幕无码| 亚洲中文字幕一二三四区苍井空| 久久综合国产乱子伦精品免费| 亚洲中文久久精品无码| 免费人成网站永久| 亚洲国产成人乱码精品女人久久久不卡 | 亚洲色无码专区一区| 成人最新午夜免费视频| 亚洲爆乳无码专区www| 国产一级大片免费看| 美女被暴羞羞免费视频| 国产精品亚洲αv天堂无码| 成人特级毛片69免费观看| 亚洲国产香蕉人人爽成AV片久久| 无遮挡呻吟娇喘视频免费播放 | 亚洲AV无码不卡在线观看下载| 一个人看的www视频免费在线观看| 亚洲精品在线视频| 18禁成人网站免费观看 | 小说区亚洲自拍另类| 亚洲国产精品无码久久一区二区| 午夜精品免费在线观看| 亚洲av午夜精品无码专区| 国产精品免费_区二区三区观看| 国产精品免费久久久久久久久| 亚洲综合国产精品| 亚洲av日韩av欧v在线天堂| 日韩免费无码一区二区三区| 亚洲精品无码久久久久久| 国产亚洲av片在线观看播放| 无码日韩人妻av一区免费| baoyu777永久免费视频|