解決Font 'STSong-light' is not available to the JVM.


困擾兩天的問題,今天得到解決.


由於公司早些時候的產品是ireport-1.x系列下開發的,現在ireport都出到5.x系列,產品要做升級,就把老的xml文件拿來,放到新的ireport中,預覽出來發現報錯,各種報錯.


javax.servlet.ServletException: net.sf.jasperreports.engine.util.JRFontNotFoundException: Font 'STSong-light' is not available to the JVM. See the Javadoc for more details. org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:535) org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:433) org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236) org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196) org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432) javax.servlet.http.HttpServlet.service(HttpServlet.java:637) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)

解決辦法就是網上的那種各種修改配置文件,添加ireport的classPath的jar包,下載最新的itext-asian-5.2.0.jar,itextpdf-5.4.0.jar,jasperreports-3.7.5.jar,jasperreports-fonts-4.0.0.jar各種辦法均有所嘗試,還是不行!!!!!!!!!


然后wo就開始研究ireport它自己的實例,發現,當我把字體修改為STSong-light的時候,預覽也咩有報錯



,再看看xml文件,發現里面fontName標簽,這樣的話就出現了2個STSong-light,這不是坑爹么,前面的那個完全沒有必要,刪掉,統統刪掉,后面的那個留着.



PDF文件只識別pdfFontName的標簽才對,所以趕緊的批量刪除fontName標簽...然后預覽,發現就ok了~!!!


 




順便把我的lib下面的文件截圖放上來,希望其他同志能夠吸取本次教訓.



jar包請去maven官網服務器上下載,http://search.maven.org/#search%7Cga%7C1%7Cjasperreports


另附 網上一個解決方案還算靠近的前輩寫的文章,大家去參考下...總有一種方案能解決的,加油.


1.將iTextAsian.jar復制到iReport安裝目錄\ireport\libs下,運行iReport,工具-->選項-->iReport:Classpath中,將iTextAsian.jar包導入。

Jasperreport+iReport生成PDF字體問題
完成后,在屬性里面設置 Pdf font name: STSong-Light; pdf Encoding =UniGB-UCS2-H;(Pdf Embedded復選框選不選上都一樣),一般的中文字體就可以在pdf中正常顯示了。注意:雖然在iReport3.7中,PDF font name和pdf Encoding兩個屬性已被聲明過時(Deprecated),但實際上還是必須得設置正確,否則編譯任然出錯。

2.項目中還需要用到宋體之外的字體,即黑體和華文新魏(iReport中默認有這些字體,但卻不能用於pdf中,在PDF Font name下就只有STSong-Light可用,而且加粗、斜體等效果在pdf中都無效),則做好上述設置之后,還需要在做如下設置:

 1)將要用的字體文件拷貝到 安裝目錄\ireport\fonts 中。

 2)工具-->選項-->iReport:Classpath中,將剛才的字體目錄引入。

Jasperreport+iReport生成PDF字體問題

  3)工具-->選項-->iReport:Fonts中,將剛才的字體目錄和包引入。Jasperreport+iReport生成PDF字體問題

  4)完成后,重啟一下iReport,在文字屬性中的Pdf font name中就可以看到相應的名字,選擇字體后,設置Pdf Embedded打勾和Pdf Encoding為Identity-H(Unicode with horizontal writing),在iReport中預覽(用Adobe pdf Reader預覽)可以看到一切都OK了,iReport配置完畢。

3.用Jasperreport生成報表還有一個問題,項目找不到字體,會一直拋異常,解決方法如下:

 1)將剛才iReport中引入的fonts文件夾復制到項目的根目錄下。

 2)右鍵點自己項目-Properties-Java Build Path,選Libraries選項卡,點Add Class Folder,選擇剛才復制進來的fonts文件夾,點OK。

最重要的一點,別忘了先確保要安裝的字體在本機上必須先安裝,即把ttf字體文件拷貝到C:\Windows\Fonts目錄下,保證文件名稱都一致即可。

參考文章網址 http://blog.sina.com.cn/s/blog_707036b30100p5ub.html


今天下午從csdn上找到的將字體打包到jar包的辦法,大家看下..


在使用Jasperreports以及iReport設計報表時,導出PDF是一個常見的需求。網上解決PDF導出中文顯示問題相關的文章很多,無非就是設置控件的pdf font name和pdf encoding屬性,但是在4.5中都已經被棄用了(不推薦)。並且原來的解決方案還存在兩個問題:(1)預覽的字體通常不是STSong-Light, 這會導致預覽字體與導出到PDF不一致。(2)當字符串中既有字母又有漢字的時候,導出的PDF可能莫名的換行。本文就介紹一種完美的解決方案,既保持一致性,也不會出現換行問題。


     首先,安裝完iReport之后,安裝你想要使用的字體。Windows操作系統下面有各種字體,下面以仿宋的安裝為例。在C:\Windows\Fonts文件夾下找到simfang.ttf仿宋字體文件。選擇iReport菜單:工具->選項(英文應該為Tools->Options) ,在彈出的窗口中選擇Fonts Tab。點擊 Install Font按鈕,選擇剛才找到的仿宋字體文件simfang.ttf,點擊下一步,選擇pdf-encoding為Identity-H (Unicode with horizontal writing),勾選Embed in this font in the PDF document。 點擊完成即可。此時應該可以在控件的font屬性中看到宋體選項,選擇宋體,即可預覽,也可在iReport里面導出PDF。具體的截圖如下:



    其次打包字體文件。要在具體的項目中運用剛才設置的字體,需要把字體文件以及Jasperreports配置文件打包為Jar包,並放到classpath中。切換到iReport的安裝目錄,選擇fonts目錄,命令行切換到該目錄,執行命令: jar cf simfang.jar  *  。 打包的方式有很多 ,ant,maven等也都可以。把simfang.jar放到項目classpath下面即可。


     到此,完成了Jasperreports的個性化字體設置。控件的字體設置為仿宋即可,pdf相關的屬性不用再設置。預覽和PDF導出效果完全一致。

參考網址 : http://blog.csdn.net/kimylrong/article/details/7635407 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM