H2P在很多人看來是個令人激動的方案,而且javaei網站提供h2p文件資源又是相當自然的一件事情,一想到h2p,我都很高興,因為這個方案是我提出來的,盡管實現h2p的技術很成熟。在這篇文章里,說一下實現h2p所涉及到的技術吧,既有核心的j2se應用,又有開源框架的使用。

          1dtd的應用,為了規范使用者正確的編輯h2p文件,我定義了h2p文件的dtd,當然我還有一個奢望,希望能成為一種規范。

          2)使用根據dtd校驗xmlh2p文件),h2p-tool需要解析xmlh2p文件)提取url生成pdf并合并,不合法的xml文件肯定不能正確的生成pdf,所以必須對xml文件進行校驗。

          3xml解析,編輯h2p,用JTree展示xml的樹形結構,這一部分用的是dom解析(具體的是JDom),獲取書簽的目錄結構并構建書簽的數據結構,這一部分用的是SAX解析,并借助于Stack。保存xml文件用的是dom。

                   4swing的應用,h2p-tool編輯功能用的是swing,展示并編輯樹形結構用的是JTree

                   5C#組件,根據url生成單個的pdf,用的是c#組件,并在vs.net開發平臺上進行了簡單的開發。Javaei提供的h2p文件通常包含幾十條url,單就每條url生成pdf也需要一點時間,何況是幾十條,所以運用多線程是必須的方式,研究了一下c#的多線程(c#的多線程方式也很有意思,感覺比java的簡單),可是別人的組件在多線程下表現欠佳,無賴之下,只好還是采用單線程。本想用jnic#的調用封裝起來,但經過研究,據說比較麻煩,就放棄了,所以采用簡單的辦法,用批處理來調用。

          6iText的應用,生成單個pdf頁面以及合并pdf生成書簽用的是iText。在合并的時候,也研究過另一個框架就是pdfboxIText確實強悍,理論上,應用iText可以實現任意效果的輸出,應該可以實現瀏覽器的效果,但比較麻煩。iText在生成書簽這一塊,做得相當漂亮,書簽可以指向任意一個頁面的任意部分,還可以設置書簽對應頁面的打開效果,對書簽的開發也很便利,直接構造書簽的樹形數據結構我認為是最簡單的,iText還支持用xml描述書簽的結構。

                   7Classloader的應用,h2p-tool的運行依賴于很多的jar包,通常我們開發的時候,都是把jar包放在指定的目錄,應用服務器會去加載依賴的jar包。在h2p-tool中,需要自己處理jar包。因為這是提供給用戶使用的工具,不應要求使用者去配置除了jdk環境變量以外的變量。所以解決jar包加載的問題通常的辦法是在主類(帶有main方法的類)所在jar包里的Manifest.mf文件里寫上jar包的相對路徑。這種辦法不太靈活,所以在h2p-tool中,對類加載進行了改寫,使其自動加載指定目錄下的jar包。

          8jvm參數的應用,因為要合并的pdf很多,再合并的時候會占用大量內存,很容易out of memery,所以在批處理文件里,需要配置適當的jvm參數,主要是兩個:-Xmx512m -Xms512m,這兩個參數的意義這里不再贅述,網上有很多的。

               總結一下,實現h2p-tool的技術細節貌似很多,實則很少,除了JDOmiText,再就是j2se核心的東西了,出列上面列到的,還包括流、字符集的處理等。H2p-tool及源代碼下載。

          Feedback

          # re: pdf生成的解決方案(H2p)之H2P技術細節  回復  更多評論   

          2009-09-22 14:10 by 路過
          其實java領域也有從html生成pdf比較好的解決方案,所謂的比較好主要指生成的pdf能夠比較好地還原出html的效果,不過就像樓主所有的.net組件一樣,是收費的。

          # re: pdf生成的解決方案(H2p)之H2P技術細節  回復  更多評論   

          2009-11-10 17:47 by cici
          感謝分享, 能詳細介紹一下第五步嗎

          # re: pdf生成的解決方案(H2p)之H2P技術細節[未登錄]  回復  更多評論   

          2009-11-11 22:52 by summeryhrb
          第五步其實很簡單,只是簡單的調用了一下C#的一個dll組件的一些方法,當然還有一些解析xml的代碼

          # re: pdf生成的解決方案(H2p)之H2P技術細節  回復  更多評論   

          2009-11-12 12:05 by cici
          根據url生成單獨的PDF這部分是由C#組件完成的嗎?

          # re: pdf生成的解決方案(H2p)之H2P技術細節[未登錄]  回復  更多評論   

          2009-11-17 12:28 by summeryhrb

          @cici
          根據url生成單獨的PDF這部分是由C#組件完成的

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


          網站導航:
           

          posts - 10, comments - 28, trackbacks - 0, articles - 0

          Copyright © summeryhrb

          主站蜘蛛池模板: 大邑县| 大关县| 平陆县| 墨玉县| 光泽县| 广灵县| 兴业县| 伊吾县| 安义县| 广州市| 清丰县| 宾阳县| 游戏| 顺义区| 潞城市| 腾冲县| 秦安县| 崇文区| 静海县| 会东县| 吴旗县| 龙州县| 东乡县| 密云县| 城固县| 虞城县| 平山县| 五华县| 阳曲县| 女性| 河源市| 隆化县| 崇仁县| 鄯善县| 沈阳市| 临湘市| 横山县| 和田县| 陕西省| 武安市| 新绛县|