2016-06-08 57 views
1

我已經花了好幾個小時來處理一個我認爲與損壞的文件有關的問題。基本上我在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

回答

2

你的第二個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

相關問題