【问题标题】:gradle processResources seems to be corrupting a font filegradle processResources 似乎正在破坏字体文件
【发布时间】:2016-06-08 01:45:37
【问题描述】:

我花了几个小时来解决一个我认为与损坏的文件有关的问题。基本上我在 Spring Boot 应用程序中使用 FlyingSaucer 来生成符合语言的 pdf。我所有的日文/中文/俄文字符都是空白的。经过深入研究,我了解到我需要安装一个好的 unicode 字体,例如 Arial Unicode MS.ttf。

我已经下载并安装在我的mac上,看起来不错。我通过将它放入 /resources 并使用 inputStream 获取它来将它放入我的类路径中。当我获取它并将其传递给 BaseFont(生成 pdf 的东西)时,它无法说找不到表“名称”。显然是因为文件损坏(google fu 说)。我注意到构建目录和 src 目录中的字体文件有不同的大小,所以对我来说它们肯定是损坏的。我尝试了其他几个 .ttf,他们都抱怨缺少名称表。

我了解到 gradle 的 processResources 和 Copy 方法会损坏文件,但我不明白修复方法。我似乎有一些修复并复制了它们,但没有用。我只想将一个文件复制到构建目录中,以便我的 spring boot jar 在生成 pdf 时可以访问该字体。

这是我最近尝试但没有成功的 sn-p(我是 gradle 新手,这与工作有关)

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'
    ])
}

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

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

【问题讨论】:

    标签: java gradle fonts


    【解决方案1】:

    您的第二个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'
        ])
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-09
    • 2014-03-11
    • 2016-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多