问题
此字体问题不是由于serif/sans serif字体本身,而是由于字体未覆盖文本中的字符.未提及的字符指的是"樱花的叶子",是汉字(CJK统一表意文字)的一部分:
Glyph Unicode code point Represents Code Block
? U+53F6 to harmonize, to rhyme; to unite; (borrowed for) leaf CJK Unified (plane 5 stroke 5)
? U+6A31 cherry/cherryblossom CJK Unified (plane 6 stroke 15)
Run Code Online (Sandbox Code Playgroud)
http://www.fileformat.info/info/unicode/char/53f6/index.htm
http://www.fileformat.info/info/unicode/char/6a31/index.htm
http://www.decodeunicode. org/en/u + 53f6/properties
http://www.decodeunicode.org/en/u+6A31/properties
unicode代码点是字符的"通用虚拟表示" - 它们不包含在您的文件中,也不会在屏幕上呈现.
过程如下:
Author's Head/ Virtual Space Bytes In
Generating Tool ---> (Incl. Strings ---> File ----> Screen/Printer
In Tool Memory)
Desired Unicode Character Encoded Symbol Rendered Via
Language Symbol Code Point Via Nominated Nominated Font In
File Encoding File
Run Code Online (Sandbox Code Playgroud)
在Microsoft上,Arial掩盖了将字体与文本匹配的需要,因为Arial Unicode MS字体实际上是Arial字体之外的大型扩展- 它包括大多数Microsoft代码页,包括这个包含这两个字符的代码页.
现代Linux安装应该有支持字体.如果你没有,那么肯定没有中文功能.使用Ubuntu管理语言支持功能来解决此问题的示例.键入以下内容以发现匹配的字体:
xlsfonts | grep gb
xlsfonts | grep big5
xlsfonts | grep han
xlsfonts | grep ming
xlsfonts | grep song
xlsfonts | grep kai
Run Code Online (Sandbox Code Playgroud)
下载适用于Linux的中文/亚洲字体
来自Adobe:
http://www.adobe.com/support/downloads/product.jsp?platform=windows&product=10(转到附加组件)
http://www.adobe.com/support/downloads/detail.jsp?ftpID= 4883
http://www.adobe.com/support/downloads/product.jsp?platform=windows&product=10
优点:如果您生成使用这些字体的PDF,用户试图那么当读取使用Adobe Reader PDF,而无需安装字体,它们会自动通知并提示下载字体.为非Linux客户端提供兼容性.
Adobe主持一个关于CJK字体,字符集和编码的博客
非Adobe:
在Linux上,以下字体支持以下两个字符:
GNU Unifont
明字体
WenQuanYi Bitmap Song(文泉驿点阵宋体)wqy-bitmapfont
无衬线字体
WenQuanYi Micro Hei(文泉驿微米黑)wqy-microhei
常规字体
见https://wiki.archlinux.org/index.php/Fonts#.28Mainly.29_Chinese
如果您自己下载,则需要管理员权限才能将字体复制到相应的linux目录(如/etc/fonts/fonts.confEg /var/font/truetype, /usr/share/fonts, /usr/local/share/fonts,和中所定义/home/<username>/.fonts). 这里和这里的方向.
缺点:您需要手动将这些字体分发给客户端.非Linux客户端存在不兼容的风险.
在Birt中配置字体路径
在此步骤和下一步中更改fontsConfig.xml之后,需要重新启动BIRT才能使更改生效.
设置font-pathsfontsConfig.xml元素;
<font-paths>
---------------
---------------
---------------
<path path="/var/font/truetype" />
</font-paths>
Run Code Online (Sandbox Code Playgroud)
还请注意,块元素,可以指定字体仅适用于字符在一定范围内,从而允许不同的文字字体的动态切换为多语言/多符号文本(有用:
<block name="Thai" start="e00" end="e7f" index="27" font-family="Font-Family"/>
Run Code Online (Sandbox Code Playgroud)在Birt中配置字体编码:
此外,在fontConfig.xml中,内font-encodings件,确保您的字体有一个适当的字符编码,涵盖你的角色.例如,选择以下选项之一:
<font-encodings>
<encoding font-family="STSong-Light" encoding="UniGB-UCS2-H" />
<encoding font-family="STSongStd-Light" encoding="UniGB-UCS2-H" />
<encoding font-family="MHei-Medium" encoding="UniCNS-UCS2-H" />
<encoding font-family="MSung-Light" encoding="UniCNS-UCS2-H" />
<encoding font-family="MSungStd-Light" encoding="UniCNS-UCS2-H" />
</font-encodings>
Run Code Online (Sandbox Code Playgroud)
注意:包含的任何True Type字体都将嵌入PDF中,从而显着影响其大小,同时也确保所有客户端都能正确读取文档.
这些是Adobe编码,覆盖了大部分/全部更广泛的GB10380字符集,而不是旧的GB2312集(或EUC-CN),这对您来说太窄了.上面的例子来自BIRT论坛,但是一个小小的警告,Adobe已经弃用了UCS2 - 你可以用"UTF16"替换字符串中的"UCS2".
使用Adobe编码的原因:Adobe被认为是跨平台编码广泛CJK字符的标准.历史上很少有系统直接支持GB10380字符集. 此外,许多打印机都支持Adobe编码和字体 - 这是一个重要因素. 默认的Linux字符集/编码可能不支持您的需求,但您可以尝试参考可用的Linux编码:
可用字符集(编码): locale -c 或 charsets
(或Gnome版本的字符映射程序)
可用的Linux语言环境: locale -a
localelocale charset