Шрифт недоступний для JVM з Jasper Reports


91

Я намагаюся створити звіт за допомогою DynamicJasper, але я отримую таку помилку:

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

msttcorefonts встановлено, але я думаю, JVM не використовує жодних шрифтів з нього.

Я використовую Ubuntu 10.04.

Як я можу це виправити?


3
Я насправді це ігнорую ... просто встановіть наступну "net.sf.jasperreports.awt.ignore.missing.font = true" погану ідею ... але вирішує проблему на мить ....
Ендрю

Ви повинні встановити Microsoft шрифти в Ubuntu, дивіться по цьому посиланню для отримання інформації .. embraceubuntu.com/2005/09/09/installing-microsoft-fonts
Сіварамакрішнан

1
де ти це встановлюєш? я працюю із вбудованою версією jasperreports у jbilling, де не існує файлу jasperreports.properties для редагування.
Дарраг


1
@Andrew, це не здається хорошим рішенням (я знаю, що питання старе), але, можливо, краще, щоб ми уникали невідповідності звітів, я передав відповідь.
Петтер Фріберг

Відповіді:


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
FYI щодо інших ароматів Linux спробуйте sudo apt-get install msttcorefonts
KCD

для CentOS та RHEL6 як ви вирішуєте проблему EULA? yum install не дає вам можливості прийняти, будь-яких ідей?
Дарраг

А як щодо найпоширеніших ОС Windows?
Сарц

1
Це опрацювання на одному ПК, воно не вирішить жодних проблем з кодуванням, правильний спосіб - використовувати розширення шрифтів. Я опублікував відповідь
Петтер Фріберг

1
Відповідь правильна для ситуації, коли у нас шрифти вже були встановлені, але без прийнятої ліцензії. Ось кроки, які потрібно виконати у випадку, якщо ви збираєтесь правильно виконати першу автоматизовану установку: sudo echo ttf-mscorefonts-installer msttcorefonts / accept-mscorefonts-eula select true | debconf-set-selections && apt-get install -y -q ttf-mscorefonts-installer
Олександр Лех

35

JasperReports піднімає JRFontNotFoundException у випадку, коли шрифт, що використовується всередині шаблону звіту, недоступний JVM як системний шрифт або шрифт, що надходить із розширення шрифту JR. Це гарантує уникнення всіх проблем, спричинених невідповідністю метрик шрифтів, і ми рано повідомляємо про невідповідність.

Jasper reports намагається допомогти вам у розробці вашого звіту, заявляючи, що він не може правильно експортувати ваш звіт, оскільки не може знайти шрифт, визначений у TextFieldабоStaticText

<font fontName="Arial"/>

Так, ви можете вимкнути це, встановивши net.sf.jasperreports.awt.ignore.missing.font на true, але у вас виникнуть невідповідності щодо експорту .

Так, ви можете встановити шрифт як системний шрифт JVM (але це потрібно робити на кожному використовуваному ПК, який може генерувати звіт, і ви все одно можете мати проблеми з кодуванням ).

Правильний спосіб!

Використовуйте розширення шрифтів ! , Якщо ви хочете створити свій власний (посилання нижче), яшма звіти також розподіляє банку шрифту розширення за замовчуванням ( jasperreports-fonts-x.x.x.jar), який підтримує Fontname DejaVu Sans, DejaVu SerifіDejaVu Sans Mono

<font fontName="DejaVu Sans"/>

З керівництва JasperReport Ultimate:

Ми настійно рекомендуємо людям використовувати лише шрифти, отримані з розширень шрифтів, оскільки це єдиний спосіб переконатися, що шрифти будуть доступні програмі під час виконання звітів під час виконання. Використання системних шрифтів завжди створює ризик для некоректної роботи звітів під час розгортання на новій машині, на якій ці шрифти не встановлені

Посилання на StackOverflow про те, як правильно відображати шрифти в pdf

Контрольний список щодо правильної візуалізації шрифту у форматі PDF

Створіть розширення шрифтів за допомогою JasperSoft Studio

Створіть розширення шрифтів за допомогою iReport


Не могли б ви сказати мені причину того, чому Джаспер і JVM не змогли відтворити PDF за допомогою шрифта, який існує в системі (розташований за адресою C: \ windows \ fonts), натомість я маю створити розширення Jar Font і додати його як бібліотеку до шлях до класу проекту (я використовую Java та Eclipse). Я намагався пошукати відповідь у Google, але не знайшов зрозумілого пояснення. Також я бачу цю проблему з експортом-pdf-font також з Apache FOP (розширення шрифту не потрібно, але мені довелося створити файл-метрику-файл і зробив кілька додаткових конфігурацій для правильного відображення шрифту)
EagerToLearn

1
@EagerToLearn, все зводиться до бібліотеки itext, яка генерує pdf, для правильної візуалізації шрифтів потрібні шрифтові розширення (де не лише шрифт, але й кодування, якщо вказано вбудований ecc). Якщо ви цього не надасте, itext зробить те, що вони називають "найкращими зусиллями", щоб відтворити ваш шрифт. Ви робите не те, що нам потрібно (про це написано в документації), давайте робимо все можливе, але вина у вас. Отже, прийнята відповідь на це питання є неправильною !, Потрібні розширення шрифтів, якщо ви цього не зробите, вам доведеться жити з усім, що створено.
Петтер Фріберг,

дякую за відповідь, але все-таки я розумію лише те, що проблема зі шрифтом стосується того, як працює бібліотека iText. Можливо, ці шрифтові речі далеко поза моєю технічною здатністю зрозуміти :(
EagerToLearn

@eag Це не набагато більше, ніж це, щоб зрозуміти, щоб відтворити шрифт, потрібно знати, де знаходиться .ttf, і потрібно знати, що таке кодування тексту. Розробники lib, щоб знати цю інформацію, створили розширення шрифтів, якщо ви не надаєте їх, вони повинні почати вгадувати, чому в деяких випадках це не працює, тому що "вгадування" є неправильним, але ви не можете звинуватити lib в це оскільки вони надали вам систему, щоб уникнути "вгадування"
Петтер Фріберг,

22

Я використовую IReport для встановлення шрифту:

інструменти -> параметри -> шрифти -> клацніть встановити шрифт

Потім виберіть шрифт і натисніть

-> експортувати як розширення та введіть ім'я myfont.jar

додайте цю банку, а також spring.jar * до шляху створення.

* скопіюйте spring.jar з Jaspersoft \ iReport-3.7.0 \ ireport \ modules \ ext


1
На завершення arial ttf знаходиться в c: / windows / fonts (принаймні в win xp): arial.ttf, arialbd.ttf (жирний шрифт), ariali.ttf (курсив), arialbi (жирний курсив)
jneira

Додавши spring.jar до шляху збірки, це виправлено.
fishjd

Цей метод насправді спрацював у мене. Він пакує шрифт як файл jar, ви додаєте його до шляху до класу, і речі просто працюють.
Сатья

Якщо шрифт-розширення зроблено правильно, немає необхідності додавати spring.jar.
Петтер Фріберг,

Ці інструменти-> опції-> шрифти-> встановити клавішу недоступні на mac. :( будь-які пропозиції?
L-Samuels

13

sudo apt-get install msttcorefonts працює (на нашому середовищі розробки Ubuntu), але це не дуже гарне рішення.

Натомість, ми додали шрифти до нашої програми на основі цієї підказки . Їхній файл JAR поєднує в собі такі шрифти,

  • Arial
  • Times New Roman
  • Кур'єр Новий
  • Comic Sans MS
  • Грузія
  • Вердана
  • Монопростірний

Пряме посилання для завантаження jar: Maven ver 1.0. DynamicFonts


Тепер його можна завантажити зі стандартного сховища mvn, наприклад: mvnrepository.com/artifact/ar.com.fdvs/DynamicJasper-core-fonts
Маркус Пшайдт


9

Існує три методи, щоб уникнути такої проблеми.

Спосіб 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.

Ви можете використовувати цю банку для Jasperreports-font.XXXjar, яка буде присутня у вашій бібліотеці проектів або шляху до класу.


5

Я вирішив це, вибравши лише "SansSerif" або "Serif", а не "Arial" або "Times New Roman".


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 та конвертувати як файли банок


2

Спробуйте додати рядок

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

до вашого файлу jasperreports.properties.

Джаспер перестає знаходити один шрифт


1
і це погана ідея ... невідповідність експорту!
Петтер Фріберг,

@PetterFriberg ні, це хороший резервний механізм. Ви не завжди можете керувати JVM. Завжди є гарною ідеєю мати резервний механізм, навіть якщо результат не ідеальний, це краще, ніж збій програми, спричинений відсутнім шрифтом на машині клієнта.
jwenting

@jwenting додайте розширення шрифту, і воно не вийде з ладу. Повірте мені, якщо ви відключаєте, що робите щось не так, у вас будуть сформовані неправильні звіти, натомість вам слід вирішити кореневу проблему (відсутні розширення шрифтів). Так, ви завжди можете контролювати JVM.
Петтер Фріберг,

@jwenting Зверніть увагу: Рішення не полягає у встановленні шрифтів на сервері (як відповідає відповідь accept, це неправильно!). Рішення полягає у створенні та додаванні в залежності розширень шрифтів. Перегляньте це для правильної відповіді stackoverflow.com/a/35549391
Петтер Фріберг

@PetterFriberg, що часто неможливо. Наприклад, додаток, який я підтримую, працює на сервері, але дозволяє користувачеві додавати власні файли .jrxml з певним правилом іменування, щоб створювати власні звіти вище, ніж ми пропонуємо в якості стандарту. Не хочу, щоб ці звіти аварійно завершували роботу, якщо сервер не має доступних шрифтів, які вказує .jrxml, тому ми використовуємо резервну копію.
jwenting

2

Ви можете зробити це, встановивши шрифти, це означає, що скрізь, де ви хочете запустити саме цю програму. Найпростіший спосіб - просто додати цей рядок bl до вашого файлу jrxml:

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

Сподіваюся, це допоможе.


1
Однак це призведе до невідповідності експорту (отже, він не може відображатися зі шрифтом, зазначеним у jrxml). Дивіться мою відповідь.
Петтер Фріберг,

2

Для Debian

додати

non-free contrib

для deb та deb-src у /etc/apt/sources.list, тобто:

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, і розгорнутою на Weblogic 10.3 на Oracle Linux 6. Рішення, згадане за посиланням , для мене не працювало.

Мені довелося зробити наступні кроки - 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) Встановіть шрифт у програмі ireport

2) створити розширення шрифту (ми будемо використовувати його в шляху до класу додатків)

3) встановити шрифт на os (необов’язково)

4) вставте весь шрифт .ttf у каталог jre-> lib-> fonts (інакше веб-програма видасть помилку шрифт недоступний для JVM)


0

Насправді я вирішив цю проблему дуже просто

  1. йди до свого home path, типу/root
  2. створити папку з іменем .fonts
  3. скопіювати all your font filesTo .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
    


-1

Гей, у вас проблеми з переглядом документів, виготовлених у Windows?

Ви можете спробувати чудове рішення просто:

yum встановити curl cabextract xorg-x11-font-utils fontconfig

rpm -i https://downloads.sourceforge.net/project/mscorefonts2/rpms/msttcore-fonts-installer-2.6-1.noarch.rpm

Після цього мені потрібно перезавантажити мою систему CentOS6.

Джерело: http://mscorefonts2.sourceforge.net/

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.