2010-10-21 2 views
12

После обновления Jasper до последней версии он прекратил поиск одного шрифта: Символ. Остальные шрифты кажутся прекрасными. У меня есть куча ССТТ в том же каталоге, где яшма запускается, программа является лишь небольшой обертка для создания PDF-файлов, и он бросает эту ошибку:Jasper останавливает поиск одного шрифта

net.sf.jasperreports.engine.util.JRFontNotFoundException: Font 'Symbol' is not available to the JVM. See the Javadoc for more details. 
    at net.sf.jasperreports.engine.util.JRFontUtil.checkAwtFont(JRFontUtil.java:358) 
    at net.sf.jasperreports.engine.util.JRStyledText.getAwtAttributedString(JRStyledText.java:226) 
    at net.sf.jasperreports.engine.fill.TextMeasurer.measure(TextMeasurer.java:362) 
    at net.sf.jasperreports.engine.fill.JRFillTextElement.chopTextElement(JRFillTextElement.java:1129) 
    at net.sf.jasperreports.engine.fill.JRFillStaticText.prepare(JRFillStaticText.java:183) 
    at net.sf.jasperreports.engine.fill.JRFillElementContainer.prepareElements(JRFillElementContainer.java:329) 
    at net.sf.jasperreports.engine.fill.JRFillBand.fill(JRFillBand.java:419) 
    at net.sf.jasperreports.engine.fill.JRFillBand.fill(JRFillBand.java:378) 
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(JRVerticalFiller.java:2028) 
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(JRVerticalFiller.java:757) 
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:269) 
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:127) 
    at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:942) 
    at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:860) 
    at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:84) 
    at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:624) 
    at XmlJasperInterface.report(XmlJasperInterface.java:82) 
    at XmlJasperInterface.main(XmlJasperInterface.java:60)</pre> 

Каталог, в котором работает программа:

# ls *.ttf 
arial.ttf arialbd.ttf lsans.ttf lsansd.ttf lsansi.ttf symbol.ttf 

Все остальные шрифты найдены. О, в моем ноутбуке (macosx), он отлично работает, он только ломается на сервере (Debian). Я открыл файл symbol.ttf, и он отлично работает на Mac OS X (на всякий случай файл был поврежден).

Любые идеи, что может быть?

ответ

13

Попробуйте добавить строку

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

своим jasperreports.properties файл.

+5

Это не заставляет его находить шрифт, но он не позволяет ему жаловаться и использовать любой другой шрифт, который он может. Поскольку это было предыдущее поведение, и все были довольны этим раньше, я только что сделал это, хотя это не оптимальное решение. – Pablo

+2

Это не решит проблему, она просто игнорирует проблему. –

+0

Это значение по умолчанию для jasperserver, но я все еще получаю ошибку о отсутствующих шрифтах. –

2

Ну, шрифт должен быть установлен в ОС, где запускается отчет.

+1

Действительно. jasperreports ищет шрифты, доступные в ОС. Например, если вы создаете отчет в Windows и запускаете приложение в Linux, вы получите что-то отдельно от того, что вы видели в iReport, если вы не используете шрифты, которые можно использовать в обеих средах. – Alfabravo

1

Простые шаги для решения этой проблемы было бы

  1. Открыть JasperReports-x.x.x.jar, в моем случае JasperReports-3.7.2.jar.
  2. Найдите файл default.jasperreports.properties и откройте его.
  3. Найти линия net.sf.jasperreports.awt.ignore.missing.font = ложные и изменения значения от ложного к истинному net.sf.jasperreports.awt.ignore.missing.font = истина.
  4. Обновить банку.
  5. Добавить в classpath вашего проекта.

Проблема решена.

+7

Нет необходимости редактировать JAR. Вам просто нужно создать jasperreports.properties и добавить его в путь к классам только со свойствами, которые вы хотите изменить (как указано в принятом решении). –

+0

Я сделал это, работая отлично при запуске класса из затмения. но его не работает, когда я экспортирую как Runnable jar, он дает мне ниже errror «net.sf.jasperreports.engine.JRException: входной поток не найден на: fonts.xml" –

5

На убунту мне нужно удалить шрифты и установите их:

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

Затем он работает нормально.

0

обновление на 2015 год:

Добавьте к этому (или раскомментировать в) /etc/apt/sources.list

deb http://us.archive.ubuntu.com/ubuntu/ trusty multiverse 
deb-src http://us.archive.ubuntu.com/ubuntu/ trusty multiverse 
deb http://us.archive.ubuntu.com/ubuntu/ trusty-updates multiverse 
deb-src http://us.archive.ubuntu.com/ubuntu/ trusty-updates multiverse 

Затем запустите этот:

sudo apt-get update 
sudo apt-get install msttcorefonts 
0

Я используя JasperReports 6.3.1. Я решил эту проблему, добавив следующую строку в моих .jrxml:

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

Таким образом, наш отчет будет выглядеть что-то другое, в зависимости от шрифтов, которые установлены заранее в системе.В моем случае это не представляет проблемы, и я не заинтересован в добавлении дополнительного шрифта в свой проект, так как мне нужно быть как можно более легким.


В случае, если вы хотите использовать оригинальные шрифты отчета во всех средах выполнения, простое решение, чтобы добавить необходимые зависимости для проекта.

Пример для Maven:

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

Вы также можете скачать библиотеки и добавить их вручную в проект, однако он будет работать.


Надеюсь, вы сочтете это полезным.