<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 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      128 隨筆 :: 0 文章 :: 221 評(píng)論 :: 0 Trackbacks
    不知道大家是否使用過(guò)eXtremeComponent,最早知道eXtremeComponent是從www.open-open.com,去年就在用了,感覺(jué)明顯比display-tag要好用多了。
    它使用jstl,所以與webwork集成也很方便,不象display-tag那樣需要把hibernate返回的collection復(fù)制一遍再訪問(wèn)。

    具體的使用方法參考官方網(wǎng)站好了:
    官方網(wǎng)站在這里:
    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
    但是這個(gè)snapshot版本沒(méi)有依賴(lài)lib和資源文件等,推薦去這里下一個(gè)完整版本備用,目前最新的Production Release包是eXtremeComponents-1.0.1-M3-with-dependencies.zip:
    https://sourceforge.net/project/showfiles.php?group_id=108168
    最新版本的說(shuō)明書(shū)在這里,說(shuō)明書(shū)用的doc book格式,寫(xiě)的也很清楚:
    http://www.extremecomponents.org/extremesite/public/download/eXtremeComponents.pdf
    很多人都對(duì)他使用的doc book聲稱(chēng)doc感興趣,spring和hibernate都用doc book,可是一般看不到源文件。作者很慷慨將doc book的源文件也分享了,是學(xué)習(xí)是學(xué)習(xí)使用doc book的好東西:
    http://www.extremecomponents.org/extremesite/public/download/generate-docs.zip

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

    轉(zhuǎn)入正題:
    我貼一下一個(gè)例子:
    <ec:table 
    items="ecoAttrs" 
    action
    ="/jgz/tjk/eco/listTjkAttByInfId.action" 
    imagePath
    ="${pageContext.request.contextPath}/css/table/zh_CN/*.gif" 
    cellpadding
    ="1" 
    title
    ="農(nóng)村經(jīng)濟(jì)運(yùn)行情況列表" 
    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="密云縣農(nóng)村經(jīng)濟(jì)月份經(jīng)濟(jì)主要指標(biāo)完成情況表"/> 
    <ec:exportCsv fileName="jgz_zyjjzbwcqk.txt" tooltip="輸出CSV文件" delimiter="|"/> 
    <ec:row> 
    <ec:column property="ofTown.name" title="鄉(xiāng)鎮(zhèn)名稱(chēng)"/> 
    <ec:column property="ncJihua" title="農(nóng)村計(jì)劃"/> 
    <ec:column property="ncWancheng" title="農(nóng)村完成"/> 
    <ec:column property="ncQunian" title="農(nóng)村去年"/> 
    <ec:column property="zongShouRuWCJH" title="完成計(jì)劃%"/> 
    <ec:column property="zongShouRuTB" title="同比+/-%"/> 
    </ec:row> 
    </ec:table> 

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

    這里放一套我做的中文圖標(biāo):
    http://tiny.51.net/extremecomponent/zh_CN.rar
    還有我該寫(xiě)了一下css,更適合使用中文,將字體該為%大小,可以定義.eXtremeTable里面的font-size,即影響所有eXtremeTable里面的字體大小,也方便寫(xiě)js來(lái)動(dòng)態(tài)修改大?。?
    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><!-- 別忘了把那個(gè)tld拷貝到相應(yīng)目錄去 --> 
    </taglib> 

    其實(shí),那個(gè)filter只是在使用<ec:export>的時(shí)候才需要,不過(guò)這個(gè)功能還是很有用的。

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

    這個(gè)在使用UTF-8時(shí)工作正常。如果其他Unicode環(huán)境可以嘗試HSSFCell.ENCODING_COMPRESSED_UNICODE。

    編譯后將對(duì)應(yīng).class放到WEB-INF/classes相應(yīng)目錄就可以了。

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

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

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

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

    1、解開(kāi)fop-0.20.5.jar,啟用cmd,并到它的目錄中,執(zhí)行:
    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、然后就會(huì)生成需要的兩個(gè)字體描述文件:simsun.xml、simhei.xml
    我們將我們生成的兩個(gè)xml文件和它們對(duì)應(yīng)的字體simsun.ttc和simhei.ttf存儲(chǔ)到我們的Web項(xiàng)目的WEB-INF/fonts下面。
    3、然后在我們的src目錄(目的是要被部署到WEB-INF/classes目錄,也有可能是/src/conf,看你的工程的設(shè)定)創(chuàng)建一個(gè)名為fop-pdf-userconfig.xml的文件,內(nèi)容如下:

    <?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>

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

    其二,修改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(); 
            }

    大家可以抨擊代碼的丑陋,呵呵,不過(guò)還好it works。代碼很丑陋,本來(lái)想咨詢(xún)r(jià)aimundo的,他正好忙,所以畸形了,如果朋友們有其它好方法可以一同改進(jìn)。
    不過(guò)要注意,我替換的/org/extremecomponents/table/filter/PdfViewResolver.class是放到WEB-INF/classes文件夾的,如果您將它替換到j(luò)ar包里面,則上面內(nèi)容還需要修改一下,我沒(méi)有測(cè)試,但是估計(jì)也不麻煩的。

    至此,最基本的解決Pdf export的方法就寫(xiě)好了??墒钦每吹讲钌骋呀?jīng)早些放出了他的修改,明顯比我這個(gè)優(yōu)雅,但是他的修改無(wú)法將fonts里面的內(nèi)容自動(dòng)部署并檢查目錄,大家可以合并一下代碼,相信會(huì)更好一點(diǎn)?;厝ズ煤脤W(xué)習(xí)差沙分享的代碼,大家一同學(xué)習(xí)。

    相關(guān)代碼打包在這里:
    http://tiny.51.net/extremecomponent/ec_pdf_chfix.rar

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


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

    評(píng)論

    # re: eXtremeComponent在中文環(huán)境下的使用 2006-02-17 08:37 JavaXP
    寫(xiě)的很不錯(cuò)啊``值得學(xué)習(xí)`  回復(fù)  更多評(píng)論
      

    # re: eXtremeComponent在中文環(huán)境下的使用 2006-06-15 10:20 ybbk
    寫(xiě)得是不錯(cuò)

    可文擋就是下載不了 ~_~  回復(fù)  更多評(píng)論
      

    # re: eXtremeComponent在中文環(huán)境下的使用 2006-11-29 08:43 damyankee
    excel 能否給一個(gè)包?  回復(fù)  更多評(píng)論
      

    主站蜘蛛池模板: 亚洲一区二区三区国产精华液| 可以免费观看一级毛片黄a| 久久久久成人片免费观看蜜芽| 亚洲精品偷拍视频免费观看| 美女视频黄频a免费大全视频| 亚洲精品无码专区久久| 最新亚洲卡一卡二卡三新区| 亚洲jizzjizz在线播放久| 亚洲日韩乱码中文无码蜜桃臀| 亚洲男人电影天堂| 亚洲卡一卡2卡三卡4麻豆| 亚洲国产精品网站久久| 亚洲不卡中文字幕| 亚洲综合小说另类图片动图| 亚洲综合无码无在线观看| 亚洲成在人线aⅴ免费毛片| 青青青亚洲精品国产| 免费夜色污私人影院网站| 亚洲阿v天堂在线2017免费 | 国产v片免费播放| 免费国产成人高清视频网站 | 久久免费视频99| 一区二区三区四区免费视频| 日日麻批免费40分钟无码| av大片在线无码免费| 女人18毛片a级毛片免费视频| 性做久久久久免费看| 亚洲无码精品浪潮| 亚洲AV无码一区二区乱孑伦AS| 久久精品亚洲精品国产色婷| 亚洲ts人妖网站| 国产精品亚洲综合天堂夜夜| 国产黄色免费观看| 91av在线免费视频| 天天看片天天爽_免费播放| 亚洲AV之男人的天堂| 久久久久亚洲精品成人网小说| 亚洲国产精品久久丫 | 亚洲精品无码AV人在线播放| 亚洲酒色1314狠狠做| 亚洲AV无码一区二区一二区|