Yazı tipi, Jasper Raporları içeren JVM'de mevcut değil


91

DynamicJasper ile rapor oluşturmaya çalışıyorum, ancak aşağıdaki hatayı alıyorum:

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

msttcorefonts yüklü, ancak JVM'nin ondan herhangi bir yazı tipi kullanmadığını tahmin ediyorum.

Ubuntu 10.04 kullanıyorum.

Bunu nasıl düzeltebilirim?


3
Aslında bunu görmezden geliyorum ... sadece aşağıdaki "net.sf.jasperreports.awt.ignore.missing.font = true" kötü bir fikir ayarlayın ... ama bir an için sorunu çözer ....
Andrew

Sen .. bilgi için bu linki bakın Ubuntu microsoft fontları yüklemek gerekir embraceubuntu.com/2005/09/09/installing-microsoft-fonts
Sivaramakrishnan

1
bunu nereye ayarlarsın Düzenlenecek jasperreports.properties dosyasının olmadığı jbilling'de jasperreports'un gömülü bir sürümüyle çalışıyorum.
Darragh


1
@Andrew, bu iyi bir çözüm gibi görünmüyor (Sorunun eski olduğunu biliyorum), ama belki rapor tutarsızlıklarından kaçınmamız daha iyi, cevabı geçtim.
Petter Friberg

Yanıtlar:


63

Mscorefonts yüklemeyi denedim, ancak paket yüklendi ve güncel.

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

Dosya sisteminde yazı tipini aramayı denedim, şununla:

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

Bu klasörde, nasıl kurulacağına dair doğru talimatlarla birlikte README vardı.

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

Bunun için internet bağlantısına ihtiyacınız var:

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

Yeniden kurdum ttf-mscorefonts-installer(yukarıda gösterildiği gibi, EULA'yı kabul ettiğinizden emin olun!) Ve sorun çözüldü.


5
Bilginize diğer Linux tatlar üzerinde sudo apt-get install msttcorefonts deneyin
KCD

CentOS ve RHEL6 için EULA problemini nasıl çözersiniz? yum install size herhangi bir kabul etme seçeneği sunmaz, herhangi bir fikir?
Darragh

En yaygın Windows işletim sistemi ne olacak?
Sarz

1
Bu, tek bir bilgisayarda yapılan bir çalışma, herhangi bir kodlama problemini çözmeyecek, doğru yol yazı tipi uzantılarını kullanmaktır Bir cevap gönderdim
Petter Friberg

1
Cevap, yazı tiplerimizin zaten yüklü olduğu, ancak kabul edilmiş lisansımız olmadığı durum için doğrudur. İlk otomatik kurulumu doğru bir şekilde gerçekleştirmek üzereyseniz gerçekleştirmeniz gereken adımlar şunlardır: sudo echo ttf-mscorefonts-installer msttcorefonts / accept-mscorefonts-eula select true | debconf-set-selections && apt-get install -y -q ttf-mscorefonts-installer
Aleksander Lech

35

JasperReports, bir rapor şablonunda kullanılan yazı tipinin JVM'de bir sistem yazı tipi veya JR yazı tipi uzantısından gelen bir yazı tipi olarak mevcut olmaması durumunda bir JRFontNotFoundException oluşturur. Bu, yazı tipi ölçüm uyumsuzluklarının neden olduğu tüm sorunların önlenmesini ve tutarsızlık konusunda erken uyarı almamızı sağlar.

Jasper raporları çalışıyor yardımcı , raporunuz gelişiminde bunun tanımlanan yazı tipini bulamıyor doğru beri Raporunuzu dışa bildiren TextFieldveyaStaticText

<font fontName="Arial"/>

Evet, net.sf.jasperreports.awt.ignore.missing.font'u true olarak ayarlayarak bunu devre dışı bırakabilirsiniz, ancak dışa aktarma tutarsızlıklarınız olacaktır .

Evet , yazı tipini JVM sistem yazı tipi olarak yükleyebilirsiniz (ancak bunu rapor oluşturabilecek her bilgisayarda yapmanız gerekir ve yine de kodlama sorunlarınız olabilir ).

Doğru yol!

Yazı Tipi Uzantılarını Kullanın ! (Aşağıdaki bağlantıya bakınız) kendi oluşturmak isterseniz, Jasper raporları da varsayılan bir font-uzatma kavanoz (dağıtan jasperreports-fonts-x.x.x.jar,) o destekleri fontName DejaVu Sans, DejaVu SerifveDejaVu Sans Mono

<font fontName="DejaVu Sans"/>

JasperReport Nihai Kılavuzundan:

Raporlar çalışma zamanında yürütüldüğünde yazı tiplerinin uygulama tarafından kullanılabilmesini sağlamanın tek yolu bu olduğundan, insanları yalnızca yazı tipi uzantılarından türetilen yazı tiplerini kullanmaları için şiddetle tavsiye ederiz. Sistem yazı tiplerini kullanmak, her zaman, bu yazı tiplerinin yüklü olmadığı yeni bir makineye yerleştirildiğinde raporların düzgün çalışmama riskini getirir.

Fontların pdf'de nasıl doğru şekilde işleneceğine ilişkin StackOverflow'daki bağlantılar

Yazı tipinin pdf'de nasıl doğru şekilde oluşturulacağına dair kontrol listesi

JasperSoft Studio ile yazı tipi uzantıları oluşturun

İReport ile yazı tipi uzantıları oluşturun


Jasper ve JVM'nin PDF'yi sistemde bulunan (C: \ windows \ fonts konumunda bulunan) bir Yazı Tipi ile işleyememesinin nedenini bana söyleyebilir misiniz, bunun yerine bir Jar Yazı Tipi uzantısı oluşturmalı ve bunu kitaplık olarak eklemeliyim projenin sınıf yolu (Java ve Eclipse kullanıyorum). Cevap için google'ı denedim ama anlaşılır bir açıklama bulamadım. Ayrıca bu dışa aktarma-pdf-yazı tipi sorunlarını Apache FOP ile de görüyorum (yazı tipi uzantısı gerekmiyor, ancak bir yazı tipi-metrik-dosyası oluşturmam gerekiyordu ve yazı tipinin doğru şekilde
işlenmesi

1
@EagerToLearn her şey pdf'yi oluşturan itext kitaplığına indirgenir, itext yazı tiplerini doğru şekilde oluşturmak için yazı tipi uzantılarına ihtiyaç duyar (burada sadece yazı tipi değil, aynı zamanda gömülü ecc belirtilmişse kodlama da bulunur). Bunu sağlamazsanız, itext yazı tipinizi oluşturmak için "en iyi çaba" dedikleri şeyi yapacaktır. İhtiyacımız olanı yapmıyorsunuz (belgelerde yazılı), elimizden gelenin en iyisini yapalım, ama hata sizindir. Dolayısıyla bu soruya verilen cevap doğru değil ! Yazı tipi uzantılarına ihtiyaç var, eğer tedarik etmezseniz yaratılanla yaşamak zorunda kalacaksınız.
Petter Friberg

cevap için teşekkürler, ancak yine de sadece yazı tipi sorununun iText kitaplığının çalışma şekline bağlı olduğunu anlıyorum. Belki de bu yazı tipi şeyler benim teknik anlayışımın çok ötesinde :(
EagerToLearn

@eag Daha sonra anlamak, bir yazı tipini oluşturmak için .ttf'nin nerede olduğunu bilmeniz ve metnin hangi kodlamasını bilmeniz gerekir. Bu bilgiyi bilmek için lib'in geliştiricileri yazı tipi uzantıları yarattılar, eğer vermezseniz tahmin etmeye başlamaları gerekiyor, neden bazı durumlarda çalışmıyor çünkü "tahmin" doğru değil, ancak lib'i suçlayamazsınız. "tahmin etmekten" kaçınmanız için size bir sistem sağladıkları için bu
Petter Friberg

22

Yazı tipini yüklemek için IReport kullanıyorum:

araçlar -> seçenekler -> yazı tipleri -> yazı tipini yükle'yi tıklayın

Ardından yazı tipini seçin ve tıklayın

-> uzantı olarak dışa aktar ve myfont.jar adını yazın

bu kavanozu ve ayrıca spring.jar * ' ı derleme yolunuza ekleyin.

* Jaspersoft \ iReport-3.7.0 \ ireport \ modules \ ext dizininden spring.jar dosyasını kopyalayın


1
Tamamlanması için, arial ttf c: / windows / fonts şeklindedir (en azından win xp'de): arial.ttf, arialbd.ttf (kalın), ariali.ttf (italic), arialbi (kalın-italik)
jneira

Derleme yoluna spring.jar eklenmesi sorunu düzeltti.
fishjd

Bu yöntem aslında benim için çalıştı. Fontu bir jar dosyası olarak paketler, sınıf yoluna eklersiniz ve Just Work şeyler.
Satya 13

Font uzantısı doğru yapılmışsa spring.jar'ın eklenmesine gerek yoktur.
Petter Friberg

Bu araçlar-> seçenekler-> yazı tipleri-> tıklama yüklemesi mac'ta mevcut değildir. :( herhangi bir öneriniz var mı?
L-Samuels

13

sudo apt-get install msttcorefonts çalışır (Ubuntu geliştirme ortamımızda), ancak çok iyi bir çözüm değildir.

Bunun yerine, yazı tiplerini bu ipucu temelinde uygulamamızla bir araya getirdik . JAR dosyaları aşağıdaki yazı tiplerini içerir,

  • Arial
  • Times New Roman
  • Kurye Yeni
  • Comic Sans MS
  • Gürcistan
  • Verdana
  • Eş aralıklı

Jar: Maven ver 1.0'ı indirmek için Doğrudan Bağlantı . Dinamik Yazı Tipleri


Bu artık standart mvn deposundan indirilebilir, örneğin: mvnrepository.com/artifact/ar.com.fdvs/DynamicJasper-core-fonts
Markus Pscheidt

12

CentOS için:

wget msttcorefonts

Sonra:

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

Sonuçta, JVM'yi yeniden başlatın.


9

Böyle bir sorunu önlemek için üç yöntem vardır.

Yöntem 1: Eksik yazı tipi özelliğini yoksay ayarlayarak.

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

veya .jrxml dosyasına aşağıdaki satırı girerek bu özelliği ayarlayabilirsiniz.

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

Yöntem 2: Varsayılan yazı tipi özelliğini ayarlayarak.

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

veya .jrxml dosyasına aşağıdaki satırı girerek bu özelliği ayarlayabilirsiniz.

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

Yöntem 3: Eksik font özelliğini ekleyerek.

Önce "Araçlar >> Seçenekler >> Yazı Tipleri >> Yazı Tipi Yükle" yi seçerek IReport'a eksik yazı tiplerini yükleyin, ardından tüm yazı tipini seçin ve bunu .jar Uzantısı ile "Uzantı Olarak Dışa Aktar" seçeneğini tıklayarak Dışa Aktarın.

Bu kavanozu, proje kitaplığınızda veya sınıf yolunuzda bulunacak olan Jasperreports-font.XXXjar için kullanabilirsiniz.



3

Projenizde maven kullanıyorsanız, jasper-fonts bağımlılığını pom.xml'e ekleyebilirsiniz:

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

Eksik yazı tipini sisteme yüklemek çalışan bir çözüm olabilir, ancak benim için değil, eksik yazı tiplerini yeni bir sunucuya her dağıtımdan sonra yüklemek zorunda kalmak istemedim, bunun yerine yazı tipini uygulama ile birlikte yerleştirmeyi seçtim.

Saygılarımızla.


2

iReport aracılığıyla özel yazı tiplerinizi oluşturabilir ve kavanoz dosyaları gibi dönüştürebilir


2

Satırı eklemeyi deneyin

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

jasperreports.properties dosyanıza.

Jasper bir yazı tipi bulmayı bırakır


1
ve kötü bir fikir ... tutarsızlıkları dışa aktarın!
Petter Friberg

@PetterFriberg hayır, bu iyi bir geri dönüş mekanizması. JVM'yi her zaman kontrol edemezsiniz. Bir geri dönüş mekanizmasına sahip olmak HER ZAMAN iyi bir fikirdir, sonuç ideal olmasa bile, müşteri makinesinde eksik bir fontun neden olduğu bir uygulama çökmesinden daha iyidir.
jwenting

@jwenting yazı tipi uzantılarını ekler ve çökmez. İnanın bana eğer yanlış bir şey yaptığınızı devre dışı bırakıyorsanız, yanlış raporlar oluşturacaksınız, bunun yerine kök problemini çözmelisiniz (eksik font uzantıları). Ve evet, JVM'yi her zaman kontrol edebilirsiniz.
Petter Friberg

@jwenting Dikkat edin: Çözüm, yazı tiplerini sunucuya yüklemek değil (kabul edilen cevabın söylediği gibi, bu yanlış!). Çözüm, bağımlılıklar yazı tipi uzantıları oluşturmak ve eklemektir. Doğru yanıt için buna bakın stackoverflow.com/a/35549391
Petter Friberg

@PetterFriberg ki genellikle imkansızdır. Örneğin, bakımını yaptığım uygulama bir sunucuda çalışıyor, ancak standart olarak sunduğumuzun ötesinde özel raporlar oluşturmak için kullanıcının özel .jrxml dosyalarını belirli bir adlandırma kuralıyla eklemesine izin veriyor. Sunucuda .jrxml'nin belirttiği yazı tipleri yoksa bu raporların çökmesini istemiyoruz, bu yüzden bir geri dönüş kullanıyoruz.
jwenting

2

Yazı tiplerini yükleyerek yapabilirsiniz, bu, söz konusu uygulamayı her yerde çalıştırmak istediğiniz anlamına gelir. En basit yol, bu bl satırını jrxml dosyanıza eklemektir:

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

Umarım yardımcı olur.


1
Ancak bu, dışa aktarma tutarsızlıkları yaratacaktır (bu nedenle jrxml'de belirtilen yazı tipiyle işlenemez). Cevabımı gör.
Petter Friberg

2

Debian için

Ekle

non-free contrib

/etc/apt/sources.list içindeki deb ve deb-src'ye, yani:

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

Sonra

apt-get update
apt-get install msttcorefonts

Elbette jasperserver'ı yeniden başlatmanız gerekecek. yani:

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

Sürümünüz / yolunuz için değişiklik.


2

Spring 3 tabanlı web uygulamamda sorunla karşılaştım ve Oracle Linux 6 üzerinde Weblogic 10.3 üzerine konuşlandırdım. Bağlantıda bahsedilen çözüm benim için işe yaramadı.

Aşağıdaki adımları uygulamam gerekiyordu - 1. Arial * .ttf yazı tipi dosyalarını JROCKIT_JAVA_HOME / jre / lib / fonts dizinine kopyalayın 2. fontconfig.properties.src'de yazı tiplerinin girişlerini yapın 3. Kümeyi Weblogic konsolundan yeniden başlatın

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

Birden çok dilde jasper raporu oluşturun (Unicode)

1) ireport desginer'a yazı tipini yükleyin

2) yazı tipi uzantısını oluşturun (bunu sınıf yolunda uygulamalar için kullanacağız)

3) işletim sistemine yazı tipi yükleyin (isteğe bağlı)

4) tüm .ttf yazı tipini jre-> lib-> fonts dizinine yapıştırın (aksi takdirde web uygulaması hata atar yazı tipi JVM tarafından kullanılamaz)


0

Aslında bu sorunu çok basit bir şekilde çözdüm

  1. senin home pathgibi git/root
  2. adlı bir klasör oluştur .fonts
  3. senin kopya all your font filesTo .fonts, aralarından yazı kopyalayabilirsiniz C:\windows\fontsPencereleri kullanırsanız.
  4. sudo apt-get install fontconfig
  5. fc-cache –fv yazı tipi önbelleklerini yeniden oluşturmak için.

0

2 adımda çözüm (centOS kullanıyorsanız)

  1. Microsoft çekirdek yazı tipi rpm paketini indirin.

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

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

-1

Yazı tiplerinizi aşağıdaki JDK_HOME \ jre \ lib \ fonts dizinine kopyalayın


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.