JasperReportsを使用するJVMではフォントを使用できません


91

DynamicJasperを使用してレポートを生成しようとしていますが、次のエラーが発生します。

net.sf.jasperreports.engine.util.JRFontNotFoundException:  
                                 Font 'Arial' is not available to the JVM.   

msttcorefontsがインストールされていますが、JVMはそこからフォントを使用していないと思います。

Ubuntu10.04を使用しています。

どうすればこれを修正できますか?


3
私は実際にそれを無視しています...次の "net.sf.jasperreports.awt.ignore.missing.font = true"の悪い考えを設定するだけです...しかし、しばらくの間問題を解決します....
Andrew

UbuntuにMicrosoftフォントをインストールする必要があります。詳細については、このリンクを参照してください。.. embraceubuntu.com/2005/09/09/installing-microsoft-fonts
Sivaramakrishnan

1
これはどこに設定しますか?編集するjasperreports.propertiesファイルが存在しないjbillingに埋め込まれたバージョンのjasperreportsを使用しています。
Darragh


1
@Andrew、これは良い解決策のようには思えませんが(質問が古いことは知っています)、レポートの不整合を回避する方が良いかもしれません。私は答えを渡しました。
ペッターフリバーグ2016

回答:


63

mscorefontsをインストールしようとしましたが、パッケージがインストールされ、最新の状態でした。

sudo apt-get update
sudo apt-get install ttf-mscorefonts-installer

ファイルシステムでフォントを検索してみました。

ls /usr/share/fonts/truetype/msttcorefonts/

このフォルダにはREADMEがあり、インストール方法の正しい手順が記載されています。

cat /usr/share/fonts/truetype/msttcorefonts/README

これにはインターネット接続が必要です。

sudo apt-get install --reinstall ttf-mscorefonts-installer

再インストールしttf-mscorefonts-installer(上記のように、必ずEULAに同意してください!)、問題は解決しました。


5
他のLinuxフレーバーのFYIは、sudo apt-get install msttcorefonts
KCD

CentOSとRHEL6の場合、EULAの問題をどのように解決しますか?yum installには、受け入れるオプションがありません。アイデアはありますか?
Darragh

最も一般的なWindowsOSはどうですか?
sarz 2015

これは単一のPCでの回避策であり、エンコーディングの問題は解決されません。正しい方法は、回答を投稿したフォント拡張子を使用することです
Petter Friberg 2016

1
答えは、フォントがすでにインストールされているが、ライセンスが承認されていない状況に対して正しいです。最初の自動インストールを正しく実行しようとしている場合に実行する手順は次のとおりです。sudoechottf-mscorefonts-installermsttcorefonts / accepted-mscorefonts-eula select true | debconf-set-selections && apt-get install -y -q ttf-mscorefonts-installer
Aleksander Lech

35

JasperReportsは、レポートテンプレート内で使用されるフォントが、システムフォントまたはJRフォント拡張からのフォントとしてJVMで使用できない場合に、JRFontNotFoundExceptionを発生させます。これにより、フォントメトリックの不一致によって引き起こされるすべての問題が回避され、不整合について早期に警告が表示されます。

Jasper Reportsは、またはで定義されたフォントが見つからないため、レポートを正しくエクスポートできないと述べて、レポート開発を支援しようとしています。TextFieldStaticText

<font fontName="Arial"/>

はい、net.sf.jasperreports.awt.ignore.missing.fontをtrueに設定することでこれを無効にできますが、エクスポートの不整合が発生します。

はい、フォントをJVMシステムフォントとしてインストールできます(ただし、レポートを生成する可能性のある使用するすべてのPCでインストールする必要がありますが、引き続き使用できます。エンコードの問題)。

正しい方法です!

フォント拡張機能を使用してください!あなたは(下のリンクを参照してください)独自に作成したい場合には、碧玉レポートは、デフォルトフォントの拡張子jarを(配布jasperreports-fonts-x.x.x.jar)ことを裏付けたfontName DejaVu SansDejaVu SerifおよびDejaVu Sans Mono

<font fontName="DejaVu Sans"/>

JasperReport Ultimate Guideから:

レポートが実行時に実行されるときにフォントがアプリケーションで使用できるようにする唯一の方法であるため、フォント拡張子から派生したフォントのみを使用することを強くお勧めします。システムフォントを使用すると、それらのフォントがインストールされていない可能性のある新しいマシンに展開すると、レポートが正しく機能しないリスクが常に発生します。

PDFでフォントを正しくレンダリングする方法に関するStackOverflowのリンク

PDFでフォントを正しくレンダリングする方法に関するチェックリスト

JasperSoftStudioでフォント拡張を生成する

iReportでフォント拡張子を生成する


JasperとJVMがシステム(C:\ windows \ fontsにある)に存在するフォントでPDFをレンダリングできなかった理由を教えてください。代わりに、Jar Font拡張機能を作成し、ライブラリとしてに追加する必要があります。プロジェクトのクラスパス(私はJavaとEclipseを使用しています)。私は答えをグーグルで検索しようとしましたが、理解できる説明が見つかりませんでした。また、このexporting-pdf-font-problemsもApache FOPで見られます(フォント拡張は必要ありませんが、font-metric-fileを作成し、フォントを正しくレンダリングするためにいくつかの追加構成を行う必要がありました)
EagerToLearn 2017年

1
@EagerToLearnそれはすべてpdfを生成しているitextライブラリに帰着します。フォントを正しくレンダリングするためのitexにはfont-extensionsが必要です(フォントが含まれているだけでなく、埋め込みeccが指定されている場合はエンコーディングも必要です)。これを提供しない場合、itexはフォントをレンダリングするために「ベストエフォート」と呼ばれる処理を実行します。あなたは私たちが必要としていることをしていません(ドキュメントに書かれています)、最善を尽くしましょう、しかしあなたのせいです。したがって、この質問で受け入れられた答えは正しくありません!、フォント拡張機能が必要です。指定しない場合は、作成されたものをすべて使用する必要があります。
ペッターフリバーグ2017年

答えてくれてありがとう、でもそれでもフォントの問題はiTextライブラリの動作に関係しているとしか思えない。このフォントのことは、私の技術的な理解能力をはるかに超えているの
かもしれませ

@eag理解するのはこれだけではありません。フォントをレンダリングするには、.ttfがどこにあるかを知る必要があり、テキストのエンコーディングを知る必要があります。この情報を知るためのライブラリの開発者はフォント拡張子を作成しました。提供しない場合は推測を開始する必要があります。場合によっては機能しないのは、「推測」が正しくないためですが、ライブラリのせいにすることはできません。これは、「推測」を回避するためのシステムを提供しているためです
Petter Friberg 2017年

22

IReportを使用してフォントをインストールします。

ツール->オプション->フォント-> [フォントのインストール]をクリックします

次に、フォントを選択してクリックします

->拡張子とタイプ名myfont.jarとしてエクスポート

このjarとspring.jar *をビルドパスに追加します。

* Jaspersoft \ iReport-3.7.0 \ ireport \ modules \ extからspring.jarをコピーします


1
完了するために、arial ttfはc:/ windows / fontsにあります(少なくともwin xpでは):arial.ttf、arialbd.ttf(bold)、ariali.ttf(italic)、arialbi(bold-italic)
jneira

ビルドパスにspring.jarを追加すると、修正されました。
fishjd 2012

この方法は実際に私のために働いた。フォントをjarファイルとしてパッケージ化し、クラスパスに追加すると、正常に機能します。
Satya 2013

font-extensionが正しく作成されていれば、spring.jarを追加する必要はありません。
ペッターフリバーグ2016

このツール->オプション->フォント->クリックインストールはMacでは使用できません。:(何か提案はありますか?
L-Samuels 2016年

13

sudo apt-get install msttcorefonts (Ubuntu開発環境で)動作しますが、あまり良いソリューションではありません。

代わりに、このヒントに基づいて、フォントをアプリケーションにバンドルしました。彼らのJARファイルには、次のフォントがバンドルされています。

  • Arial
  • タイムズニューローマン
  • クーリエ新
  • Comic Sans MS
  • ジョージア
  • ヴェルダナ
  • 等幅

jarをダウンロードするための直接リンク: Mavenver1.0。DynamicFonts


これは、標準のmvnリポジトリからダウンロードできるようになりました。例:mvnrepository.com/artifact/ar.com.fdvs/DynamicJasper-core-fonts
Markus Pscheidt 2018


9

このような問題を回避するには、3つの方法があります。

方法1:不足しているフォントプロパティを無視するように設定します。

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

または、.jrxmlファイルに次の行を入力してこのプロパティを設定できます。

<property name="net.sf.jasperreports.awt.ignore.missing.font" value="true"/>

方法2:デフォルトのフォントプロパティを設定します。

JRProperties.setProperty("net.sf.jasperreports.default.font.name", "Sans Serif");

または、.jrxmlファイルに次の行を入力してこのプロパティを設定できます。

<property name="net.sf.jasperreports.default.font.name" value="Sans Serif"/>

方法3:不足しているフォントプロパティを追加します。

まず、[ツール] >> [オプション] >> [フォント] >> [フォントのインストール]を選択して、不足しているフォントをIReportにインストールします。次に、すべてのフォントを選択し、.jar拡張子を付けて[拡張子としてエクスポート]をクリックしてエクスポートします。

このjarは、プロジェクトライブラリまたはクラスパスに存在するJasperreports-font.XXXjarに使用できます。


5

これを解決するには、「SansSerif」または「Serif」のみを選択し、「Arial」または「TimesNewRoman」は選択しませんでした。


6
例外の文書によると(jasperreports.sourceforge.net/api/net/sf/jasperreports/engine/…)によると、この方法は明示的に推奨されていません。これらのフォントは異なるシステム上の異なるシステムフォントにマップされる可能性があるため、予期しないレンダリングの問題が発生する可能性があります。
ダグ

3

プロジェクトでmavenを使用している場合は、jasper-fonts依存関係をpom.xmlに追加するだけです。

<dependency>
    <groupId>net.sf.jasperreports</groupId>
    <artifactId>jasperreports-fonts</artifactId>
    <version>6.8.1</version>
</dependency>

不足しているフォントをシステムにインストールすることは有効な解決策かもしれませんが、私にとってはそうではありません。新しいサーバーに展開するたびに不足しているフォントをインストールする必要はなく、代わりにアプリケーションにフォントを埋め込むことを選択しました。

よろしく。


2

iReportを介してカスタムフォントを作成し、jarファイルのように変換できます


2

行を追加してみてください

net.sf.jasperreports.awt.ignore.missing.font = true

jasperreports.propertiesファイルに。

Jasperは1つのフォントの検索を停止します


1
そしてそれは悪い考えです...エクスポートの不整合!
ペッターフリバーグ2016

@PetterFribergいいえ、それは優れたフォールバックメカニズムです。JVMを常に制御できるとは限りません。フォールバックメカニズムを使用することは常に良い考えです。たとえ結果が理想的でなくても、顧客のマシンでフォントが欠落しているためにアプリケーションがクラッシュするよりはましです。
jwenting

@jwentingはfont-extensionsを追加し、クラッシュしません。何か間違ったことをしていることを無効にしている場合は、私を信じてください。代わりに、根本的な問題(フォント拡張子がない)を解決する必要があります。そして、はい、いつでもJVMを制御できます。
ペッターフリバーグ

@jwenting注意:解決策は、サーバーにフォントをインストールしないことです(受け入れの答えが言うように、それは間違っています!)。解決策は、依存関係のフォント拡張子を生成して追加することです。正解のためにこれを参照してくださいstackoverflow.com/a/35549391
ペターFribergの

@PetterFribergこれはしばしば不可能です。たとえば、私が管理しているアプリケーションはサーバー上で実行されますが、ユーザーは特定の命名規則を使用してカスタム.jrxmlファイルを追加し、標準で提供されている以上のカスタムレポートを生成できます。.jrxmlで指定されている使用可能なフォントがサーバーにない場合にこれらのレポートがクラッシュしないようにするため、フォールバックを使用します。
jwenting

2

フォントをインストールすることでそれを行うことができます。つまり、その特定のアプリケーションを実行したい場所ならどこでも実行できます。最も簡単な方法は、このbl行をjrxmlファイルに追加することです。

 <property name="net.sf.jasperreports.awt.ignore.missing.font" value="true"/>

それが役に立てば幸い。


1
ただし、これによりエクスポートの不整合が発生します(したがって、jrxmlで示されたフォントでレンダリングできません)。私の答えを見てください。
ペッターフリバーグ2016

2

Debianの場合

追加

non-free contrib

/etc/apt/sources.listのdebとdeb-srcに、すなわち:

deb http://ftp.debian.org/debian/ squeeze main non-free contrib
deb-src http://ftp.debian.org/debian/ squeeze main non-free contrib

次に

apt-get update
apt-get install msttcorefonts

もちろん、jasperserverを再起動する必要があります。すなわち:

/opt/jasperreports-server-cp-4.5.0/ctlscript.sh restart

バージョン/パスに合わせて変更します。


2

Spring 3に基づいており、Oracle Linux6のWeblogic10.3にデプロイされたWebアプリケーションで問題が発生しました。リンクに記載されている解決策は、私には機能しませんでした。

次の手順を実行する必要がありました-1。Arial* .ttfフォントファイルをJROCKIT_JAVA_HOME / jre / lib / fontsディレクトリにコピーします2.fontconfig.properties.srcにフォントのエントリを作成します3.Weblogicコンソールからクラスタを再起動します

filename.Arial=Arial.ttf
filename.Arial_Bold=Arial_Bold.ttf
filename.Arial_Italic=Arial_Italic.ttf
filename.Arial_Bold_Italic=Arial_Bold_Italic.ttf

1

複数の言語でジャスパーレポートを作成する(Unicode)

1)ireportdesginerにフォントをインストールします

2)フォントの拡張子を作成します(アプリケーションのクラスパスで使用します)

3)OSにフォントをインストールする(オプション)

4)フォントのすべての.ttfをjre-> lib-> fontsディレクトリに貼り付けます(そうしないと、Webアプリケーションがエラーをスローします。フォントはJVMで使用できません)


0

実際、私はこの問題を非常に簡単な方法で修正しました

  1. あなたのhome pathに行く、のように/root
  2. という名前のフォルダを作成します .fonts
  3. あなたのコピーall your font filesには.fonts、あなたからフォントをコピーすることができC:\windows\fontsますが、ウィンドウを使用している場合。
  4. sudo apt-get install fontconfig
  5. fc-cache –fv フォントキャッシュを再構築します。

0

2ステップで解決(centOSを使用している場合)

  1. Microsoftコアフォントrpmパッケージをダウンロードします。

    [root@WEBSVR~/]# wget http://www.itzgeek.com/msttcore-fonts-2.0-3.noarch.rpm
    
  2. rpmパッケージをインストールします。

    [root@WEBSVR~/]# rpm -Uvh msttcore-fonts-2.0-3.noarch.rpm
    


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.