获取系统所有字体

/*** 显示当前系统环境支持的字体*/
@Test
void getAvailableFontFamilyNames() {GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();String[] fontNames = ge.getAvailableFontFamilyNames();for (String fontName : fontNames) {System.out.println(fontName);}
}

注意,该方法只能获取到当前系统有哪些字体,并不代表着 Graphics2D 也支持这些字体。所以才需要下文去筛选出 Graphics2D 真正支持的字体出来。

初步筛选出支持中文的字体

/*** 用系统所有字体生成一个图片,用于初步筛选出支持中文的字体*/
@Test
void allFonts() {int fontSize = 20;// 获取当前系统所有字体GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();String[] fontNames = ge.getAvailableFontFamilyNames();String str = "东临碣石,以观沧海。水何澹澹,山岛竦峙。树木丛生,百草丰茂。秋风萧瑟,洪波涌起。日月之行,若出其中;星汉灿烂,若出其里。幸甚至哉,歌以咏志。";int height = 0;int width = 0;// 根据字体获取需要生成的图片的宽和高for (String fontName : fontNames) {Font font = new Font(fontName, Font.PLAIN, fontSize);FontDesignMetrics metrics = FontDesignMetrics.getMetrics(font);height += metrics.getHeight();int tmpWidth = metrics.stringWidth(fontName + " : " + str);if (tmpWidth > width) {width = tmpWidth;}}BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY);Graphics2D g2d = null;try {//创建画笔g2d = image.createGraphics();//设置背景颜色为白色g2d.setColor(Color.WHITE);g2d.fillRect(0, 0, image.getWidth(), image.getHeight());//设置画笔颜色为黑色g2d.setColor(Color.BLACK);RenderingHints hints = new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);// 开启文字抗锯齿hints.put(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);g2d.setRenderingHints(hints);int startY = 0;for (String fontName : fontNames) {Font font = new Font(fontName, Font.PLAIN, fontSize);System.out.println(fontName);g2d.setFont(font);g2d.drawString(fontName + " : " + str, 0, startY);// 下一行文字的左上角纵坐标FontDesignMetrics metrics = FontDesignMetrics.getMetrics(font);startY += metrics.getHeight();}String savePath = "\\temp\\all_fonts.png";ImageIO.write(image, "PNG", new File(savePath));} catch (IOException e) {e.printStackTrace();} finally {if (g2d != null) {g2d.dispose();}}
}

得到所有字体生成的图片


根据图片结果,可以初步筛选出支持中文的字体有:
Arial Unicode MS、Dialog、DialogInput、Microsoft JhengHei、Microsoft JhengHei Light、Microsoft JhengHei UI、Microsoft JhengHei UI Light、Microsoft YaHei UI、Microsoft YaHei UI Light、MS Gothic、MS PGothic、MS UI Gothic、SansSerif、Serif、仿宋、华文中宋、华文仿宋、华文宋体、华文彩云、华文新魏、华文楷体、华文琥珀、华文细黑、华文行楷、华文隶书、宋体、幼圆、微软雅黑、微软雅黑 Light、新宋体、方正姚体、方正舒体、楷体、等线、等线 Light、隶书、黑体

进一步筛选支持中文和特殊字符的字体

/*** 用初步支持中文的字体绘制长文本,进一步校验中文的支持*/
@Test
void fonts() {int fontSize = 24;String[] fontNames = {"Arial Unicode MS","Dialog","DialogInput","Microsoft JhengHei","Microsoft JhengHei Light","Microsoft JhengHei UI","Microsoft JhengHei UI Light","Microsoft YaHei UI","Microsoft YaHei UI Light","MS Gothic","MS PGothic","MS UI Gothic","SansSerif","Serif","仿宋","华文中宋","华文仿宋","华文宋体","华文彩云","华文新魏","华文楷体","华文琥珀","华文细黑","华文行楷","华文隶书","宋体","幼圆","微软雅黑","微软雅黑 Light","新宋体","方正姚体","方正舒体","楷体","等线","等线 Light","隶书","黑体"};int height = 2000;int width = 600;// 需要绘制的文字(可自行添加其他字符或者中文去校验)String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz:;<=>?@[\\]^_`{|}~¡i¢£¥§¤©ªa«°o0±²2³3µ¶·.¹1º0»¼½¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÍÏÑÒÓÔÕÖOEØÙÚÛÜYyYßàáâãäåæçèéêëìíîïñòóôõöoeøùúûüÿ天地玄黄,宇宙洪荒。日月盈昃,辰宿列张。寒来暑往,秋收冬藏。闰余成岁,律吕调阳。云腾致雨,露结为霜。金生丽水,玉出昆冈。剑号巨阙,珠称夜光。果珍李柰,菜重芥姜。海咸河淡,鳞潜羽翔。龙师火帝,鸟官人皇。始制文字,乃服衣裳。推位让国,有虞陶唐。吊民伐罪,周发殷汤。坐朝问道,垂拱平章。爱育黎首,臣伏戎羌。遐迩一体,率宾归王。鸣凤在竹,白驹食场。化被草木,赖及万方。盖此身发,四大五常。恭惟鞠养,岂敢毁伤。女慕贞洁,男效才良。知过必改,得能莫忘。罔谈彼短,靡恃己长。信使可覆,器欲难量。墨悲丝染,诗赞羔羊。景行维贤,克念作圣。德建名立,形端表正。空谷传声,虚堂习听。祸因恶积,福缘善庆。尺璧非宝,寸阴是竞。资父事君,曰严与敬。孝当竭力,忠则尽命。临深履薄,夙兴温凊。似兰斯馨,如松之盛。川流不息,渊澄取映。容止若思,言辞安定。笃初诚美,慎终宜令。荣业所基,籍甚无竟。学优登仕,摄职从政。存以甘棠,去而益咏。乐殊贵贱,礼别尊卑。上和下睦,夫唱妇随。外受傅训,入奉母仪。诸姑伯叔,犹子比儿。孔怀兄弟,同气连枝。交友投分,切磨箴规。仁慈隐恻,造次弗离。节义廉退,颠沛匪亏。性静情逸,心动神疲。守真志满,逐物意移。坚持雅操,好爵自縻。都邑华夏,东西二京。背邙面洛,浮渭据泾。宫殿盘郁,楼观飞惊。图写禽兽,画彩仙灵。丙舍旁启,甲帐对楹。肆筵设席,鼓瑟吹笙。升阶纳陛,弁转疑星。右通广内,左达承明。既集坟典,亦聚群英。杜稿钟隶,漆书壁经。府罗将相,路侠槐卿。户封八县,家给千兵。高冠陪辇,驱毂振缨。世禄侈富,车驾肥轻。策功茂实,勒碑刻铭。盘溪伊尹,佐时阿衡。奄宅曲阜,微旦孰营。桓公匡合,济弱扶倾。绮回汉惠,说感武丁。俊义密勿,多士实宁。晋楚更霸,赵魏困横。假途灭虢,践土会盟。何遵约法,韩弊烦刑。起翦颇牧,用军最精。宣威沙漠,驰誉丹青。九州禹迹,百郡秦并。岳宗泰岱,禅主云亭。雁门紫塞,鸡田赤城。昆池碣石,钜野洞庭。旷远绵邈,岩岫杳冥。治本于农,务兹稼穑。俶载南亩,我艺黍稷。税熟贡新,劝赏黜陟。孟轲敦素,史鱼秉直。庶几中庸,劳谦谨敕。聆音察理,鉴貌辨色。贻厥嘉猷,勉其祗植。省躬讥诫,宠增抗极。殆辱近耻,林皋幸即。两疏见机,解组谁逼。索居闲处,沉默寂寥。求古寻论,散虑逍遥。欣奏累遣,戚谢欢招。渠荷的历,园莽抽条。枇杷晚翠,梧桐蚤凋。陈根委翳,落叶飘摇。游鹍独运,凌摩绛霄。耽读玩市,寓目囊箱。易輶攸畏,属耳垣墙。具膳餐饭,适口充肠。饱饫烹宰,饥厌糟糠。亲戚故旧,老少异粮。妾御绩纺,侍巾帷房。纨扇圆洁,银烛炜煌。昼眠夕寐,蓝笋象床。弦歌酒宴,接杯举觞。矫手顿足,悦豫且康。嫡后嗣续,祭祀烝尝。稽颡再拜,悚惧恐惶。笺牒简要,顾答审详。骸垢想浴,执热愿凉。驴骡犊特,骇跃超骧。诛斩贼盗,捕获叛亡。布射僚丸,嵇琴阮啸。恬笔伦纸,钧巧任钓。释纷利俗,并皆佳妙。毛施淑姿,工颦妍笑。年矢每催,曦晖朗曜。璇玑悬斡,晦魄环照。指薪修祜,永绥吉劭。矩步引领,俯仰廊庙。束带矜庄,徘徊瞻眺。孤陋寡闻,愚蒙等诮。谓语助者,焉哉乎也。";Graphics2D g2d = null;try {for (String fontName : fontNames) {BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY);//创建画笔g2d = image.createGraphics();//设置背景颜色为白色g2d.setColor(Color.WHITE);g2d.fillRect(0, 0, image.getWidth(), image.getHeight());//设置画笔颜色为黑色g2d.setColor(Color.BLACK);RenderingHints hints = new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);// 开启文字抗锯齿hints.put(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);g2d.setRenderingHints(hints);Font font = new Font(fontName, Font.PLAIN, fontSize);g2d.setFont(font);FontDesignMetrics metrics = FontDesignMetrics.getMetrics(font);// 生成换行文本char[] chars = str.toCharArray();int tmpWidth = 0;List<String> lines = new ArrayList<>();StringBuilder sb = new StringBuilder();for (int i = 0; i < chars.length; i++) {char c = chars[i];tmpWidth += metrics.charWidth(c);if (tmpWidth > image.getWidth()) {// 换行lines.add(sb.toString());sb = new StringBuilder();tmpWidth = 0;i--;} else {sb.append(c);}}if (sb.length() > 0) {lines.add(sb.toString());}// 绘制每行文字for (int i = 0; i < lines.size(); i++) {String line = lines.get(i);g2d.drawString(line, 0, metrics.getAscent() + metrics.getHeight() * i);}String savePath = "\\temp\\text_test2\\" + fontName + ".png";ImageIO.write(image, "PNG", new File(savePath));}} catch (IOException e) {e.printStackTrace();} finally {if (g2d != null) {g2d.dispose();}}
}

例如字体 MS Gothic 得到的图片中,可以看到虽然特殊字符支持,但是不少中文是不支持的:


例如华文彩云字体得到的图片中,部分特殊字符是不支持的:

最终根据各个字体生成的图片,得出当前系统支持特殊字符和大部分中文的字体有:

字体名称 中文友好度 特殊字符友好度
Arial Unicode MS
Dialog
DialogInput
Microsoft JhengHei
Microsoft JhengHei Light
Microsoft JhengHei UI
Microsoft JhengHei UI Light
Microsoft YaHei UI
Microsoft YaHei UI Light
MS Gothic 部分
MS PGothic 部分
MS UI Gothic 部分
SansSerif
Serif
仿宋 部分
华文中宋
华文仿宋
华文宋体
华文彩云 部分
华文新魏 部分
华文楷体
华文琥珀 部分
华文细黑
华文行楷 部分
华文隶书 部分
宋体
幼圆 部分
微软雅黑
微软雅黑 Light
新宋体
方正姚体
方正舒体
楷体 部分
等线
等线 Light
隶书 部分
黑体 部分

注:可自行在str中添加自己需要校验的特殊字符和中文,这里只校验到:《千字文》的中文、大小写英文字母、以及特殊字符:;<=>?@[]^_`{|}~¡i¢£¥§¤©ªa«°o0±²2³3µ¶·.¹1º0»¼½¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÍÏÑÒÓÔÕÖOEØÙÚÛÜYyYßàáâãäåæçèéêëìíîïñòóôõöoeøùúûüÿ

java Graphics2D 获取当前系统实际支持特殊字符和中文的字体相关推荐

  1. JAVA中获取当前系统时间

    JAVA中获取当前系统时间 转自:http://www.cnblogs.com/Matrix54/archive/2012/05/01/2478158.html 一. 获取当前系统时间和日期并格式化输 ...

  2. 关于Java中获取当前系统时间

    一. 获取当前系统时间和日期并格式化输出: 1 import java.util.Date; 2 import java.text.SimpleDateFormat; 3 4 public class ...

  3. Java如何获取当前系统时间

    Java获取当前系统时间,需要用到Date类或者System.currentTimeMillis(). 实现 Date: System.out.println(new Date()); 实现Syste ...

  4. Java反射获取Android系统属性值

    目录 反射定义 为何需要反射 反射方法Method getDeclaredMethod方法 getMethod方法 参数解释 invoke方法 Android 反射应用 反射定义 "反射&q ...

  5. Java中获取当前系统年份

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 方法一: ...

  6. java输出当前时间_JAVA中获取当前系统时间 - Matrix54 - 博客园

    JAVA中获取当前系统时间 - Matrix54 - 博客园 一. 获取当前系统时间和日期并格式化输出: import java.util.Date; import java.text.SimpleD ...

  7. java office在线编辑_国外10个最受欢迎的 Java 开发的 CMS 系统

    CMS是Content Management System的缩写,意为"内容管理系统",它具有许多基于模板的优秀设计,可以加快网站开发的速度和减少开发的成本.CMS的功能并不只限于 ...

  8. Java开源的CMS系统

     InfoGlue  infoglue是一个高级的.可扩展的. 健壮的内容管理系统,完全用Java开发.重要的功能包括完全支持多语言,站点之间良好的重用,以及广泛的集成能力. 更多InfoGlue信息 ...

  9. java 小说cms_10 个最受欢迎的 Java 开发的 CMS 系统

    CMS是Content Management System的缩写,意为"内容管理系统",它具有许多基于模板的优秀设计,可以加快网站开发的速度和减少开发的成本.CMS的功能并不只限于 ...

  10. 【网站】国外10个最受欢迎的 Java 开发的 CMS 系统

    CMS是Content Management System的缩写,意为"内容管理系统",它具有许多基于模板的优秀设计,可以加快网站开发的速度和减少开发的成本.CMS的功能并不只限于 ...

最新文章

  1. [原]Failed to load SELinux policy. System Freezing ----redhat7or CentOS7 bug
  2. Java 读写文件大全
  3. c3p0如何配置多数据源的解决方法
  4. HTML5 SVG
  5. 斯坦福NLP组最新报告:自然语言处理中的学习挑战(附149页报告全文下载
  6. Simulink框图和S-函数
  7. 警示:强制关闭OGG进程触发bug致abended,详述处理过程
  8. 禁用 ssh agent_如何修复“禁用Agent XP”错误
  9. Fckeditor 2.4.2 php任意上传文件漏洞
  10. 什么是CTS、CLS和CLR
  11. BrcmPatchRAM 黑苹果WiFi无线网卡蓝牙驱动
  12. 网上订餐系统python程序代码_网上订餐系统源代码
  13. php 简繁体,php实现简体转繁体
  14. oracle数据库表空间扩容方法
  15. elasticsearch,使用normalizer优化keyword字段的查询
  16. 如何做好软件可靠性测试?
  17. Android 全局字体设置
  18. vue与C#实现自定义表单审批流程构建-后端
  19. STC用PCA测量脉宽_示波器在进行频率测量时如何减少误差
  20. 深度学习模型训练和关键参数调优详解

热门文章

  1. 中兴E1630拆机,MTK第一款AX3000(MT7916)
  2. 英伟达显卡老版本驱动下载网址
  3. python大学课本_求推荐一本大学Python教材|python基础教程用书
  4. 【openGL2021版】obj模型
  5. 众银行纷纷抢滩网贷市场 大数据征信如何做?
  6. HP服务器raid卡型号b110i安装2008R2认不到硬盘缺少硬盘驱动
  7. nodejs 遍历json数据_异步-使用node.js遍历JSON
  8. arccatalog点要素显示不完_改变人际关系核心要素,不讨好不献媚,牢记这3点,受益一生...
  9. matlab更改类型,matlab数据类型和转换
  10. APP过等保三级需要注意个人信息保护