2012-02-13 61 views
5

我想在PDF文檔中使用外部字體。在通過設置 - >字體 - >安裝新字體安裝iReport後,我沒有任何問題。iReport外部字體

的問題,當我出口的新字體的延伸和補充說,罐子的Java項目的類路徑 - 不能生成PDF和失敗

JRFontNotFoundException: Font 'Arial Custom' is not available to the JVM exception

我做錯了嗎? 謝謝

UPD#1:

jasperreports_extensions.properties

net.sf.jasperreports.extension.registry.factory.fonts=net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory 
net.sf.jasperreports.extension.simple.font.families.ireportfamily1329192368547=fonts/fontsfamily1329192368547.xml 

fontsfamily1329192368547.xml

<?xml version="1.0" encoding="UTF-8"?> 
<fontFamilies> 

    <fontFamily name="Arial Custom"> 
     <normal><![CDATA[fonts/arial.ttf]]></normal> 
     <bold><![CDATA[fonts/arialbd.ttf]]></bold> 
     <italic><![CDATA[fonts/ariali.ttf]]></italic> 
     <boldItalic><![CDATA[fonts/arialbi.ttf]]></boldItalic> 
     <pdfEncoding><![CDATA[Identity-H]]></pdfEncoding> 
     <pdfEmbedded><![CDATA[true]]></pdfEmbedded> 
     <locales> 
       <locale><![CDATA[en_US]]></locale> 
     </locales> 
    </fontFamily>  

</fontFamilies> 

fonts目錄包括所有的ttf文件。我只是將該jar添加到classpath中。

+0

您可以發佈帶有字體定義的xml文件和使用此字體的jrxml文件的片段嗎? – 2012-02-13 16:52:55

+0

感謝您的回覆。查看有問題的更新 – nKognito 2012-02-14 04:14:07

+0

Alex要求提供.jrxml文件。你還沒有發佈。 – mdahlman 2012-02-14 06:53:59

回答

12

這是我的工作示例。

字體定義文件(我把它挖出來,從字體的jar文件):

<?xml version="1.0" encoding="UTF-8"?> 
<fontFamilies> 
    <fontFamily name="Arial"> 
     <normal><![CDATA[fonts/arial.ttf]]></normal> 
     <bold><![CDATA[fonts/arialbd.ttf]]></bold> 
     <italic><![CDATA[fonts/ariali.ttf]]></italic> 
     <boldItalic><![CDATA[fonts/arialbi.ttf]]></boldItalic> 
     <pdfEncoding><![CDATA[Identity-H]]></pdfEncoding> 
     <pdfEmbedded><![CDATA[false]]></pdfEmbedded> 
    </fontFamily> 
</fontFamilies> 

的jar文件是在應用程序的類路徑。

這是我的Java代碼:

String defaultPDFFont = "Arial"; 

JRProperties.setProperty("net.sf.jasperreports.awt.ignore.missing.font", "true"); 
JRProperties.setProperty("net.sf.jasperreports.default.font.name", defaultPDFFont); 

JasperReport jasperReport = JasperCompileManager.compileReport(reportSource); 
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params); 

JasperExportManager.exportReportToPdfFile(jasperPrint, outputFileName); 

我設置net.sf.jasperreports.awt.ignore.missing.font屬性,以防止你的錯誤(JRFontNotFoundException: Font 'Arial Custom' is not available to the JVM exception)的情況下,字體缺失。並且我設置了用於確定將在生成的pdf文件中使用的字體的屬性net.sf.jasperreports.default.font.name屬性。

你可以閱讀有關此屬性的信息:net.sf.jasperreports.awt.ignore.missing.fontnet.sf.jasperreports.default.font.name

生成的pdf文件使用此字體(本示例中爲Arial)。

+0

謝謝!我發現我的問題在哪裏 - 我將字體安裝爲嵌入式。 – nKognito 2012-02-14 13:12:32

+0

@nKognito歡迎:) – 2012-02-14 13:43:47

+0

@AlexK非常感謝!!!! – Kaiser 2014-01-31 13:12:22