Font tidak tersedia untuk JVM dengan Jasper Reports

91

Saya mencoba membuat laporan dengan DynamicJasper, tetapi saya mendapatkan kesalahan berikut:

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

msttcorefonts diinstal, tapi saya rasa JVM tidak menggunakan font apa pun darinya.

Saya menggunakan Ubuntu 10.04.

Bagaimana cara memperbaikinya?

Andrew
sumber
3
Saya sebenarnya mengabaikannya ... cukup setel "net.sf.jasperreports.awt.ignore.missing.font = true" berikut ini ide yang buruk ... tetapi memecahkan masalah sejenak ....
Andrew
Anda perlu menginstal font microsoft di Ubuntu, lihat tautan ini untuk informasi .. embraceubuntu.com/2005/09/09/installing-microsoft-fonts
Sivaramakrishnan
1
dimana kamu mengatur ini? Saya bekerja dengan jasperreports versi tertanam di jbilling di mana tidak ada file jasperreports.properties yang dapat diedit.
Darragh
1
@ Andrew, ini sepertinya bukan solusi yang baik (saya tahu pertanyaannya sudah lama), tetapi mungkin lebih baik kita menghindari laporan yang tidak konsisten, saya telah menyampaikan jawaban.
Petter Friberg

Jawaban:

63

Saya mencoba memasang mscorefonts, tetapi paketnya sudah terpasang dan mutakhir.

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

Saya mencoba mencari font di filesystem, dengan:

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

Folder ini baru saja memiliki README, dengan petunjuk yang benar tentang cara memasang.

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

Anda memerlukan koneksi internet untuk ini:

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

Saya menginstal ulang ttf-mscorefonts-installer(seperti yang ditunjukkan di atas, memastikan untuk menerima EULA!) Dan masalah terpecahkan.

Braully Rocha
sumber
5
FYI pada
varian
untuk CentOS dan RHEL6 bagaimana Anda mengatasi masalah EULA? yum install tidak memberi Anda opsi untuk menerima, ada ide?
Darragh
Bagaimana dengan OS windows yang paling umum?
Sarz
1
Ini adalah penyelesaian pada satu pc, ini tidak akan menyelesaikan masalah pengkodean apa pun, cara yang benar adalah menggunakan ekstensi font. Saya telah memposting jawaban
Petter Friberg
1
Jawabannya benar untuk situasi ketika kami memiliki font yang sudah diinstal tetapi tanpa lisensi yang diterima. Berikut adalah langkah-langkah yang harus dilakukan jika Anda akan melakukan penginstalan otomatis pertama dengan benar: sudo echo ttf-mscorefonts-installer msttcorefonts / accept-mscorefonts-eula select true | debconf-set-selection && apt-get install -y -q ttf-mscorefonts-installer
Aleksander Lech
35

JasperReports memunculkan JRFontNotFoundException jika font yang digunakan di dalam template laporan tidak tersedia untuk JVM baik sebagai font sistem atau font yang berasal dari ekstensi font JR. Ini memastikan bahwa semua masalah yang disebabkan oleh ketidakcocokan metrik font dapat dihindari dan kami memiliki peringatan dini tentang ketidakkonsistenan tersebut.

Laporan Jasper mencoba membantu Anda dalam pengembangan laporan Anda, menyatakan bahwa itu tidak dapat mengekspor laporan Anda dengan benar karena tidak dapat menemukan font yang ditentukan dalam TextFieldatauStaticText

<font fontName="Arial"/>

Ya, Anda dapat menonaktifkan ini dengan menyetel net.sf.jasperreports.awt.ignore.missing.font ke true tetapi Anda akan mengalami inkonsistensi ekspor .

Ya, Anda dapat menginstal font sebagai font sistem JVM (tetapi Anda perlu melakukannya di setiap PC yang digunakan yang dapat menghasilkan laporan dan Anda masih dapat mengalami masalah encoding ).

Cara yang benar!

Gunakan Ekstensi Font ! , jika Anda ingin membuatnya sendiri (lihat tautan di bawah), laporan jasper juga mendistribusikan jar ekstensi font default ( jasperreports-fonts-x.x.x.jar), yang mendukung fontName DejaVu Sans, DejaVu SerifdanDejaVu Sans Mono

<font fontName="DejaVu Sans"/>

Dari Panduan Ultimate JasperReport:

Kami sangat menganjurkan orang untuk hanya menggunakan fonta yang berasal dari ekstensi font, karena ini adalah satu-satunya cara untuk memastikan bahwa font akan tersedia untuk aplikasi ketika laporan dijalankan pada waktu proses. Menggunakan font sistem selalu membawa risiko laporan tidak berfungsi dengan baik saat diterapkan pada komputer baru yang mungkin tidak menginstal font tersebut

Tautan di StackOverflow tentang cara merender font dengan benar dalam pdf

Daftar periksa tentang cara merender font dengan benar dalam pdf

Hasilkan ekstensi font dengan JasperSoft Studio

Hasilkan ekstensi font dengan iReport

Petter Friberg
sumber
Bisakah Anda memberi tahu saya alasan mengapa Jasper dan JVM tidak dapat merender PDF dengan Font yang ada di sistem (terletak di C: \ windows \ font), sebagai gantinya saya harus membuat ekstensi Font Jar dan menambahkannya sebagai perpustakaan ke jalur kelas proyek (Saya menggunakan Java dan Eclipse). Saya mencoba mencari jawabannya di Google tetapi belum menemukan penjelasan yang dapat dimengerti. Saya juga melihat masalah ekspor-pdf-font-ini dengan Apache FOP (tidak diperlukan ekstensi font, tetapi saya harus membuat file font-metrik dan melakukan beberapa konfigurasi tambahan agar font ditampilkan dengan benar)
EagerToLearn
1
@EagerToLearn semuanya bermuara pada perpustakaan itext yang menghasilkan pdf, itext untuk membuat font dengan benar membutuhkan ekstensi font (di mana tidak hanya font disertakan tetapi juga pengkodean, jika ecc tertanam ditentukan). Jika Anda tidak menyediakan ini, itext akan melakukan apa yang mereka sebut "upaya terbaik" untuk merender font Anda. Anda tidak melakukan apa yang kami butuhkan (tertulis dalam dokumentasi), mari lakukan yang terbaik, tetapi kesalahan ada di tangan Anda. Oleh karena itu jawaban yang diterima untuk pertanyaan ini tidak benar !, Ekstensi font diperlukan, jika Anda tidak menyediakan Anda harus hidup dengan apa pun yang dibuat.
Petter Friberg
terima kasih atas jawabannya, tetapi saya tetap hanya mengerti bahwa masalah font sesuai dengan cara kerja perpustakaan iText. Mungkin font ini jauh melampaui kemampuan teknis saya untuk memahami :(
EagerToLearn
@eag Ini tidak lebih dari ini untuk dipahami, untuk membuat font Anda perlu tahu di mana .ttf itu dan Anda perlu tahu apa pengkodean teks itu. Pengembang lib untuk mengetahui informasi ini telah membuat ekstensi font, jika Anda tidak menyediakannya, mereka perlu mulai menebak-nebak, mengapa tidak berfungsi dalam beberapa kasus adalah karena "menebak" tidak benar, tetapi Anda tidak dapat menyalahkan lib untuk ini karena mereka telah memberi Anda sistem untuk menghindari "menebak"
Petter Friberg
22

Saya menggunakan IReport untuk menginstal font:

alat -> opsi -> font -> klik instal font

Kemudian pilih font dan klik

-> ekspor sebagai ekstensi dan ketik nama myfont.jar

tambahkan toples ini dan juga spring.jar * ke jalur build Anda.

* salin spring.jar dari Jaspersoft \ iReport-3.7.0 \ ireport \ modules \ ext

juan
sumber
1
Untuk penyelesaiannya, arial ttf ada di c: / windows / font (setidaknya di win xp): arial.ttf, arialbd.ttf (tebal), ariali.ttf (miring), arialbi (tebal-miring)
jneira
Menambahkan spring.jar ke jalur build memperbaikinya.
fishjd
Metode ini benar-benar berhasil untuk saya. Ini mengemas font sebagai file jar, Anda menambahkannya ke classpath, dan hal-hal Just Work.
Satya
Jika ekstensi font dibuat dengan benar maka tidak perlu menambahkan spring.jar.
Petter Friberg
Alat ini-> opsi-> font-> klik instal tidak tersedia di mac. :( ada saran?
L-Samuels
13

sudo apt-get install msttcorefonts berfungsi (di lingkungan pengembangan Ubuntu kami), tetapi bukan solusi yang sangat baik.

Sebagai gantinya, kami menggabungkan font dengan aplikasi kami berdasarkan tip ini . File JAR mereka menggabungkan font-font berikut,

  • Arial
  • Times New Roman
  • Kurir Baru
  • Comic Sans MS
  • Georgia
  • Verdana
  • Spasi tunggal

Tautan Langsung ke jar unduhan: Maven ver 1.0. DynamicFonts

pengguna799188
sumber
Ini sekarang dapat diunduh dari repositori mvn standar, misalnya: mvnrepository.com/artifact/ar.com.fdvs/DynamicJasper-core-fonts
Markus Pscheidt
12

Untuk CentOS:

wget msttcorefonts

Kemudian:

tar -zxvf msttcorefonts.tar.gz
cp msttcorefonts/*.ttf  /usr/share/fonts/TTF/
fc-cache -fv 

Setelah semua, restart JVM.

Ricardo Carmo
sumber
9

Ada tiga metode untuk menghindari masalah tersebut.

Metode 1: dengan menyetel abaikan properti font yang hilang.

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

atau Anda dapat menyetel properti ini dengan memasukkan baris berikut ke dalam file .jrxml.

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

Metode 2: dengan mengatur properti font default.

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

atau Anda dapat menyetel properti ini dengan memasukkan baris berikut ke dalam file .jrxml.

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

Metode 3: dengan menambahkan properti font yang hilang.

Pertama instal font yang hilang di IReport dengan memilih "Tools >> Options >> Fonts >> Install Font" kemudian pilih semua font dan Ekspor ini Dengan mengklik "Ekspor sebagai Ekstensi" dengan Ekstensi .jar.

Anda dapat menggunakan jar ini untuk Jasperreports-font.XXXjar yang akan ada di perpustakaan proyek atau jalur kelas Anda.

Mayur Bhokase
sumber
5

Saya memecahkan ini dengan memilih 'SansSerif' atau 'Serif' saja dan bukan 'Arial' atau 'Times New Roman'.

lkdg
sumber
6
Sesuai dengan dokumentasi pengecualian ( jasperreports.sourceforge.net/api/net/sf/jasperreports/engine/… ), metode ini secara eksplisit TIDAK disarankan. Ini dapat menyebabkan masalah rendering yang tidak terduga, karena font ini mungkin dipetakan ke font sistem yang berbeda pada sistem yang berbeda.
Doug
3

Jika Anda menggunakan maven dalam proyek Anda, Anda cukup menambahkan dependensi jasper-font ke pom.xml:

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

Menginstal font yang hilang di sistem mungkin merupakan solusi yang berfungsi tetapi tidak untuk saya, saya tidak ingin menginstal font yang hilang setelah setiap penerapan di server baru, sebagai gantinya saya memilih untuk menyematkan font dengan aplikasi.

Salam.

Yassir
sumber
2

dapat membuat font khusus Anda melalui iReport dan mengonversi seperti file jars

mavirroco
sumber
2

Coba tambahkan garis

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

ke file jasperreports.properties Anda.

Jasper berhenti menemukan satu font

Enrico Sanna
sumber
1
dan merupakan ide yang buruk ... inkonsistensi ekspor!
Petter Friberg
@PetterFriberg tidak, ini adalah mekanisme fallback yang bagus. Anda tidak selalu dapat mengontrol JVM. Ada baiknya SELALU memiliki mekanisme fallback, meskipun hasilnya tidak ideal, itu lebih baik daripada aplikasi crash yang disebabkan oleh font yang hilang pada mesin pelanggan.
jwenting
@jwenting menambahkan ekstensi font dan itu tidak akan macet. Percayalah jika Anda menonaktifkan Anda melakukan sesuatu yang salah, Anda akan mendapatkan laporan yang salah sebagai gantinya Anda harus menyelesaikan masalah akar (ekstensi font hilang). Dan ya, Anda selalu dapat mengontrol JVM.
Petter Friberg
@jwenting Perhatikan: Solusinya bukanlah menginstal font di server (seperti yang dikatakan jawaban terima, itu salah!). Solusinya adalah dengan membuat dan menambahkan dependices font-extensions. Lihat ini untuk jawaban yang benar stackoverflow.com/a/35549391
Petter Friberg
@PetterFriberg yang seringkali tidak mungkin. Misalnya aplikasi yang saya pertahankan berjalan di server, tetapi memungkinkan pengguna untuk menambahkan file .jrxml khusus dengan konvensi penamaan tertentu untuk menghasilkan laporan khusus di atas dan di luar apa yang kami sediakan sebagai standar. Tidak ingin laporan tersebut mogok jika server tidak memiliki font yang tersedia seperti yang ditentukan .jrxml, jadi kami menggunakan fallback.
jwenting
2

Anda dapat melakukannya dengan menginstal font, artinya di mana pun Anda ingin menjalankan aplikasi tersebut. Cara termudah adalah dengan menambahkan baris bl ini ke file jrxml Anda:

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

Semoga membantu.

Stephen
sumber
1
Namun ini akan membuat inkonsistensi ekspor (karena itu tidak dapat dirender dengan font yang ditunjukkan dalam jrxml). Lihat jawabanku.
Petter Friberg
2

Untuk Debian

Menambahkan

non-free contrib

ke deb dan deb-src di /etc/apt/sources.list yaitu:

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

Kemudian

apt-get update
apt-get install msttcorefonts

Tentu saja Anda harus me-restart jasperserver. yaitu:

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

Ubah untuk versi / jalur Anda.

d -_- b
sumber
2

Saya menghadapi masalah dengan aplikasi web saya berdasarkan Spring 3 dan menggunakan Weblogic 10.3 di Oracle Linux 6. Solusi yang disebutkan di tautan tidak berhasil untuk saya.

Saya harus mengambil langkah-langkah berikut - 1. Salin file font Arial * .ttf ke direktori JROCKIT_JAVA_HOME / jre / lib / font 2. Buat entri font di fontconfig.properties.src 3. Mulai ulang cluster dari konsol weblog

filename.Arial=Arial.ttf
filename.Arial_Bold=Arial_Bold.ttf
filename.Arial_Italic=Arial_Italic.ttf
filename.Arial_Bold_Italic=Arial_Bold_Italic.ttf
Ujjwal
sumber
1

Buat laporan jasper dalam berbagai bahasa (Unicode)

1) Instal font di desginer ireport

2) buat ekstensi font (kita akan menggunakannya dalam aplikasi classpath)

3) instal font di os (opsional)

4) rekatkan semua .ttf font di jre-> lib-> direktori font (jika tidak, aplikasi web akan membuang font kesalahan tidak tersedia untuk JVM)

rushabh
sumber
0

Sebenarnya saya memperbaiki masalah ini dengan cara yang sangat sederhana

  1. pergi ke Anda home path, seperti/root
  2. buat folder bernama .fonts
  3. salin all your font fileske .fonts, Anda dapat menyalin font dari C:\windows\fontsjika Anda menggunakan windows.
  4. sudo apt-get install fontconfig
  5. fc-cache –fv untuk menyesuaikan kembali cache font.
Saorikido
sumber
0

Solusi dalam 2 langkah (jika Anda menggunakan centOS)

  1. Unduh paket rpm font inti Microsoft.

    [root@WEBSVR~/]# wget http://www.itzgeek.com/msttcore-fonts-2.0-3.noarch.rpm
    
  2. Instal paket rpm.

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

Salin Font Anda pada direktori berikut JDK_HOME \ jre \ lib \ font

Ahmad Zyoud
sumber