Ответ 1
Попробуйте добавить строку
net.sf.jasperreports.awt.ignore.missing.font=true
в файл jasperreports.properties.
После обновления Jasper до последней версии он прекратил поиск одного шрифта: Symbol. Остальные шрифты кажутся прекрасными. У меня есть куча ttfs в том же каталоге, что и при запуске jasper, программа - всего лишь небольшая оболочка для создания PDF файлов, и она бросает эту ошибку:
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 (на всякий случай файл был поврежден).
Любые идеи, что может происходить?
Попробуйте добавить строку
net.sf.jasperreports.awt.ignore.missing.font=true
в файл jasperreports.properties.
На ubuntu мне нужно было удалить шрифты и переустановить их:
sudo apt-get remove ttf-mscorefonts-installer
sudo apt-get install ttf-mscorefonts-installer
Затем он работает нормально.
Ну, шрифт должен быть установлен в ОС, где выполняется отчет.
Простые шаги для решения этой проблемы:
Проблема решена.
Обновление на 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
Я использую 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>
Вы также можете загрузить библиотеки и добавить их вручную в проект, однако он будет работать.
Надеюсь, вы сочтете их полезными.