全网首发:JDK/Java对于TTC字体文件的支持研究

简介: 全网首发:JDK/Java对于TTC字体文件的支持研究

同事报怨,泰山OFFICE可用字体太少。吾当时就奇怪了:就那么几个字体,让吾给汝变出来?同事说,别的软件字体多啊。吾视之……吾错了。


 于是了解了一下,原来字体文件(TrueType)有两种:一种是单一的字体(TTF),还有一种是多种字体(TTC)。Java允许从文件中产生字体:


Font.createFont(Font.TRUETYPE_FONT, new File("D:\\simsun.ttc"));

 使用FontForge可知其中有两个字体,参数中无法指定。这怎么办?于是搜索了一番,得到这样的信息:


Java支持TTC字体格式,但使用Font.createFont()只能获取TTC文件中定义的第一种字体。目前,无法指定字体索引。

sun.font.SunFontManager.createFont2D(),调用时new TrueTypeFont()(大约是2486),fontIndex始终为零。即:font2D = new TrueTypeFont(fontFilePath, null, 0, true);

 那么,是不是改了就对了呢?咱有泰山JDK8,想改还不容易?随口一句:有自己的基础软件,真的好方便啊。先改成1试试。


产生字体代码

testFonts[0] = new Font("宋体", 0, 16);
testFonts[1] = Font.createFont(Font.TRUETYPE_FONT, new File(FONT_DIR+"\\"+FONT_FILES[0]));
// 指定大小
testFonts[1] = testFonts[1].deriveFont(Font.PLAIN, 16);

绘制结果


image.png

从绘制效果来看,完全一样。这个结果是不是对的呢?目前无法确认。


字体名的变化

System.out.println(f.getFamily()+", "+f.getName()+", "+f.getFontName());

得到的结果都是:新宋体。这说明JDK确实是能处理TTC。


 

目录
相关文章
|
2月前
|
Java Unix Go
【Java】(8)Stream流、文件File相关操作,IO的含义与运用
Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中。!但本节讲述最基本的和流与 I/O 相关的功能。我们将通过一个个例子来学习这些功能。
204 1
|
4月前
|
安全 Oracle Java
JAVA高级开发必备·卓伊凡详细JDK、JRE、JVM与Java生态深度解析-形象比喻系统理解-优雅草卓伊凡
JAVA高级开发必备·卓伊凡详细JDK、JRE、JVM与Java生态深度解析-形象比喻系统理解-优雅草卓伊凡
362 0
JAVA高级开发必备·卓伊凡详细JDK、JRE、JVM与Java生态深度解析-形象比喻系统理解-优雅草卓伊凡
|
5月前
|
Oracle Java 关系型数据库
新手必看:Java 开发环境搭建之 JDK 与 Maven
本文分享了 Java 学习中 JDK 安装配置与 Maven 使用的入门知识,涵盖 JDK 下载安装、环境变量设置、Maven 安装配置及本地仓库与镜像设置,帮助新手快速搭建 Java 开发环境。
650 0
|
5月前
|
安全 Java 微服务
Java 最新技术和框架实操:涵盖 JDK 21 新特性与 Spring Security 6.x 安全框架搭建
本文系统整理了Java最新技术与主流框架实操内容,涵盖Java 17+新特性(如模式匹配、文本块、记录类)、Spring Boot 3微服务开发、响应式编程(WebFlux)、容器化部署(Docker+K8s)、测试与CI/CD实践,附完整代码示例和学习资源推荐,助你构建现代Java全栈开发能力。
664 1
|
5月前
|
存储 Java 编译器
深入理解Java虚拟机--类文件结构
本内容介绍了Java虚拟机与Class文件的关系及其内部结构。Class文件是一种与语言无关的二进制格式,包含JVM指令集、符号表等信息。无论使用何种语言,只要能生成符合规范的Class文件,即可在JVM上运行。文章详细解析了Class文件的组成,包括魔数、版本号、常量池、访问标志、类索引、字段表、方法表和属性表等,并说明其在Java编译与运行过程中的作用。
160 0
|
5月前
|
存储 人工智能 Java
java之通过Http下载文件
本文介绍了使用Java实现通过文件链接下载文件到本地的方法,主要涉及URL、HttpURLConnection及输入输出流的操作。
378 0
|
5月前
|
监控 Java API
Java语言按文件创建日期排序及获取最新文件的技术
这段代码实现了文件创建时间的读取、文件列表的获取与排序以及获取最新文件的需求。它具备良好的效率和可读性,对于绝大多数处理文件属性相关的需求来说足够健壮。在实际应用中,根据具体情况,可能还需要进一步处理如访问权限不足、文件系统不支持某些属性等边界情况。
290 14
|
2月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
199 1
|
2月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
225 1
|
3月前
|
数据采集 存储 弹性计算
高并发Java爬虫的瓶颈分析与动态线程优化方案
高并发Java爬虫的瓶颈分析与动态线程优化方案