gradle processResources似乎正在破坏字体文件

问题描述:

我已经花了好几个小时来处理一个我认为与损坏的文件有关的问题。基本上我在Spring启动应用程序中使用FlyingSaucer来生成符合语言的pdf文件。我所有的日本/中国/俄罗斯角色都空白了。在深入研究后,我学会了我需要安装一个好的Unicode字体,如Arial Unicode MS.ttf。gradle processResources似乎正在破坏字体文件

我已经下载并安装它在我的Mac上,它似乎很好。我把它放到我的classpath中,放入/ resources并使用inputStream获取它。当我获取它并将其传递给BaseFont(pdf生成的东西)时,它失败,说没有找到表'名称'。显然这是因为一个损坏的文件(谷福说)。我注意到构建目录和src目录中的字体文件有不同的大小,所以对我来说它们肯定是腐败的。我已经尝试了其他几个.ttf文件,他们都抱怨缺少名称表。

我已经学习了gradle的processResources和Copy方法可以破坏文件,但我不明白这个问题。我似乎有一些修复和复制他们,但没有取得利用。我只是想将文件复制到构建目录中,以便我的弹簧引导程序jar可以在生成pdf时访问该字体。

这里是我最近,我没有成功(我是新来的摇篮,这是与工作相关的)

processResources { 
    //// inputs.properties(version: version.toString()) 
//// 
//// def sourceFiles = source.files 
//// 
//// from(sourceFiles) { 
////  include '**/*.properties' 
////  filter(org.apache.tools.ant.filters.ReplaceTokens, tokens: [VERSION: 
////                   version.toString()]) 
//// } 
//// from(sourceFiles) { 
////  exclude '**/*.properties' 
//// } 
    filesNotMatching("**/*.ttf") { 
     it.filter(org.apache.tools.ant.filters.ReplaceTokens, tokens: [ 
       releaseVersion: project.version, 
       releaseDate: buildDate 
     ]) 
    } 
    filter(ReplaceTokens, tokens: [ 
      LOG_LEVEL_ROOT: buildEnvironment=='release' ? 'WARN' : 'INFO', 
      LOG_LEVEL_WIRE: buildEnvironment=='mydev' ? 'DEBUG' : 'INFO', 
      LOG_LEVEL_CR: buildEnvironment=='release' ? 'INFO' : 'DEBUG', 
      LOG_LEVEL_DB_PARAMS: buildEnvironment=='release' ? 'INFO' : 'TRACE', 
      LOG_LEVEL_DB_QUERY: buildEnvironment=='release' ? 'DEBUG' : 'DEBUG', 
      LOG_LEVEL_SPRING: buildEnvironment=='release' ? 'INFO' : 'INFO' 
    ]) 
} 

根据谷歌的filesnotMatching应该让我跳过.TTF文件,但它试图片段仍然被复制并损坏。我尝试将.ttf添加到不同的文件夹,并使用gradle copy代替processResources,但无法以这种方式工作(可能做错了)。

解决方案:https://github.com/grails/grails-core/issues/629

你的第二个filter被应用到所有文件。您需要从该过滤中排除.ttf文件。最简单的方法是将其移动到filesNotMatching("**/*.ttf")块中:

filesNotMatching("**/*.ttf") { 
    it.filter(ReplaceTokens, tokens: [ 
      releaseVersion: project.version, 
      releaseDate: buildDate 
    ]) 

    it.filter(ReplaceTokens, tokens: [ 
      LOG_LEVEL_ROOT: buildEnvironment=='release' ? 'WARN' : 'INFO', 
      LOG_LEVEL_WIRE: buildEnvironment=='mydev' ? 'DEBUG' : 'INFO', 
      LOG_LEVEL_CR: buildEnvironment=='release' ? 'INFO' : 'DEBUG', 
      LOG_LEVEL_DB_PARAMS: buildEnvironment=='release' ? 'INFO' : 'TRACE', 
      LOG_LEVEL_DB_QUERY: buildEnvironment=='release' ? 'DEBUG' : 'DEBUG', 
      LOG_LEVEL_SPRING: buildEnvironment=='release' ? 'INFO' : 'INFO' 
    ]) 
} 
+0

感谢此工作,以防止字体文件的副本。之后,我做了一个复制任务,从这里找到(https://github.com/grails/grails-core/issues/629)复制的解决方案,而不会被损坏。 – gallly