2014-02-25 85 views
2

我跟隨了所有可以在互聯網上找到的示例,將OTF字體嵌入到生成的PDF中,但不起作用。我使用iReport(我也爲手動創建了字體的maven jar)創建了一個字體擴展名.jar,但它不適用於字體。我還確保jasper-fonts-extension.jar位於類路徑中。我知道它,因爲當我用其他一些TTF字體替換這個字體時,它就可以工作。字體擴展名不適用於OTF字體 - JasperReports 4.7.1

Jasper Reports & iReport Version : 4.7.1 
Oracle Java SDK 7 
Ubuntu 12.04 

的字體我試圖在PDF嵌入 - -

我上運行Myraid臨(OTF

我fonts.xml看起來是這樣的:

<?xml version="1.0" encoding="UTF-8"?> 
<fontFamilies> 
    <fontFamily name="Myriad Pro"> 
    <normal><![CDATA[fonts/MyriadPro-Regular.otf]]></normal> 
    <bold><![CDATA[fonts/MYRIADPRO-BOLD.OTF]]></bold> 
    <italic><![CDATA[fonts/MYRIADPRO-CONDIT.OTF]]></italic> 
    <boldItalic><![CDATA[fonts/MYRIADPRO-BOLDIT.OTF]]></boldItalic> 
    <pdfEmbedded><![CDATA[true]]></pdfEmbedded> 
    </fontFamily> 
    <fontFamily name="Myriad Pro Lite"> 
     <normal><![CDATA[fonts/MYRIADPRO-COND.OTF]]></normal> 
     <pdfEmbedded><![CDATA[true]]></pdfEmbedded> 
    </fontFamily> 
</fontFamilies> 

與其他TTF fo NTS但是當我切換到MyraidPro字體,我得到以下錯誤

Exception in thread "main" java.lang.ExceptionInInitializerError 
at net.sf.jasperreports.engine.fill.JRBaseFiller.<init>(JRBaseFiller.java:121) 
at net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:88) 
at net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:103) 
at net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:61) 
at net.sf.jasperreports.engine.fill.JRFiller.createFiller(JRFiller.java:153) 
at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:122) 
at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:464) 
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:861) 
at com.qedrix.formbuilder.pojo.JsonForm.main(JsonForm.java:141) 

產生的原因:net.sf.jasperreports.engine.util.JRFontNotFoundException:字體「的字體/ MyriadPro-Regular.otf」不可用JVM。

我也跟着在下面的鏈接中給出的步驟:here

如果這是值得做的OTF字體,我不知道爲什麼這不會工作導出PDF時的Java而它工作在iReport的預覽模式?

回答

2

我認爲這是JasperReports中的一個小錯誤。在 「fonts.xml」

<normal><ttf>fonts/OfficinaSansStd-Book.otf</ttf></normal>

入口拋出異常。如果重命名字體文件和條目改爲

<normal><ttf>fonts/OfficinaSansStd-Book.ttf</ttf></normal>

它正常工作與我。

+0

謝謝@Thilo在將OTF重命名爲TTF後,在java和ireport 5.2.0中工作 – Anand

0

我相信你需要按照下面的答案來獲得這些字體在PDF輸出中的工作。 Use custom fonts when creating pdf using iReport

此外,您可能想要關注應用程序用於查找字體的文件調用。我建議在Linux上strace。

+0

謝謝。我已經關注了這個鏈接(我在最後的帖子中提到過)。這沒有幫助。我聽說Java有處理與Adobe 1編碼otf字體的問題;但我無法證實。你最後的發言 - 你能解釋一下嗎? – Qedrix

+0

對,在大多數操作系統中,您可以記錄文件活動以找出應用程序正在執行的文件調用。 Java很可能遍歷一組已知路徑來查找該字體名稱/文件名。 strace就是這樣的一個命令,在linux上會記錄一個應用程序正在做什麼。請參閱:http:// stackoverflow。com/questions/10384850 /看到所有的系統調用,這是由java程序製作 –