Jasper Reports:字体扩展未生效

10

我在我的报告中使用了多种字体,并将其导出为PDF,我使用IREPORT设计我的报告。

预览部分报告看起来很好,但是当我从我的Web应用程序中导出它时,它看起来像是我对整个报告使用了一种字体。

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

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

  2. 使用jasperreports_extension.properties[这就是我遇到问题的部分!]。

我按照这个教程逐步操作,但仍然没有结果,没有错误,也没有任何反应。

以下是我使用的代码:

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>

由于我正在使用Spring,因此我也尝试了这个 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>

同时还需将字体文件存放在根目录下的font文件夹中。


为什么这个被标记为Maven?如果它与Maven相关,请贴出你的POM文件。并更详细地解释一下你的问题。 - Tunaki
我只是使用Maven项目来处理依赖关系!!! 如果您认为有必要,我可以发布我的pom.xml。 - simoi chigo
1
好的。文件 jasperreports_extension.propertiesfonts.xml 位于哪里?它们应该在 src/main/resources 下面。 - Tunaki
我将它们放在项目的根目录中,与 src 目录处于同一级别。 - simoi chigo
1
抱歉,它起作用了!我正在使用Spring的fonts.xml,我刚刚将其删除并使用了普通的fonts.xml。非常感谢!!!!你能添加一个答案,这样我就可以将其标记为已解决。 - simoi chigo
显示剩余3条评论
3个回答

15

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

问题的解决是将jasperreports_extension.properties字体文件夹放在项目的根目录中,像这样:

图片描述


4

是的,对我来说使用简单的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 将起作用!


还需要在部署Web应用程序的服务器上安装字体。 - nobjta_9x_tq

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接