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。在合并的時候,也研究過另一個框架就是pdfbox。IText確實強悍,理論上,應用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

          主站蜘蛛池模板: 西平县| 通山县| 石嘴山市| 莆田市| 永和县| 扎赉特旗| 丘北县| 中牟县| 于田县| 清水县| 西乌珠穆沁旗| 东平县| 郯城县| 临安市| 洪洞县| 横山县| 小金县| 舞钢市| 承德县| 巴彦县| 商洛市| 桓台县| 彭阳县| 井冈山市| 娱乐| 徐闻县| 卢龙县| 茶陵县| 红河县| 静海县| 安化县| 北流市| 泾川县| 吉林市| 泰兴市| 武夷山市| 化州市| 南宁市| 钟祥市| 手游| 铜山县|