java特粗宋体_Java IdentityPlusMapper类代码示例

该博客介绍了如何在Java中使用docx4j库处理字体映射,特别是在处理缺失字体时的解决方案。通过创建IdentityPlusMapper,自动检测系统字体并映射到合适的替代字体,确保在不同系统上正确显示文档。此外,还特别关注了中文字体的兼容处理,详细列举了中文字体与对应物理字体的映射关系。
摘要由CSDN通过智能技术生成

import org.docx4j.fonts.IdentityPlusMapper; //导入依赖的package包/类

public Mapper getFontMapper() throws Exception {

// Set up font mapper (optional)

// example of mapping font Times New Roman which doesn't have certain Arabic glyphs

// eg Glyph "ي" (0x64a, afii57450) not available in font "TimesNewRomanPS-ItalicMT".

// eg Glyph "ج" (0x62c, afii57420) not available in font "TimesNewRomanPS-ItalicMT".

// to a font which does

PhysicalFonts.get("Arial Unicode MS");

/*

* This mapper uses Panose to guess the physical font which is a closest fit for the font used in the document.

* (这个映射器使用Panose算法猜测最适合这个文档使用的物理字体。)

*

* Panose是一种依照字体外观来进行分类的方法。我们可以通过PANOSE体系将字体的外观特征进行整理,并且与其它字体归类比较。

* Panose的原形在1985年由Benjamin Bauermeister开发,当时一种字体由7位16进制数字定义,现在则发展为10位,也就是字体的十种特征。这每一位数字都给出了它定义的一种视觉外观的量度,如笔划的粗细或是字体衬线的样式等。

* Panose定义的范围:Latin Text,Latin Script,Latin Decorative,Iconographic,Japanese Text,Cyrillic Text,Hebrew。

*

* It is most likely to be suitable on Linux or OSX systems which don't have Microsoft's fonts installed.

* (它很可能适用于没有安装Microsoft字体的Linux或OSX系统。)

*

* 1、获取Microsoft字体我们需要这些:a.在Microsoft平台上,嵌入PDF输出; b. docx4all - 所有平台 - 填充字体下拉列表

* setupMicrosoftFontFilenames();

* 2、 自动检测系统上可用的字体

* PhysicalFonts.discoverPhysicalFonts();

*

*/

//Mapper fontMapper = new BestMatchingMapper();

/*

*

* This mapper automatically maps document fonts for which the exact font is physically available.

* Think of this as an identity mapping. For this reason, it will work best on Windows, or a system on

* which Microsoft fonts have been installed.

* (此映射器自动映射确切可用的文档字体,将此视为标识映射;基于这个原因,它在Windows系统或安装了微软字体库的系统运行的更好。)

* You can manually add your own additional mappings if you wish.

* 如果需要,你可以手动添加自己的字体映射

*

* 1、 自动检测系统上可用的字体

* PhysicalFonts.discoverPhysicalFonts();

*

*/

Mapper fontMapper = new IdentityPlusMapper();

//遍历自定义的字体库信息

for (FontScheme fontScheme : COMPLIED_FONTSCHEME.values()) {

//获取字体库

PhysicalFont physicalFont = PhysicalFonts.get(fontScheme.getFontName());

//分别设置字体名和别名对应的字体库

fontMapper.put(fontScheme.getFontName(), physicalFont );

fontMapper.put(fontScheme.getFontAlias(), physicalFont );

}

//进行中文字体兼容处理

fontMapper.put("微软雅黑",PhysicalFonts.get("Microsoft Yahei"));

fontMapper.put("黑体",PhysicalFonts.get("SimHei"));

fontMapper.put("楷体",PhysicalFonts.get("KaiTi"));

fontMapper.put("隶书", PhysicalFonts.get("LiSu"));

fontMapper.put("宋体",PhysicalFonts.get("SimSun"));

fontMapper.put("宋体扩展",PhysicalFonts.get("simsun-extB"));

fontMapper.put("新宋体",PhysicalFonts.get("NSimSun"));

fontMapper.put("仿宋",PhysicalFonts.get("FangSong"));

fontMapper.put("仿宋_GB2312",PhysicalFonts.get("FangSong_GB2312"));

fontMapper.put("幼圆",PhysicalFonts.get("YouYuan"));

fontMapper.put("华文宋体",PhysicalFonts.get("STSong"));

fontMapper.put("华文仿宋", PhysicalFonts.get("STFangsong"));

fontMapper.put("华文中宋",PhysicalFonts.get("STZhongsong"));

fontMapper.put("华文行楷", PhysicalFonts.get("STXingkai"));

return fontMapper;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值