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

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

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

    Tin's Blog

    You are coming a long way, baby~Thinking, feeling, memory...

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      128 隨筆 :: 0 文章 :: 221 評論 :: 0 Trackbacks
    不知道大家是否使用過eXtremeComponent,最早知道eXtremeComponent是從www.open-open.com,去年就在用了,感覺明顯比display-tag要好用多了。
    它使用jstl,所以與webwork集成也很方便,不象display-tag那樣需要把hibernate返回的collection復制一遍再訪問。

    具體的使用方法參考官方網站好了:
    官方網站在這里:
    http://www.extremecomponents.org/extremesite/welcome.jsp
    最新的版本是1.0.1-M4-A14,可以到這里下載:
    http://www.extremecomponents.org/extremesite/public/download/
    或者直接下載:
    http://www.extremecomponents.org/extremesite/public/download/extremecomponents-1.0.1-M4-A14.zip
    但是這個snapshot版本沒有依賴lib和資源文件等,推薦去這里下一個完整版本備用,目前最新的Production Release包是eXtremeComponents-1.0.1-M3-with-dependencies.zip:
    https://sourceforge.net/project/showfiles.php?group_id=108168
    最新版本的說明書在這里,說明書用的doc book格式,寫的也很清楚:
    http://www.extremecomponents.org/extremesite/public/download/eXtremeComponents.pdf
    很多人都對他使用的doc book聲稱doc感興趣,spring和hibernate都用doc book,可是一般看不到源文件。作者很慷慨將doc book的源文件也分享了,是學習是學習使用doc book的好東西:
    http://www.extremecomponents.org/extremesite/public/download/generate-docs.zip

    資源就貼到這里,這里要提及作者Jeff Johnston人非常熱情,論壇上四處可見他的身影,給他發信他也是每信必會、有求必應,承蒙他多次幫助。而且論壇中大家多次提及中文問題,他也很重視。

    轉入正題:
    我貼一下一個例子:
    <ec:table 
    items="ecoAttrs" 
    action
    ="/jgz/tjk/eco/listTjkAttByInfId.action" 
    imagePath
    ="${pageContext.request.contextPath}/css/table/zh_CN/*.gif" 
    cellpadding
    ="1" 
    title
    ="農村經濟運行情況列表" 
    locale
    ="zh_CN" 
    rowsDisplayed
    ="30"> 
    <ec:export view="xls" fileName="jgz_zyjjzbwcqk.xls" tooltip="輸出Excel文件"/> 
    <ec:exportPdf fileName="jgz_zyjjzbwcqk.pdf" tooltip="輸出PDF文件" headerColor="blue" headerBackgroundColor="red" headerTitle="密云縣農村經濟月份經濟主要指標完成情況表"/> 
    <ec:exportCsv fileName="jgz_zyjjzbwcqk.txt" tooltip="輸出CSV文件" delimiter="|"/> 
    <ec:row> 
    <ec:column property="ofTown.name" title="鄉鎮名稱"/> 
    <ec:column property="ncJihua" title="農村計劃"/> 
    <ec:column property="ncWancheng" title="農村完成"/> 
    <ec:column property="ncQunian" title="農村去年"/> 
    <ec:column property="zongShouRuWCJH" title="完成計劃%"/> 
    <ec:column property="zongShouRuTB" title="同比+/-%"/> 
    </ec:row> 
    </ec:table> 

    其中ecoAttrs是一個collection,放入pojo。action里面寫你這個頁面的訪問方法(如我的頁面是一個action,其他的如.do或者.jsp什么的都可以)。rowsDisplayed是默認顯示條數,它可以自動實現分頁。
    下面的三個<ec:export>是導出三種格式用的,不用的話可以不寫(寫了需要在web.xml配置相應的filter)。
    <ec:column>里面放屬性,property指向pojo的相應屬性,而title是表頭顯示的信息,這個標簽需要用<ec:row>包起來(1.0.1 m4以后)(抱歉pojo比較丑,出自同事之手)。

    這里放一套我做的中文圖標:
    http://tiny.51.net/extremecomponent/zh_CN.rar
    還有我該寫了一下css,更適合使用中文,將字體該為%大小,可以定義.eXtremeTable里面的font-size,即影響所有eXtremeTable里面的字體大小,也方便寫js來動態修改大?。?
    http://tiny.51.net/extremecomponent/extremecomponents.css

    貼一下我在web.xml里面的配置:
    <filter> 
    <filter-name>eXtremeExport</filter-name> 
    <filter-class> 
    org.extremecomponents.table.filter.ExportFilter 
    </filter-class> 
    </filter> 

    <filter-mapping> 
    <filter-name>eXtremeExport</filter-name> 
    <url-pattern>/*</url-pattern> 
    </filter-mapping> 

    <taglib> 
    <taglib-uri>/extremecomponents</taglib-uri> 
    <taglib-location>/WEB-INF/tld/extremecomponents.tld</taglib-location><!-- 別忘了把那個tld拷貝到相應目錄去 --> 
    </taglib> 

    其實,那個filter只是在使用<ec:export>的時候才需要,不過這個功能還是很有用的。

    export里面的excel和pdf默認不支持中文,需要手工修改源碼,excel的比較簡單:
    修改org.extremecomponents.table.view.XlsView.java(我指的是1.0.1-M4-A14的相應代碼)
    102行:
    HSSFCell hssfCell = hssfRow.createCell(cellnum); 
    hssfCell.setEncoding(HSSFCell.ENCODING_UTF_16);(就是添加這一行) 
    122行: 
    HSSFCell cell 
    = row.createCell(cellnum); 
    cell.setEncoding(HSSFCell.ENCODING_UTF_16);(就是添加這一行) 

    這個在使用UTF-8時工作正常。如果其他Unicode環境可以嘗試HSSFCell.ENCODING_COMPRESSED_UNICODE。

    編譯后將對應.class放到WEB-INF/classes相應目錄就可以了。

    pdf view的比較麻煩,還沒嘗試,解決方法參照這個帖子:
    http://extremecomponents.org/forum/viewtopic.php?t=139&highlight=chinese+filter
    http://www-128.ibm.com/developerworks/cn/xml/x-ospdf/index.html

    還有一小點:
    升級到1.0.1-M4-A14以后兩個圖片改名了,如果用1.0.1-M3的對應gif則需要該如下兩個文件名(我修改的那個ZH-CN已經重命名過了):
    searchArrow.gif -> filterArrow.gif
    search.gif -> filter.gif

    說的比較羅嗦,主要是想讓和我一樣的非常初級水平的朋友能夠比較容易上手。其實eXtremeComponent的文檔很不錯,用那個上手其實更好,我僅拋磚引玉,各位大牛多多包涵。

    下面是補充上的如何讓PDF View支持中文,這個需要點耐心。
    我是在WindowsXP里面(這個涉及到文件夾和所帶的字體)。

    1、解開fop-0.20.5.jar,啟用cmd,并到它的目錄中,執行:
    java org.apache.fop.fonts.apps.TTFReader -ttcname "SimSun" C:\WINDOWS\Fonts\simsun.ttc simsun.xml 
    java org.apache.fop.fonts.apps.TTFReader -ttcname SimHei C:\WINDOWS\Fonts\simhei.ttf simhei.xml 

    2、然后就會生成需要的兩個字體描述文件:simsun.xml、simhei.xml
    我們將我們生成的兩個xml文件和它們對應的字體simsun.ttc和simhei.ttf存儲到我們的Web項目的WEB-INF/fonts下面。
    3、然后在我們的src目錄(目的是要被部署到WEB-INF/classes目錄,也有可能是/src/conf,看你的工程的設定)創建一個名為fop-pdf-userconfig.xml的文件,內容如下:

    <?xml version="1.0" encoding="UTF-8"?> 
    <configuration> 
    <fonts> 
      
    <font metrics-file="@@@@@@@@@@fonts/simsun.xml" 
               embed-file
    ="@@@@@@@@@@fonts/simsun.ttc" kerning="yes"> 
                
    <font-triplet name="SimSun" style="normal" weight="normal"/> 
                
    <font-triplet name="SimSun" style="normal" weight="bold"/> 
                
    <font-triplet name="SimSun" style="italic" weight="normal"/> 
                
    <font-triplet name="SimSun" style="italic" weight="bold"/> 
      
    </font> 
      
    <font metrics-file="@@@@@@@@@@fonts/simhei.xml" 
               embed-file
    ="@@@@@@@@@@fonts/simhei.ttf" kerning="yes"> 
                
    <font-triplet name="SimHei" style="normal" weight="normal"/> 
                
    <font-triplet name="SimHei" style="normal" weight="bold"/> 
                
    <font-triplet name="SimHei" style="italic" weight="normal"/> 
                
    <font-triplet name="SimHei" style="italic" weight="bold"/> 
      
    </font> 
    </fonts> 
    </configuration>

    注意,其中有“@@@@@@@@@@”,因為我的實現方法很丑陋,我后面的代碼中將“@@@@@@@@@@”替換為你部署后運行的路徑,目的是字體文件等能夠跟工程一同部署,減少固定字體等文件的麻煩。
    4、對extremeComponent的代碼,我又修改了兩處:
    其一,對于org.extremecomponents.table.view.PdfView修改:
    將其中出現<fo:block的地方全部添加font-family=\"SimSun,SimHei\"。
    然后double colwidth = 10 / columnCount;中的10修改為20,此處修改使中文字符不會堆積在一起。
    我還將上面的sb.append(" page-width=\"11in\" ");修改為sb.append(" page-width=\"22in\" ");,這樣對于中文比較寬大的報表可以顯示完全,不過這個要自己把握。

    其二,修改org.extremecomponents.table.filter.PdfViewResolver:
    我在driver.run();前面增加如下一段代碼:
    try 
                ClassLoader loader 
    = Thread.currentThread().getContextClassLoader(); 
                URL url 
    = loader.getResource( 
                        
    "/org/extremecomponents/table/filter/PdfViewResolver.class"); //get the class's working folder 
                String classPathUrl = url.toExternalForm(); 
                String fileRoot 
    = classPathUrl.substring(0
                        classPathUrl.lastIndexOf(
    "WEB-INF")); 
                fileRoot 
    = (fileRoot.substring(6+ "WEB-INF/"); //cut the "file:/" prefix 

                InputStream opis 
    = loader.getResourceAsStream( 
                        
    "fop-pdf-userconfig.xml"); 
                StringBuffer tempConfigurationStrBuf 
    = new StringBuffer(); 

                
    byte[] buffer = new byte[4096]; 
                
    int len; 

                
    while ((len = opis.read(buffer)) != -1
                    String s 
    = new String(buffer, 0, len); 
                    tempConfigurationStrBuf.append(s); 
                }
     

                String configurationStr 
    = tempConfigurationStrBuf.toString(); 
                configurationStr 
    = configurationStr.replaceAll("@@@@@@@@@@"
                        fileRoot); 

                ByteArrayInputStream bais 
    = new ByteArrayInputStream(configurationStr.getBytes()); 
                org.apache.fop.apps.Options options 
    = new org.apache.fop.apps.Options(); 
                options.loadUserconfiguration(bais); 
            }
     catch (FOPException fe) 
                fe.printStackTrace(); 
            }

    大家可以抨擊代碼的丑陋,呵呵,不過還好it works。代碼很丑陋,本來想咨詢raimundo的,他正好忙,所以畸形了,如果朋友們有其它好方法可以一同改進。
    不過要注意,我替換的/org/extremecomponents/table/filter/PdfViewResolver.class是放到WEB-INF/classes文件夾的,如果您將它替換到jar包里面,則上面內容還需要修改一下,我沒有測試,但是估計也不麻煩的。

    至此,最基本的解決Pdf export的方法就寫好了??墒钦每吹讲钌骋呀浽缧┓懦隽怂男薷?,明顯比我這個優雅,但是他的修改無法將fonts里面的內容自動部署并檢查目錄,大家可以合并一下代碼,相信會更好一點。回去好好學習差沙分享的代碼,大家一同學習。

    相關代碼打包在這里:
    http://tiny.51.net/extremecomponent/ec_pdf_chfix.rar

    本解決方案參考了本貼:
    http://extremecomponents.org/forum/viewtopic.php?t=139&highlight=chinese+filter


    這是我在JavaEye的一篇帖子,轉到我的Blog上來。
    posted on 2006-02-16 21:10 Tin 閱讀(2965) 評論(3)  編輯  收藏 所屬分類: Other Project

    評論

    # re: eXtremeComponent在中文環境下的使用 2006-02-17 08:37 JavaXP
    寫的很不錯啊``值得學習`  回復  更多評論
      

    # re: eXtremeComponent在中文環境下的使用 2006-06-15 10:20 ybbk
    寫得是不錯

    可文擋就是下載不了 ~_~  回復  更多評論
      

    # re: eXtremeComponent在中文環境下的使用 2006-11-29 08:43 damyankee
    excel 能否給一個包?  回復  更多評論
      

    主站蜘蛛池模板: 精品国产呦系列在线观看免费 | 日本免费一区二区三区最新vr| GOGOGO高清免费看韩国| 亚洲人成网站999久久久综合| 亚洲综合视频在线| 亚洲日本va在线视频观看| 国产免费久久精品久久久| a毛片基地免费全部视频| 99久久国产免费中文无字幕| aa级毛片毛片免费观看久| 羞羞漫画页面免费入口欢迎你 | 国产成人精品免费视频大| AAA日本高清在线播放免费观看 | 国产亚洲av片在线观看18女人| 免费视频淫片aa毛片| 亚洲精品视频在线免费| 国偷自产一区二区免费视频| 一区二区三区视频免费观看| 综合一区自拍亚洲综合图区| 亚洲欧洲专线一区| 色天使亚洲综合在线观看| 国产精品久久亚洲不卡动漫| 亚洲国产最大av| 亚洲乱码在线卡一卡二卡新区| 亚洲国产精品线观看不卡| 亚洲的天堂av无码| 亚洲大尺码专区影院| 亚洲av无码片在线观看| 亚洲天堂一区二区三区四区| 亚洲无线一二三四区| 亚洲无成人网77777| 国产精品亚洲片夜色在线| 精品日韩99亚洲的在线发布| 亚洲天堂2017无码中文| 亚洲综合小说另类图片动图| 亚洲日韩亚洲另类激情文学| 亚洲人成色777777老人头| 国产大陆亚洲精品国产| 免费大片av手机看片高清| 国产精品午夜免费观看网站| 国产一级黄片儿免费看|