当前位置: 首页 > 面试题库 >

注册字体损坏.TTF文件

刘绍晖
2023-03-14
问题内容

在我的系统上,我需要注册两个外部字体.TTF文件:

HamletOrNot.ttf (74 KB)
MorrisRoman-Black.ttf (67 KB)

在创建Font()对象之前,我使用以下命令进行记录:

/* Set full path of font */
String path = filesPath + fileName;

/* Read file */
Resource resource = applicationContext.getResource( path );
File fontFile = resource.getFile();

/* Load font */
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
ge.registerFont(Font.createFont(Font.TRUETYPE_FONT, fontFile ));

然后创建对象(由于格式不同,我创建了多个Font()):

Font font = new Font( "HamletOrNot" , Font.TRUETYPE_FONT , 10 );
Font font = new Font( "HamletOrNot" , Font.TRUETYPE_FONT , 12 );
Font font = new Font( "MorrisRoman-Black" , Font.TRUETYPE_FONT , 20 );
Font font = new Font( "MorrisRoman-Black" , Font.TRUETYPE_FONT , 22 );

好的,系统正常工作。问题在于,运行后,.TTF文件会更改大小(分别为83 KB和80 KB),从而:

HamletOrNot.ttf (83 KB)
MorrisRoman-Black.ttf (80 KB)

然后,当我第二次运行系统时,发生以下错误:

...
Caused by: java.awt.FontFormatException: bad table, tag=1280594760
    at sun.font.TrueTypeFont.init(TrueTypeFont.java:513)
    at sun.font.TrueTypeFont.<init>(TrueTypeFont.java:162)
    at sun.font.FontManager.createFont2D(FontManager.java:2474)
    at java.awt.Font.<init>(Font.java:570)
    at java.awt.Font.createFont(Font.java:980)
    at br.com.linu.vectortown.base.screen.font.GameFontFactory.postConstruct(GameFontFactory.java:43)
    at br.com.linu.vectortown.base.screen.font.GameFontContainer.postConstruct(GameFontContainer.java:27)
    at br.com.linu.vectortown.client.looping.util.AutomaticInjector.postConstruct(AutomaticInjector.java:47)
    ... 99 more

如果我将更改后的大小(83 KB和80 KB)的.TTF文件替换为原始文件(74 KB和67 KB),则程序可以正常工作。

我究竟做错了什么?我以为我必须使用applicationContext.getResource()关闭打开的文件,但不知道该怎么做。我不知道该怎么解决。

注意:我得到了Spring的applicationContext。原始的TTF文件(具有正确的大小)位于项目的资源文件夹中,而TTF损坏的文件位于目标资源文件夹中(使用Maven完成构建)。

帮我…

编辑:

我怀疑Maven破坏了文件。为什么?我正在使用带有Maven插件的Eclipse。每当我执行部署或按F5刷新项目时,目标文件夹中的.TTF文件都会损坏。

有人见过Maven损坏的资源文件吗?

谢谢


问题答案:

找到了!专家在执行部署代码时损坏了.TTF文件。要解决此问题,您需要在pom.xml(maven-resources-
plugin)中添加不会通过nonFilteredFileExtension命令过滤的扩展。

<plugin>
  <artifactId>maven-resources-plugin</artifactId>
  <version>2.5</version>
  <configuration>
    <encoding>UTF-8</encoding>
    <nonFilteredFileExtensions>
      <nonFilteredFileExtension>ttf</nonFilteredFileExtension>
    </nonFilteredFileExtensions>
  </configuration>
</plugin>

谢谢!xD,…很幸运!



 类似资料:
  • 例一: !include WinMessages.nsh Section "MainSection" SEC01 File /oname=$FONTS\tahoma.ttf tahoma.ttf Push "$FONTS\tahoma.ttf" System::Call "Gdi32::AddFontResource(t s) i .s" Pop $0 IntCmp $0 0 0 +2 +2 Me

  • 问题内容: 我使用Eclipse在Windows 7中创建了一个jar文件。当我尝试打开jar文件时,它说jar文件无效或损坏。谁能建议我为什么jar文件无效? 问题答案: 当您在Windows资源管理器中双击一个JAR文件时,会发生这种情况,但是JAR本身实际上不是 可执行的 JAR。真正的可执行JAR至少应具有带有方法的类,并在中引用它。 在Eclispe中,您需要将项目导出为 Runnabl

  • 问题内容: 这是我的Resources.class中的一种方法: 我的程序的结构是: 这是不起作用的代码片段: 当我打开PDF时,文本在那里,但是使用了一些字体(我猜是默认字体)。 注意1:我尝试将字体设置为仅短语(p)和仅段落(pa),但这丝毫没有改变输出。 注意2:Resource.loadFont(“ wingding”); try / catch方法没有“捕获”任何错误。 问题答案: 尝试

  • 我正在使用apache poi,我创建了一个HSSF工作簿,并尝试打开一个xlsx文件。但当我用excel打开时,它显示文件已损坏。这是我的密码。

  • 我询问两件事。首先,我有一个ttf文件,它位于我的macair驱动器中。我不想将该文件添加到我的项目结构中。如何从中导入True_type字体。我尝试了各种方法将其导入我的Java程序。例如,公共类TextFixer{ 私有静态字符串[]名称 = { " iksswgrg.ttf " }; //这存在于我的macair驱动器上,我想从它创建字体。 第二部分是我想使用图形创建一个字符串。首先,我需要

  • 有什么想法可以解决我的问题吗? 谢谢,提前。