2016-06-10 149 views
1

我有一個應用程序,我使用jasper報告庫從在線生成報告。無論使用Helvetica以外的其他字體,生成PDF報告都是一個問題。我無法檢測字體被引用/加載的位置。我沒有Helvetica或Times-Roman的任何顯式類。jasperreports引擎從哪裏引用字體?

以下是拋出的錯誤:

net.sf.jasperreports.engine.JRRuntimeException: Could not load the following font : 
pdfFontName : Times-Roman 
pdfEncoding : Identity-H 
isPdfEmbedded : false 
at net.sf.jasperreports.engine.export.JRPdfExporter.getFont(JRPdfExporter.java:2036) ~[jasperreports-5.5.0.jar:5.5.0] 
at net.sf.jasperreports.engine.export.JRPdfExporter.getChunk(JRPdfExporter.java:1818) ~[jasperreports-5.5.0.jar:5.5.0] 
at net.sf.jasperreports.engine.export.JRPdfExporter.getPhrase(JRPdfExporter.java:1787) ~[jasperreports-5.5.0.jar:5.5.0] 
at net.sf.jasperreports.engine.export.SimplePdfTextRenderer.getPhrase(SimplePdfTextRenderer.java:89) ~[jasperreports-5.5.0.jar:5.5.0] 
at net.sf.jasperreports.engine.export.SimplePdfTextRenderer.render(SimplePdfTextRenderer.java:99) ~[jasperreports-5.5.0.jar:5.5.0] 
at net.sf.jasperreports.engine.export.JRPdfExporter.exportText(JRPdfExporter.java:2158) ~[jasperreports-5.5.0.jar:5.5.0] 
at net.sf.jasperreports.engine.export.JRPdfExporter.exportElements(JRPdfExporter.java:861) ~[jasperreports-5.5.0.jar:5.5.0] 
at net.sf.jasperreports.engine.export.JRPdfExporter.exportPage(JRPdfExporter.java:821) ~[jasperreports-5.5.0.jar:5.5.0] 
at net.sf.jasperreports.engine.export.JRPdfExporter.exportReportToStream(JRPdfExporter.java:698) ~[jasperreports-5.5.0.jar:5.5.0] 
at net.sf.jasperreports.engine.export.JRPdfExporter.exportReport(JRPdfExporter.java:420) ~[jasperreports-5.5.0.jar:5.5.0] 

但是,如果我給PDF字體名稱黑體同一份報告中,一切都正常運行。

任何人都可以請幫我理解這是如何工作的嗎?另外,如果我想添加一些新的字體,我可以在哪裏添加它?

遵循的步驟,以在碧玉字體jar添加一個新的字體,鏈接如下

http://www.codesuggestions.com/java/jasper-reports/adding-custom-fonts-t提到...

之前的錯誤消失了。彈出一個新的錯誤。

Caused by: java.lang.NoClassDefFoundError: Could not initialize class net.sf.jasperreports.engine.util.JRStyledTextParser 
at net.sf.jasperreports.engine.fill.JRBaseFiller.<init>(JRBaseFiller.java:121) ~[jasperreports-5.5.0.jar:5.5.0] 
at net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:88) ~[jasperreports-5.5.0.jar:5.5.0] 
at net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:103) ~[jasperreports-5.5.0.jar:5.5.0] 
at net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:61) ~[jasperreports-5.5.0.jar:5.5.0] 
at net.sf.jasperreports.engine.fill.JRFiller.createFiller(JRFiller.java:179) ~[jasperreports-5.5.0.jar:5.5.0] 
at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:81) ~[jasperreports-5.5.0.jar:5.5.0] 
at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:446) ~[jasperreports-5.5.0.jar:5.5.0] 
at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:276) ~[jasperreports-5.5.0.jar:5.5.0] 
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:745) ~[jasperreports-5.5.0.jar:5.5.0] 

JasperReports的-5.5.0.jar存在於該應用程序,仍然面臨此錯誤的classspath。

+0

添加字體,您需要使用字體的擴展看到這個http://stackoverflow.com/questions/33940126/how-can-i-display-%C2%A3%E2%84%A6%E2 %82%AC%CE%B1%CF%80%E2%85%94-in-jasperserver-pdf-using-ireport –

+0

感謝您的迴應Petter。我已經嘗試了將字體的.ttf作爲jar導出並將其添加到類路徑中的方法。但是,它沒有工作,我仍然得到了:java.lang.NoClassDefFoundError:無法初始化類net.sf.jasperreports.engine.util.JRStyledTextParser 錯誤。是否有一個特定的名稱,我應該提供給從iReports創建的jar,或者任何名字都可以嗎? – Suhasini

+0

你使用什麼字體?確保它與itext庫一起工作http://stackoverflow.com/questions/35127956/how-can-i-test-if-my-font-is-rendered-correctly-in- PDF格式。 java.lang.NoClassDefFoundError說,你缺少一個庫,但我需要更多的棧跟蹤,因爲在目前我看不到哪一個 –

回答

0

與我的問題是,我已經瞭解了異常錯誤!因此遵循錯誤的解決方案。

我遵循的鏈接中提到的解決方案是爲FontName屬性添加自定義字體,而不是添加PDFFontName屬性的自定義字體。

賈斯珀的PDFExporter是指來自iText.jar的字體。因此,在我的班級中更改getFont()方法調用幫助了我。

font = FontFactory.getFont(
       pdfFont.getPdfFontName(), 
       pdfFont.getPdfEncoding(), 
       pdfFont.isPdfEmbedded(), 
       jrFont.getFontSize() * fontSizeScale, 
       pdfFontStyle, 
       forecolor 
       ); 

我改變了這一行,並提供了我的font.ttf的絕對路徑。

font = FontFactory.getFont(
       "D\\fonts\\Arial.ttf", 
       BaseFont.IDENTITY_H, 
       BaseFont.EMBEDDED, 
       jrFont.getFontSize() * fontSizeScale, 
       pdfFontStyle, 
       forecolor 
       ); 
相關問題