Как встроить шрифты в веб-приложение Java? - PullRequest
0 голосов
/ 20 октября 2011

Этот вопрос является общим, но также связан с веб-сервисами Amazon.

Я пытаюсь развернуть приложение Java на облачном сервере Amazon, но приложение не запускается, поскольку оно использует шрифты AWT (см. Следующие строки):

TextImage testImage = new TextImageImpl(128, 32, new Margin(0, 8));

// Declare or read the fonts you need
Font header = new Font("Sans-Serif", Font.BOLD, 24);

// 1. specify font and write text with a newline
testImage.useFont(header).writeLine(text).newLine();

Проблема, с которой я сталкиваюсь, заключается в том, что на виртуальных серверах Amazon не установлены правильные шрифты, и в результате вы не можете выполнять в своем приложении работу с изображениями / диаграммами. См. this для получения дополнительной информации. Их служба поддержки клиентов предложила использовать собственный образ виртуальной машины (с установленными шрифтами или Oracle JDK, поскольку Oracle JDK поставляется с набором шрифтов), что для меня не является чистым решением.

Мой вопрос: Как я могу переписать свой код или упаковать его другим способом, чтобы он работал на новой установке Open JDK без дополнительных шрифтов (если это вообще возможно).

Кстати, вот часть ошибки, которую я получаю:

9 октября 2011 г. 11:05:18 org.apache.catalina.core.StandardWrapperValve вызовите SEVERE: Servlet.service () для приложения ZipGrocery с сервлетом сгенерировано исключение java.lang.Error: Вероятная фатальная ошибка: шрифты не найдены. at sun.font.FontManager.getDefaultPhysicalFont (FontManager.java:1088) at sun.font.FontManager.initialiseDeferredFont (FontManager.java:967) в sun.font.CompositeFont.doDeferredInitialisation (CompositeFont.java:254) в sun.font.CompositeFont.getSlotFont (CompositeFont.java:334) в sun.font.CompositeStrike.getStrikeForSlot (CompositeStrike.java:77) в sun.font.CompositeStrike.getFontMetrics (CompositeStrike.java:93) в sun.font.FontDesignMetrics.initMatrixAndMetrics (FontDesignMetrics.java:358) в sun.font.FontDesignMetrics. (FontDesignMetrics.java:349) в sun.font.FontDesignMetrics.getMetrics (FontDesignMetrics.java:301) в sun.java2d.SunGraphics2D.getFontMetrics (SunGraphics2D.java:787) в nl.jamiecraane.imagegenerator.impl.TextImageImpl.getFontMetrics (TextImageImpl.java:219) в nl.jamiecraane.imagegenerator.impl.TextImageImpl.writeLine (TextImageImpl.java:212)

Спасибо

Ответы [ 2 ]

1 голос
/ 20 октября 2011

Если у вас был действительный шрифт, у которого была соответствующая лицензия для распространения, вы можете упаковать, загрузить и зарегистрировать шрифт как часть вашего распределенного приложения.

Font font = Font.createFont(Font.TRUETYPE_FONT, new File("A.ttf"));
return font.deriveFont(24f);

Я обнаружил, что OpenJDK глючит и ненадежен для производственных сред. Я бы просто пошел с Oracle JDK, если вы можете.

0 голосов
/ 20 октября 2011

Как насчет Google Fonts API ?

...