【问题标题】:Fonts not working when deploying jasperreport in PDF from web app从 Web 应用程序以 PDF 格式部署 jasperreport 时字体不起作用
【发布时间】:2017-03-30 16:21:39
【问题描述】:

在我的 Web 应用程序中部署报告时,我遇到了一些字体问题。我希望在结果 pdf 中使用的字体是 Arial、Calibri 和 Century Gothic。

我按照here 指出的所有步骤进行操作,但无法正常工作。

这就是我所做的:

我修改了我的 jasperreports_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\fonts 我把包含四种样式的字体的三个文件夹(普通、粗体斜体bold-italic) 用于前面提到的每种字体。

另外,修改了 net/sf/jasperreports/fonts 中的 fonts.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>

请注意,我刚刚添加了最后三种字体。

之后,我准备了 jar 文件并将其强制放入我的应用程序类路径中。到目前为止,我刚刚得到了使用普通 Sanserif 字体导出的报告...

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

谢谢!

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

【问题讨论】:

  • 通常official documentation 应该优先于博客。很抱歉得知您正在使用 JBoss。
  • @Lille 调试(远程或本地)可以帮助诊断问题。您可以在此过程中轻松检查字体可用性。您是否尝试编写小型控制台应用程序(或测试)来检查本地问题?
  • @Lille 可能是 ttf 文件位置错误或者您使用的字体错误(报告的模板问题)
  • @DaveJarvis 我也在使用 maven,所以我现在的问题是如何将字体的依赖项放在 maven 的 pom.xml 中?
  • @AlexK 我用四个文本字段做了一个简单的模板,仅此而已。如果我在 JSS 中执行报告,它可以正常工作,甚至可以从那里导出 PDF。当我将此模板放入我的应用程序(Web)并从那里部署它时,问题就出现了。我所做的是,我将字体添加到 JSS(Arial、Calibri 和 Century Gothic)中,然后将其导出为 jar。将 jar 放在我的类路径(Java Biuld Path)中,并将正确的依赖项放在 pom.xml 文件中......在我的应用程序中部署时仍然无法正常工作。我应该看什么或其他地方?顺便说一句,我怎样才能调试并找出字体丢失?

标签: java fonts jasper-reports export-to-pdf


【解决方案1】:

我终于发现我的情况发生了什么,现在它正在工作。

当我在 Jaspersoft Studio Windows->Preferences->Fonts 中引入字体(.ttf 扩展名)时,我为 PDF 编码选择组合选择了错误的值。我首先选择 CP1252 (Western European ANSI aka WinAnsi) 如果您想以 PDF 格式导出报告,这是 错误,然后我选择了 Identity-H(Unicode 与水平写作),它工作得很好。

但是,我仍然不明白的是:如果在我的报告中我只使用 Calibri 和 Century Gothic 字体,为什么当我去查看我的 PDF 中使用的字体时(File-> Properties->Fonts) 我在使用的字体列表中也看到了 Helvetica?

【讨论】:

    【解决方案2】:
    1. 将 jasper 报告中的字体导出为扩展名 (.jar)(工具/选项/字体)。
    2. 将导出的字体 jar 添加到您的项目中。

      https://community.jaspersoft.com/wiki/how-fix-problem-custom-fonts-jasperreports-server

    【讨论】:

      【解决方案3】:

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

      <dependency>
        <groupid>net.sf.jasperreports</groupid>
        <artifactid>jasperreports-fonts</artifactid>
        <version>6.0.0</version>
      </dependency>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-07-13
        • 1970-01-01
        • 1970-01-01
        • 2021-05-03
        • 2021-11-04
        • 1970-01-01
        • 2013-05-22
        • 1970-01-01
        相关资源
        最近更新 更多