如何在Java Web应用程序中嵌入字体?

时间:2011-10-20 03:15:41

标签: java fonts amazon-web-services 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();

我遇到的问题是亚马逊的虚拟服务器没有安装正确的字体,因此您无法在应用程序中执行与图像/图表相关的操作。有关详细信息,请参阅this。 他们的客户支持建议使用自定义VM映像(自Oracle JDK附带一组字体以来安装了字体或Oracle JDK),这对我来说不是一个干净的解决方案。

我的问题是: 如何重写我的代码,或以不同的方式打包它,以便它在全新安装的Open JDK上运行,不需要额外的字体(如果可能的话)。

顺便说一句,这是我得到的错误的一部分:

  

2011年10月9日上午11:05:18 org.apache.catalina.core.StandardWrapperValve   为servlet ZipGrocery Application调用SEVERE:Servlet.service()   抛出异常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)at   sun.font.CompositeStrike.getStrikeForSlot(CompositeStrike.java:77)at   sun.font.CompositeStrike.getFontMetrics(CompositeStrike.java:93)at   sun.font.FontDesignMetrics.initMatrixAndMetrics(FontDesignMetrics.java:358)     在sun.font.FontDesignMetrics。(FontDesignMetrics.java:349)at   sun.font.FontDesignMetrics.getMetrics(FontDesignMetrics.java:301)at   sun.java2d.SunGraphics2D.getFontMetrics(SunGraphics2D.java:787)at at   nl.jamiecraane.imagegenerator.impl.TextImageImpl.getFontMetrics(TextImageImpl.java:219)     在   nl.jamiecraane.imagegenerator.impl.TextImageImpl.writeLine(TextImageImpl.java:212)

由于

2 个答案:

答案 0 :(得分:1)

如果你有一个实际的字体,你有适当的许可分发,你可以打包,加载和注册字体作为分布式应用程序的一部分。

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

我发现OpenJDK在生产环境中有缺陷且不可靠。如果可以的话,我会选择Oracle的JDK。

答案 1 :(得分:0)

Google Fonts API怎么样?