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

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

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

    qileilove

    blog已經轉移至github,大家請訪問 http://qaseven.github.io/

    Java實現HTML頁面轉PDF解決方案

    首先,當然是找到能夠解析PDF的完美組件,百度谷歌不約而同的告訴我們。IText是王道。而目前開源的組件中,Itext的確是一個First Choice,如果各位單純是做把圖片轉成PDF或者自己寫了Velocity或者FreeMarker模板生成了HTML是非常推薦直接用Itext來進行的。而如果,大家像我這樣已經有前人寫好了HTML頁面或者懶得寫FreeMarker模板的話。可以直接看下一段。
      由于他們已經寫好了HTML頁面,而且顯示已經很完美了。那我要做的就是能完美解析HTML+CSS的PDF生成工具。這時候flying-saucer進入了我的選擇范圍中。
      http://code.google.com/p/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來實現的代碼:
    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" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      <html xmlns="http://www.w3.org/1999/xhtml">
      并且HTML頁面的語法必須是非常嚴謹的,所有標簽都必須閉合等等(由于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-17 09:12 順其自然EVO 閱讀(528) 評論(0)  編輯  收藏


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


    網站導航:
     
    <2013年12月>
    24252627282930
    1234567
    891011121314
    15161718192021
    22232425262728
    2930311234

    導航

    統計

    常用鏈接

    留言簿(55)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲精品天堂无码中文字幕| 亚洲AV日韩AV永久无码久久| 亚洲精品456人成在线| 国产曰批免费视频播放免费s| 亚洲毛片在线免费观看| 无人影院手机版在线观看免费| 亚洲午夜精品久久久久久app| 亚洲国产精品成人久久蜜臀| 一个人看www免费高清字幕| 国产亚洲av片在线观看18女人| 免费无码又爽又刺激网站直播| 久久亚洲精品人成综合网| 日本XXX黄区免费看| 美女视频黄视大全视频免费的| 中文字幕人成人乱码亚洲电影| 99爱在线观看免费完整版| 亚洲已满18点击进入在线观看| 日韩精品成人亚洲专区| 日韩精品无码一区二区三区免费 | 中国一级特黄的片子免费| 亚洲第一AV网站| 99久久免费精品国产72精品九九 | 国产伦精品一区二区三区免费下载 | 亚洲午夜福利在线视频| 亚洲一区在线观看视频| 亚洲日本中文字幕一区二区三区 | 一级一片免费视频播放| 亚洲乱人伦中文字幕无码| MM131亚洲国产美女久久| 国产jizzjizz免费看jizz| 最近最新的免费中文字幕| 久久99久久成人免费播放| 四虎亚洲精品高清在线观看| 亚洲一区二区三区久久| 亚洲18在线天美| 亚洲人成色在线观看| 亚洲国产成人久久综合| 亚洲AV永久无码天堂影院| 在线a亚洲v天堂网2019无码| 亚洲精品和日本精品| 成人午夜性A级毛片免费|