• Java引用外部字体(路径引用)的一些坑


    一 原因

    后端负责字体...哎,我们公司的前端真的任性啊...

    然后,一路踩了jvm关于字体的坑,重点是,java的报错很随意,甚至不报错,建议直接看最后面.

    二 代码

    正常要windows装一次字体,linux装一次字体,这样的话系统就能直接拿到了。

    但是这样一点都不兼容,加个字体,还要装个两次,反程序员啊。(后面你会发现更加反程序员)

    那么,只能把字体放到哦静态文件里面,然后引用外部字体了。

    private static Font definedFont;
    private static final String basePath = System.getProperty("user.dir") + File.separator + "web" + File.separator + "src" + File.separator + "main" + File.separator + "resources"
    + File.separator + "static" + File.separator + "backToSchool";
    /**
    * 引用外部字体
    */
    public static void setFont() {
    String fontUrl = basePath + File.separator + "fonts" + File.separator + "SourceHanSans-Bold.ttf";
    logger.info(".setFont.fontUrl={}", fontUrl);
    try {
    Font font = Font.createFont(Font.TRUETYPE_FONT, new File(fontUrl));
    //设置字体大小,float型
    setDefinedFont(font.deriveFont(FONT_SIZE));
    } catch (Exception e) {
    logger.error(".setFont.e={}", e.getMessage(), e);
    throw new ActivityBusinessException(BtsErrorCode.SET_FONT_ERROR);
    }
    }
    
    
    public static Font getDefinedFont() {
    return definedFont;
    }

    public static void setDefinedFont(Font font) {
    definedFont = font;
    }
     

    三 坑

    其实代码很简单,难点在于字体文件。

    坑一

    一开始,需求给的otf字体我在开发机和测试机(windows/linux)都安装了,然后一跑,正常,美滋滋。

    但是这样一点都不程序员,我还要在正式环境装一次字体,特傻。

    于是,只能引用外部字体。

    坑二

    前头说了,是otf文件,用正确的代码跑一下,很好一个报错都没有!(此处应有掌声!)

    但是,就是不显示字体,甚至不用默认字体,什么都没有输出,我心想,java竟然没有报错????

    好吧百度,1个小时之后。

    嗯,我只能说这个引用外部的otf在百度上,根本没有任何解决方法。

    甚至问这个问题的人,答案也是叫我们在操作系统安装,本地引用。

    然后,谷歌,stackflow。

    大神直接fxxk了一下java的awt,大意就是java说支持引用otf,但是,不支持外部引用otf,最后说了一句awt写的就是一坨翔。

    小数几个直接爆粗口的答案啊,感觉这哥们也和我那样浪费一大堆时间,在这傻逼问题上。

    于是,只能叫需求给ttf格式的字体。

    坑三

    很好使用ttf外部引用,谢天谢地,终于报错了。

    FONT NAME ERROR xxxxxx

    什么?字体名字不正确的?

    大哥,我是根据路径引用的哦,不是根据字体名字去系统那里取的哦?

    是的,这个就是我说的java的报错很随意

    那么只能排除了,用个系统的内部字体试一下,正常无报错。

    我那个纠结啊,也就是说外部引用,路径引用代码没错,而且看了源码,外部引用也就是路径引用。

    也就是说需求给的ttf有问题,反映一下问题,需求说你想要怎样的ttf呢?

    鬼子知道啊?我也想知道啊!

    于是,我只能装个设计字体的软件来找一下,两个ttf文件的不同!

    坑四

    设计字体的软件怎么操作,我不想说,太反程序员了,我担心说出来,会害了你们。

    说个大致思路。

    用windows打开后,会发现正常的有个数字签名。

    也就是用设计字体的文件加个数字签名就好了!

    其实我是倒因为果,再改之前我都不知道有数字签名这玩意

    直接把一个正常的ttf的非必要属性,直接覆盖了不正常的ttf的非必要属性。然后,改字体名称什么的,你会发现上图,基本没几个属性一样....(够反程序员了吧?)

    至此,功能完全已经实现。

    坑五

    你们真以为这样就结束了?

    我实现了这个功能之后,还要写点字进去,然后居中动态靠右。

    但是,这个网页在手机上的,也就是说要搞手机适配!

    然后,和前后端的老大说了下,这个需求要实现后端机型适配,获取长宽来写字。

    最终,两方大佬逼迫前端学习技术去了,也就是说我搞了这么久,一点用都没有....

    四 结论

    字体还是给前端做吧...

  • 相关阅读:
    让linux用户隶属于多个组
    ldd 的介绍
    全栈博客开发(三)完善项目并容器化
    C++ 迭代器
    C++ vector类
    C++输入输出流和变量
    C++ vscode搭建windows C++开发环境
    全栈博客开发(二)添加渲染
    C++ string类
    全栈博客开发(一)服务结构
  • 原文地址:https://www.cnblogs.com/ydymz/p/9541950.html
Copyright © 2020-2023  润新知