Java 从web app以PDF格式部署jasperreport时字体不起作用

Java 从web app以PDF格式部署jasperreport时字体不起作用,java,fonts,jasper-reports,export-to-pdf,Java,Fonts,Jasper Reports,Export To Pdf,在我的web应用程序中部署报表时,字体出现了一些问题。我想要在结果PDF中使用的字体是Arial、Calibri和Century哥特式 我遵循了所有的步骤,但都没有成功 以下是我所做的: 我修改了我的jasperreports\u extension.properties的内容,如下所示: net.sf.jasperreports.extension.registry.factory.simple.font.families=net.sf.jasperreports.engine.fonts.S

在我的web应用程序中部署报表时,字体出现了一些问题。我想要在结果PDF中使用的字体是Arial、Calibri和Century哥特式

我遵循了所有的步骤,但都没有成功

以下是我所做的:

我修改了我的jasperreports\u extension.properties的内容,如下所示:

net.sf.jasperreports.extension.registry.factory.simple.font.families=net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory
net.sf.jasperreports.extension.simple.font.families.dejavu=net/sf/jasperreports/fonts/fonts.xml
net.sf.jasperreports.extension.simple.font.families.arial=net/sf/jasperreports/fonts/fonts.xml
net.sf.jasperreports.extension.simple.font.families.calibri=net/sf/jasperreports/fonts/fonts.xml
net.sf.jasperreports.extension.simple.font.families.centurygothic=net/sf/jasperreports/fonts/fonts.xml
然后在net\sf\jasperreports\font中,我为包含上述每种字体的四种样式(普通、粗体、斜体和粗体)的字体放置了三个文件夹

另外,在net/sf/jasperreports/fonts上修改了font.xml,现在看起来是这样的:

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

<fontFamilies>

    <fontFamily name="DejaVu Sans">
        <normal>net/sf/jasperreports/fonts/dejavu/DejaVuSans.ttf</normal>
        <bold>net/sf/jasperreports/fonts/dejavu/DejaVuSans-Bold.ttf</bold>
        <italic>net/sf/jasperreports/fonts/dejavu/DejaVuSans-Oblique.ttf</italic>
        <boldItalic>net/sf/jasperreports/fonts/dejavu/DejaVuSans-BoldOblique.ttf</boldItalic>
        <pdfEncoding>Identity-H</pdfEncoding>
        <pdfEmbedded>true</pdfEmbedded>
        <exportFonts>
            <export key="net.sf.jasperreports.html">'DejaVu Sans', Arial, Helvetica, sans-serif</export>
            <export key="net.sf.jasperreports.xhtml">'DejaVu Sans', Arial, Helvetica, sans-serif</export>
        </exportFonts>
        <!--
        <locales>
            <locale>en_US</locale>
            <locale>de_DE</locale>
        </locales>
        -->
    </fontFamily>

    <fontFamily name="DejaVu Serif">
        <normal>net/sf/jasperreports/fonts/dejavu/DejaVuSerif.ttf</normal>
        <bold>net/sf/jasperreports/fonts/dejavu/DejaVuSerif-Bold.ttf</bold>
        <italic>net/sf/jasperreports/fonts/dejavu/DejaVuSerif-Italic.ttf</italic>
        <boldItalic>net/sf/jasperreports/fonts/dejavu/DejaVuSerif-BoldItalic.ttf</boldItalic>
        <pdfEncoding>Identity-H</pdfEncoding>
        <pdfEmbedded>true</pdfEmbedded>
        <exportFonts>
            <export key="net.sf.jasperreports.html">'DejaVu Serif', 'Times New Roman', Times, serif</export>
            <export key="net.sf.jasperreports.xhtml">'DejaVu Serif', 'Times New Roman', Times, serif</export>
        </exportFonts>
    </fontFamily>

    <fontFamily name="DejaVu Sans Mono">
        <normal>net/sf/jasperreports/fonts/dejavu/DejaVuSansMono.ttf</normal>
        <bold>net/sf/jasperreports/fonts/dejavu/DejaVuSansMono-Bold.ttf</bold>
        <italic>net/sf/jasperreports/fonts/dejavu/DejaVuSansMono-Oblique.ttf</italic>
        <boldItalic>net/sf/jasperreports/fonts/dejavu/DejaVuSansMono-BoldOblique.ttf</boldItalic>
        <pdfEncoding>Identity-H</pdfEncoding>
        <pdfEmbedded>true</pdfEmbedded>
        <exportFonts>
            <export key="net.sf.jasperreports.html">'DejaVu Sans Mono', 'Courier New', Courier, monospace</export>
            <export key="net.sf.jasperreports.xhtml">'DejaVu Sans Mono', 'Courier New', Courier, monospace</export>
        </exportFonts>
    </fontFamily>

    <!--
        Mapping Java logical fonts, for the sake of HTML export only.
    -->

    <fontFamily name="SansSerif">
        <exportFonts>
            <export key="net.sf.jasperreports.html">'DejaVu Sans', Arial, Helvetica, sans-serif</export>
            <export key="net.sf.jasperreports.xhtml">'DejaVu Sans', Arial, Helvetica, sans-serif</export>
        </exportFonts>
    </fontFamily>
    <fontFamily name="Serif">
        <exportFonts>
            <export key="net.sf.jasperreports.html">'DejaVu Serif', 'Times New Roman', Times, serif</export>
            <export key="net.sf.jasperreports.xhtml">'DejaVu Serif', 'Times New Roman', Times, serif</export>
        </exportFonts>
    </fontFamily>
    <fontFamily name="Monospaced">
        <exportFonts>
            <export key="net.sf.jasperreports.html">'DejaVu Sans Mono', 'Courier New', Courier, monospace</export>
            <export key="net.sf.jasperreports.xhtml">'DejaVu Sans Mono', 'Courier New', Courier, monospace</export>
        </exportFonts>
    </fontFamily>

    <fontFamily name="Arial">
       <normal>net/sf/jasperreports/fonts/arial/arial.ttf</normal>
       <bold>net/sf/jasperreports/fonts/arial/ArialBold.ttf</bold>
       <italic>net/sf/jasperreports/fonts/arial/ArialItalic.ttf</italic>
       <boldItalic>net/sf/jasperreports/fonts/arial/ArialBoldItalic.ttf</boldItalic>
       <pdfEncoding>Identity-H</pdfEncoding>
       <pdfEmbedded>true</pdfEmbedded>
       <exportFonts>
           <export key="net.sf.jasperreports.html">'Arial'</export>
           <export key="net.sf.jasperreports.xhtml">'Arial'</export>
       </exportFonts>
    </fontFamily>

    <fontFamily name="Calibri">
       <normal>net/sf/jasperreports/fonts/calibri/calibri.ttf</normal>
       <bold>net/sf/jasperreports/fonts/calibri/calibri-bold.ttf</bold>
       <italic>net/sf/jasperreports/fonts/calibri/calibri-italic.ttf</italic>
       <boldItalic>net/sf/jasperreports/fonts/calibri/calibri-bold-italic.ttf</boldItalic>
       <pdfEncoding>Identity-H</pdfEncoding>
       <pdfEmbedded>true</pdfEmbedded>
       <exportFonts>
           <export key="net.sf.jasperreports.html">'Calibri'</export>
           <export key="net.sf.jasperreports.xhtml">'Calibri'</export>
       </exportFonts>
    </fontFamily>

    <fontFamily name="Century Gothic">
       <normal>net/sf/jasperreports/fonts/centurygothic/century-gothic.ttf</normal>
       <bold>net/sf/jasperreports/fonts/centurygothic/century-gothic-bold.ttf</bold>
       <italic>net/sf/jasperreports/fonts/centurygothic/century-gothic-italic.ttf</italic>
       <boldItalic>net/sf/jasperreports/fonts/centurygothic/century-gothic-bold-italic.ttf</boldItalic>
       <pdfEncoding>Identity-H</pdfEncoding>
       <pdfEmbedded>true</pdfEmbedded>
       <exportFonts>
           <export key="net.sf.jasperreports.html">'Century Gothic'</export>
           <export key="net.sf.jasperreports.xhtml">'Century Gothic'</export>
       </exportFonts>
    </fontFamily>   


</fontFamilies>

net/sf/jasperreports/font/dejavu/DejaVuSans.ttf
net/sf/jasperreports/font/dejavu/DejaVuSans-Bold.ttf
net/sf/jasperreports/fonts/dejavu/DejaVuSans-sloble.ttf
net/sf/jasperreports/fonts/dejavu/DejaVuSans-boldsloble.ttf
身份-H
真的
“无衬线”,Arial,Helvetica,无衬线
“无衬线”,Arial,Helvetica,无衬线
net/sf/jasperreports/font/dejavu/DejaVuSerif.ttf
net/sf/jasperreports/font/dejavu/DejaVuSerif-Bold.ttf
net/sf/jasperreports/fonts/dejavu/DejaVuSerif-Italic.ttf
net/sf/jasperreports/fonts/dejavu/DejaVuSerif-BoldItalic.ttf
身份-H
真的
“DejaVu衬线”,“泰晤士报新罗马”,泰晤士报,衬线
“DejaVu衬线”,“泰晤士报新罗马”,泰晤士报,衬线
net/sf/jasperreports/font/dejavu/DejaVuSansMono.ttf
net/sf/jasperreports/font/dejavu/DejaVuSansMono-Bold.ttf
net/sf/jasperreports/fonts/dejavu/DejaVuSansMono-del斜.ttf
net/sf/jasperreports/fonts/dejavu/DejaVuSansMono-boldsloble.ttf
身份-H
真的
“DejaVu Sans Mono”,“Courier New”,Courier,monospace
“DejaVu Sans Mono”,“Courier New”,Courier,monospace
“无衬线”,Arial,Helvetica,无衬线
“无衬线”,Arial,Helvetica,无衬线
“DejaVu衬线”,“泰晤士报新罗马”,泰晤士报,衬线
“DejaVu衬线”,“泰晤士报新罗马”,泰晤士报,衬线
“DejaVu Sans Mono”,“Courier New”,Courier,monospace
“DejaVu Sans Mono”,“Courier New”,Courier,monospace
net/sf/jasperreports/font/arial/arial.ttf
net/sf/jasperreports/font/arial/ArialBold.ttf
net/sf/jasperreports/fonts/arial/ArialItalic.ttf
net/sf/jasperreports/font/arial/ArialBoldItalic.ttf
身份-H
真的
“Arial”
“Arial”
net/sf/jasperreports/font/calibri/calibri.ttf
net/sf/jasperreports/font/calibri/calibri-bold.ttf
net/sf/jasperreports/fonts/calibri/calibri-italic.ttf
net/sf/jasperreports/font/calibri/calibri-bold-italic.ttf
身份-H
真的
“卡利布里”
“卡利布里”
net/sf/jasperreports/font/centurygothic/century-gothic.ttf
net/sf/jasperreports/font/centurygothic/century-gothic-bold.ttf
net/sf/jasperreports/font/centurygothic/century-gothic-italic.ttf
net/sf/jasperreports/font/centurygothic/century-gothic-bold-italic.ttf
身份-H
真的
“世纪哥特式”
“世纪哥特式”
注意,我刚刚添加了最后三种字体

之后,我准备了jar文件,并将其作为必需文件放入我的应用程序类路径中。到目前为止,我只是得到了报告导出与正常Sanserif字体

我不知道我做错了什么,有什么想法吗

谢谢


快速信息提示:我使用的是Jaspersoft Studio社区版(6.3.0),我的应用程序部署在JBoss服务器上。

我终于发现了我的案例中发生了什么,现在它开始工作了

当我在Jaspersoft Studio Windows->Preferences->fonts中引入字体(.ttf扩展名)时,我为PDF编码选择组合选择了一个错误的值。我首先选择了CP1252(西欧ANSI又称WinAnsi),这是错误的,如果你想导出PDF格式的报告,然后我选择了Identity-H(Unicode水平书写),效果很好

然而,我仍然不明白的是:如果在我的报告中我只使用Calibri和Century哥特式字体,为什么在我去看PDF(文件->属性->字体)中使用的字体时,我也会在使用的字体列表中看到Helvetica

  • 将jasper报表中的字体导出为扩展名(.jar)(工具/选项/字体)
  • 将导出的字体jar添加到项目中


  • 通过在pom中包含以下maven依赖项,粗体样式将显示在生成的PDF中

    <dependency>
      <groupid>net.sf.jasperreports</groupid>
      <artifactid>jasperreports-fonts</artifactid>
      <version>6.0.0</version>
    </dependency>
    
    
    net.sf.jasperreports
    jasperreports字体
    6.0.0
    
    通常情况下,与博客相比,博客更受欢迎。很抱歉得知您正在使用JBoss。@Lille调试(远程或本地)有助于诊断问题。在此过程中,您可以轻松检查字体可用性。您是否尝试编写小型控制台应用程序(或测试)来检查本地问题?@Lille可能ttf文件位置错误,或者您使用的字体错误(报告的模板问题)@DaveJarvis我也在与maven合作,所以我现在的问题是如何在maven的pom.xml中放置字体的依赖关系?@AlexK我用四个文本字段做了一个简单的模板,仅此而已。如果我在JSS中执行报告,它工作得很好,甚至可以从那里导出PDF。当我把这个模板放到我的应用程序(web)中并从那里部署它时,问题就来了。我所做的是,我将字体添加到JSS(Arial、Calibri和Century哥特式)和