Как встроить шрифты в веб-приложение Java?

#java #fonts #amazon-web-services #openjdk

#java #шрифты #amazon-веб-сервисы #openjdk

Вопрос:

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

Я пытаюсь развернуть приложение 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 не установлены надлежащие шрифты, и в результате вы не можете выполнять в своем приложении работы, связанные с изображениями / диаграммами. Смотрите это для получения дополнительной информации.
Их служба поддержки предложила использовать пользовательский образ виртуальной машины (с установленными шрифтами или Oracle JDK, поскольку Oracle JDK поставляется с набором шрифтов), что для меня не является чистым решением.

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

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

9 октября 2011 г. 11:05:18 org.apache.catalina.core.StandardWrapperValve вызывает SERIOUS: Servlet.service() для приложения ZipGrocery сервлета, которое выдало исключение java.lang.Ошибка: Вероятная фатальная ошибка: шрифты не найдены. в sun.font.FontManager.getDefaultPhysicalFont(FontManager.java:1088) в sun.font.FontManager.initialiseDeferredFont(FontManager.java:967) в sun.font.CompositeFont.doDeferredInitialization(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)

Спасибо

Ответ №1:

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

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

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

Ответ №2:

Как насчет API шрифтов Google?

Комментарии:

1. Спасибо за ответ, но я не думаю, что это вариант для меня (с точки зрения бизнеса).