displaytag無法匯出pdf、rtf?????? 已解決

來源:互聯網
上載者:User

標籤:

displaytag無法匯出pdf、rtf?????? 已解決

因為做畢業設計的需要,所以從今天開始需要考慮分頁處理的問題,一開始是在網上尋找可用的開源架構予以借鑒使用,於是在

經過查閱網上的許多文章資料後,我將目標鎖定到了display tag上,關於display tag的用法,主要集中在幾個方面:分頁(含

記憶體分頁與資料庫分頁)、對列排序、匯出資料。
網上的相關資料確實很多,但是很多轉載的文章大同小異的也很多。於是就為一些問題埋下了伏筆。

我按照網上的大部分說法,匯入了相關包:
displaytag-1.2.jar
commons-lang-2.6.jar
standard.jar
commons-beanutils-1.8.3.jar
commons-collections-3.2.1.jar
commons-logging-1.1.1.jar
iText-5.0.6.jar
jstl.jar
displaytag-export-poi-1.2.jar
displaytag-portlet-1.2.jar


而且還弄了個簡單的執行個體想測試一下分頁和匯出功能。但是卻發現怎麼也無法匯出pdf與rtf格式的資料(更準確的說法是頁面上

只顯示了csv、xml、excel的label或按鈕,但是卻沒有顯示pdf、rtf的label或按鈕,故無法使用匯出功能!而且在netbeans的輸

出欄內,tomcat日誌、伺服器日誌、程式輸出均無提示異常!)。我的資料裡面並無涉及中文。百思不得其解,在網上也沒找到

合理的或相關的解釋,看來看去,都是在說中文問題!
於是無奈之中,匯入了iTextAsian.jar,但是發現問題依舊。

糾結之中,又檢查起了web.xml的配置,發現已經正確配置,否則,它應該會拋出異常。而且我在預設包下的

displaytag.properties檔案也將相應的property set為true了,那麼問題出在哪呢?
我配置如下:
#sort.behavior=list
#sort.amount=list
#basic.empty.showtable=true
#basic.msg.empty_list=No results matched your criteria.
#paging.banner.placement=top
#paging.banner.onepage=<span class="pagelinks"></span>
export.types=csv excel xml pdf rtf
export.excel=true
export.csv=true
export.xml=true
export.pdf=true
export.rtf=true
export.excel.class=org.displaytag.export.excel.DefaultHssfExportView
export.pdf.class=org.displaytag.export.DefaultPdfExportView
export.rtf.class=org.displaytag.export.DefaultRtfExportView
paging.banner.placement=bottom
# if set, file is downloaded instead of opened in the browser window
#export.[mymedia].filename=
為什麼不行呢?

無奈之下,我只好開啟了displaytag-1.2.jar內的org.displaytag.properties裡的displaytag.properties檔案,想將內容複寫

到我建立的屬性檔案中去。部署項目後依舊有問題。

 

最後迫於無奈,檢查相關export用到的class,即org.displaytag.export.excel.DefaultHssfExportView、

org.displaytag.export.DefaultPdfExportView、org.displaytag.export.DefaultRtfExportView等。

終於發現部分類內居然有些匯入類缺失!原來還是缺包!不得不佩服,網上那些轉載文章的,轉載了,卻不去測試,結果“以訛

傳訛”。
幾經周折,我終於發現還缺一個包,那就是itext-1.3.1.jar!!!!!!!!我在csdn裡能找到相關的下載!!!!
下載地方:http://download.csdn.net/source/2819666
補上包後,發現netbeans裡面對相關匯入還是顯示紅色,但是仔細檢查,確實已經匯入了!部署後發現csv excel xml pdf rtf五

種格式均可匯出!

 (後經檢查,發現itext包與iText包是等效的,提示缺包,可能是tomcat本身的bug,換了個glassfish後就沒提示了。。。)


另外附上,其他有用的網址:
http://sourceforge.net/projects/itext/files/

http://sourceforge.net/projects/itext/files/extrajars/ExtraJars1.0/

http://sourceforge.net/projects/itext/files/extrajars/ExtraJars1.0/iTextAsian.jar/download

 

 

 


後記:當時弄的時候搞到比較晚,所以沒進一步往下操作,後來點選連結後發現excel連結會出錯,拋出異常如下:

org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.NoClassDefFoundError:

org/apache/poi/hssf/usermodel/HSSFWorkbook
經檢查,發現還需要匯入poi-3.7-20101029.jar。於是匯入。
匯入後發覺問題依舊,覺得很是奇怪。
我是在項目源包內的預設包下重建立的displaytag.properties檔案,這個也是參考自網上的做法。我們知道在項目的匯入包

displaytag-1.2.jar中還存在著一個更全的properties檔案,而根據先前我在網上搜到的某個例子,當中在建立的屬性檔案中是

沒有這句的:export.excel.class=org.displaytag.export.excel.DefaultHssfExportView
雖然我覺得加了或沒加都一樣(因為在那個更全的屬性檔案中也是存在這個的)。最後試來試去,還是得改為原先那個比較少內

容的屬性檔案,換成用比較全的那個會出錯,具體原因不知道。
我的屬性檔案是這樣寫的:


#sort.behavior=list
#sort.amount=list
#basic.empty.showtable=true
#basic.msg.empty_list=No results matched your criteria.
#paging.banner.placement=top
#paging.banner.onepage=<span class="pagelinks"></span>
export.types=csv excel xml pdf rtf
export.excel=true
export.csv=true
export.xml=true
export.pdf=true
export.rtf=true
export.excel.filename=page.xls
export.csv.filename=page.csv
export.pdf.filename=page.pdf
export.rtf.filename=page.rtf
export.pdf.class=org.displaytag.export.DefaultPdfExportView
export.rtf.class=org.displaytag.export.DefaultRtfExportView
paging.banner.placement=bottom
# if set, file is downloaded instead of opened in the browser window
#export.[mymedia].filename=

 

 

但是在我的印象中,上次那樣用好像是沒問題的,另外pdf直接在瀏覽器上開啟也會出問題,癥狀是網頁標籤自動關閉了(我用的

是360瀏覽器)。必須設定export.pdf.filename=XXX,以瀏覽器下載的方式開啟。。。。。

無奈,想起今天下午剛剛更新過360瀏覽器與adobe reader(碰巧同一天)。。。。。。哪裡出了問題呢?鬼才知道。。。。

 

 

後記:

之前的研究沒有考慮中文,後來我研究了一下,發現原本用來開啟excel的類是

org.displaytag.export.excel.ExcelHssfView,於是我將設定檔中的內容改回原樣:

export.excel.class=org.displaytag.export.excel.ExcelHssfView
這樣就能在excel中正確顯示中文了。

說到這裡,由於是研究輸出中文亂碼的問題嘛,所以有必要指出,我在這裡參考了某篇文章,來源:普索網 
以下是節選內容:


 

列出displaytag 1.2版中文PDF與Excel中文亂碼解決方案:
Excel亂碼部分(使用poi-3.2-FINAL-20081019.jar)//注意版本,否則可能提示缺少部分方法。。。。
1.請下載displaytag-export-poi-1.2.jar
2.在displaytag.properties加入export.excel.class=org.displaytag.export.excel.ExcelHssfView

PDF中文消失部分(使用iText 2.1.5) 
1.請下載 iTextAsian.jar
2.請下載displaytag 1.2的source code
3.自行複製org.displaytag.export裡的PdfView.java於自訂的package
4.於initTable()中修改
1
smallFont = FontFactory.getFont(FontFactory.HELVETICA, 7, Font.NORMAL, new Color(0, 0, 0))
變成
1
smallFont = FontFactory.getFont("MHei-Medium", "UniCNS-UCS2-H", Font.DEFAULTSIZE);

5.在displaytag.properties加入export.pdf.class=com.kymco.displaytag.export.PdfView,其中

com.kymco.displaytag.export應改成您自己的package

 


對於上面這段話,很有借鑒意義,但是在實際使用過程中,還是遇到了問題,對於其中的“使用iText 2.1.5”,本人實踐證明這

樣不行,需要更舊的包,否則會拋出異常:org.apache.jasper.JasperException: javax.servlet.ServletException:

java.lang.NoSuchMethodError: com.lowagie.text.Table.setDefaultVerticalAlignment(I)V。

至於解決辦法,參見這段摘自網上的話:


Export to PDF uses deprecated iText method
 
Export Application server: Apache Tomcat 6 
Description: Hide Export to PDF throws 
java.lang.NoSuchMethodError: com.lowagie.text.Table.setDefaultVerticalAlignment(I)V

This is a deprecated method (since iText 2.1 I think), and (Captain Obvious) it does not work with iText 5.0.1

that

從以上這段話我們可以得出幾點結論:

一、我們之前使用的itext-1.3.1.jar很顯然是舊包,而iText-5.0.6.jar是新包,而且字母t一個是大寫,一個是小寫。顯然

displaytag需要用的是舊包,新包沒用到。
二、要知道displaytag與itext分屬兩個架構,開發人員不同,所以很顯然,他們的更新速度不同步。造成我們還需要用舊包。


另外還有一個異常:org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.NoSuchMethodError:

com.lowagie.text.Rectangle.width()F


但是就算我用了最舊的包,也發現異常依舊。。。徹底無語了。。。


而且之前的就算是英文,匯出也有問題了。早知道這樣就先做好備份啦。。。

 


最後最後,我重建立了一個項目,按部就班,一步一步做備份後,發現並不應該拋出那些異常,看來問題是源於netbeans本身的

錯誤,估計是緩衝,還是內部設定檔什麼的記錄出錯了。
哎~~~~~~~記得以前遭遇過類似情況沒想到這次又遇上了。。。。。。看來netbeans靠不住啊。。。。

經過我仔細檢查後發現,displaytag1.2與iText5並不完全相容,也就是說,一旦你想修改displaytag裡面的類時,經常會遇到找

不到類的情況。當然直接用iText5.0.6,而不為瞭解決因匯出資料中含有中文而出現的問題時,直接用iText5.0.6並無大礙。

只是按照網上的做法,始終無法解決csv、pdf的中文顯示問題。excel倒是能通過設定:

export.excel.class=org.displaytag.export.excel.ExcelHssfView來解決。rtf本身就能正常匯出。xml本身就能顯示正常。
於是乎,問題就是csv亂碼,pdf中文顯示為空白了。

接著,附上我的屬性配置:
#sort.behavior=list
#sort.amount=list
#basic.empty.showtable=true
#basic.msg.empty_list=No results matched your criteria.
#paging.banner.placement=top
#paging.banner.onepage=<span class="pagelinks"></span>
export.types=csv excel xml pdf rtf
export.excel=true
export.csv=true
export.xml=true
export.pdf=true
export.rtf=true
export.excel.filename=page.xls
export.csv.filename=page.csv
export.pdf.filename=page.pdf
export.rtf.filename=page.rtf

export.excel.class=org.displaytag.export.excel.ExcelHssfView
export.pdf.class=testList.PdfViewSupportAsian
export.rtf.class=org.displaytag.export.DefaultRtfExportView
paging.banner.placement=bottom
# if set, file is downloaded instead of opened in the browser window
#export.[mymedia].filename=

其中testList.PdfViewSupportAsian是修改過org.displaytag.export.PdfView而做成的。
使用時要求itext版本不能為5或以上。但是依舊無法解決中文顯示為空白的問題。


我設了的displayTag庫內容為:


displaytag-1.2.jar
commons-lang-2.6.jar
standard.jar
commons-beanutils-1.8.3.jar
commons-collections-3.2.1.jar
commons-logging-1.1.1.jar
itext-2.1.5.jar
jstl.jar
displaytag-export-poi-1.2.jar
displaytag-portlet-1.2.jar
poi-3.2-FINAL-20081019.jar
iTextAsian.jar

 

 

 


最後最後,我在想:是不是應該嘗試一下使用iText5?因為或許它已經支援了中文,utf8呢????但是這樣就需要找到我的解

決之道才行,不能照搬別人的方案了。


……………………………………………………


杯具。。。。。。。。。。

 

後記:
對於以上問題,我有了新的解答,大家看我的另一篇文章:《displaytag 中文問題 探索日誌 注釋》


後記:
關於pdf輸出中文為空白的問題,已經得到瞭解決。
可以參見我的另一篇文章,《displaytag 國際化 探索日誌 注釋》,是因為我沒有正確配置屬性檔案的問題。系統預設的locale

是zh_CN,而我在配置時只留意了displaytag.properties,沒仔細檢查displaytag_zh_CN.properties,那裡由於我之前編寫項目

時遺留問題的關係,所以沒編寫正確,所以導致了問題。

後來我改正了問題之後,參見《displaytag 國際化 探索日誌 注釋》,我於是重試了一下《來源普索網  displaytag的export功

能中文出現亂碼...》中提到的方法,發現我寫的testList.PdfViewSupportAsian其效果了。

但是,這期間有幾點需要留意:參見我在頁面中的注釋:
 <%--居然可以輸出pdf了,不過是在adobe9更新後,而且字型不大好看,有什麼改進意見嗎?
            回想原先點匯出pdf時,提示的是伺服器沒響應。
            而剛才因為訪問錯了連結名稱,所以導致頁面沒顯示“匯出pdf”按鈕,這一點以後須留意。--%>
即,一開始我寫錯了地址欄的連結名稱,後來改正了,於是可以訪問了。而回想最初時,一直是提示伺服器沒響應的,不知道是

不是因為我之前可能配錯了屬性檔案的緣故,現在已經無從追查,因為我做的這個不是主要項目,所以沒有經常備份。

另外,那個字型不好看。而且其間adobe reader 9提示了更新中文字型庫。。。

所以之前伺服器無法響應的問題是因為配置問題,還是字型不支援問題,就無從追查了。

最後,那個字型好難看,換成什麼才好呢?

 

 

 
後記:
我在網上搜到了一篇文章:《Itext中文處理pdf(轉)》,按照它的提示,我將字型改為了宋體,好看多了。
具體的改法可以參見我空間中的《Itext中文處理pdf(轉)(改)》

收藏於 2011-03-02

displaytag無法匯出pdf、rtf?????? 已解決

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.