Jasper Reports:字体扩展无效

时间:2016-04-14 14:17:36

标签: java maven pdf fonts jasper-reports

我在我作为PDF导出的某个报告中使用了多种字体,我使用IREPORT来设计报告。

在预览部分,报告看起来不错,但是当我从我的网络应用程序中导出报告时,看起来我在整个报告中使用了一种字体。

我已经搜索了这个问题,我找到了两个解决方案:

  1. 将字体从IREPORT导出为.jar文件,并将其添加到我的项目中[不是一种干净的方式,因为我使用Maven]。

  2. 使用jasperreports_extension.properties [我遇到问题的人!]。

  3. 我一步一步地跟着this教程,但仍然没有结果没有错误没有任何结果。

    以下是我使用的代码:

    jasperreports_extension.properties:

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

    fonts.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    
    <fontFamilies>
    
        <fontFamily name="Arial">
            <normal><![CDATA[fonts/arial.ttf]]></normal>
            <pdfEmbedded><![CDATA[true]]></pdfEmbedded>
        </fontFamily>
    
        <fontFamily name="Algerian">
            <normal><![CDATA[fonts/Algerian.ttf]]></normal>
            <pdfEmbedded><![CDATA[true]]></pdfEmbedded>
        </fontFamily>
    
        <fontFamily name="Bell Mt">
            <normal><![CDATA[fonts/bell-mt.ttf]]></normal>
            <pdfEmbedded><![CDATA[true]]></pdfEmbedded>
        </fontFamily>
    
        <fontFamily name="Savoye Std">
            <normal><![CDATA[fonts/SavoyeStd.ttf]]></normal>
            <pdfEmbedded><![CDATA[true]]></pdfEmbedded>
        </fontFamily>
    
        <fontFamily name="Cambria">
            <normal><![CDATA[fonts/Cambria.ttf]]></normal>
            <normal><![CDATA[fonts/cambriab.ttf]]></normal>
            <normal><![CDATA[fonts/cambriai.ttf]]></normal>
            <normal><![CDATA[fonts/cambriaz.ttf]]></normal>
            <pdfEmbedded><![CDATA[true]]></pdfEmbedded>
        </fontFamily>
    
    </fontFamilies>
    

    由于我使用弹簧,我也尝试了这个 fonts.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    
    <beans:beans 
    
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans"
    
        xmlns:jee="http://www.springframework.org/schema/jee"
    
        xsi:schemaLocation="
    
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    
            http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.3.xsd
    
            http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.0.xsd">
    
        <beans:bean id="Arial" class="net.sf.jasperreports.engine.fonts.SimpleFontFamily">
    
            <beans:property name="name" value="Arial"/>
            <beans:property name="normal" value="fonts/arial.ttf"/>       
            <beans:property name="pdfEncoding" value="Identity-H"/>
            <beans:property name="pdfEmbedded" value="true"/>
    
        </beans:bean>
    
        <beans:bean id="Algerian" class="net.sf.jasperreports.engine.fonts.SimpleFontFamily">
    
            <beans:property name="name" value="Algerian"/>
            <beans:property name="normal" value="fonts/Algerian.ttf"/>       
            <beans:property name="pdfEncoding" value="Identity-H"/>
            <beans:property name="pdfEmbedded" value="true"/>
    
        </beans:bean>
    
        <beans:bean id="BellMt" class="net.sf.jasperreports.engine.fonts.SimpleFontFamily">
    
            <beans:property name="name" value="Bell Mt"/>
            <beans:property name="normal" value="fonts/bell-mt.ttf"/>       
            <beans:property name="pdfEncoding" value="Identity-H"/>
            <beans:property name="pdfEmbedded" value="true"/>
    
        </beans:bean>
    
        <beans:bean id="SavoyeStd" class="net.sf.jasperreports.engine.fonts.SimpleFontFamily">
    
            <beans:property name="name" value="Savoye Std"/>
            <beans:property name="normal" value="fonts/SavoyeStd.ttf"/>       
            <beans:property name="pdfEncoding" value="Identity-H"/>
            <beans:property name="pdfEmbedded" value="true"/>
    
        </beans:bean>
    
        <beans:bean id="Cambria" class="net.sf.jasperreports.engine.fonts.SimpleFontFamily">
    
            <beans:property name="name" value="Cambria"/>
            <beans:property name="normal" value="fonts/Cambria.ttf"/>
            <beans:property name="bold" value="fonts/cambriab.ttf"/>
            <beans:property name="italic" value="fonts/cambriai.ttf"/>
            <beans:property name="boldItalic" value="fonts/cambriaz.ttf"/>       
            <beans:property name="pdfEncoding" value="Identity-H"/>
            <beans:property name="pdfEmbedded" value="true"/>
    
        </beans:bean>
    
    </beans:beans>
    

    根包中字体文件夹中的字体文件。

3 个答案:

答案 0 :(得分:6)

非常感谢@Tunaki帮助我解决这个问题。

通过将 jasperreports_extension.properties fonts文件夹放在项目的根目录中解决了这个问题:

enter image description here

答案 1 :(得分:0)

是的,使用简单的xml字体文件对我有用。 这是fonts.xml文件:

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

<fontFamilies>

    <fontFamily name="Arial Unicode MS">
        <normal><![CDATA[fonts/ARIALUNI.TTF]]></normal>
        <pdfEncoding>Identity-H</pdfEncoding>
        <pdfEmbedded><![CDATA[false]]></pdfEmbedded>
    </fontFamily>

</fontFamilies>

这是 src \ main \ resources \ jasperreports_extension.properties

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

这是结构:

enter image description here

在您的代码中,无需执行任何操作,只需在正常情况下打印,UTF-8即可工作!

答案 2 :(得分:0)

我遇到了类似的问题,即IReport设计器预览版能够以粗体显示字体,但不能从Spring Boot下载的报告中显示字体。

我添加了以下Maven依赖项并解决了我的问题。 https://mvnrepository.com/artifact/net.sf.jasperreports/jasperreports-fonts