我正在尝试在BIRT的PDF报告上打印针叶樱桃提取物。相反它显示了针桃提取物,所以在PDF中缺少叶樱。这是一个字体问题,类似于this person's problem.但是,我们已经使用了sans-serif字体。那个人的解决方案在字体上有些不同。
有没有人知道在这种情况下在Linux上下文中使用的正确字体?
答案 0 :(得分:7)
<强>问题强>
此字体问题不是由于serif / sans serif字体本身,而是由于字体未覆盖文本中的字符。未渲染的字符指的是'cherryblossom的叶子',是汉字(CJK unified ideographs)的一部分:
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)
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
在Microsoft上,Arial掩盖了将字体与文本匹配的需要,因为Arial Unicode MS字体实际上是Arial字体以外的大型扩展 - 它包括大多数Microsoft代码页,包括this one,其中包含这两个字符。
现代Linux安装应该有支持字体。如果你没有,那么肯定没有中文功能。使用Ubuntu admin language support features解决此问题的示例。键入以下内容以发现匹配的字体:
xlsfonts | grep gb
xlsfonts | grep big5
xlsfonts | grep han
xlsfonts | grep ming
xlsfonts | grep song
xlsfonts | grep kai
下载适用于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 on wikipedia的字体。
在Linux上,以下字体支持这两个字符:
GNU Unifont
明字体
WenQuanYi Bitmap Song(文泉驿点阵宋体)wqy-bitmapfont
Sans Serif
文泉驿微米黑wqy-microhei
常规字体
请参阅https://wiki.archlinux.org/index.php/Fonts#.28Mainly.29_Chinese
如果您自己下载,则需要管理员权限才能将字体复制到相应的linux目录(如/etc/fonts/fonts.conf
中所定义,例如/var/font/truetype, /usr/share/fonts, /usr/local/share/fonts,
和/home/<username>/.fonts
)。 Directions here以及here。
缺点:您需要手动将这些字体分发给客户端。非Linux客户端存在不兼容的风险。
在Birt中配置字体路径
在此步骤和下一步中更改fontsConfig.xml后,需要重新启动BIRT才能使更改生效。
设置font-paths
元素fontsConfig.xml;
<font-paths>
---------------
---------------
---------------
<path path="/var/font/truetype" />
</font-paths>
另请注意,块元素允许您指定字体仅适用于特定范围内的字符,允许动态切换不同文本的字体(对于多语言/多符号文本非常有用:
<block name="Thai" start="e00" end="e7f" index="27" font-family="Font-Family"/>
在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>
注意:包含的任何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
locale
locale charset
答案 1 :(得分:0)
在debian上我安装了一大堆中文和其他亚洲字体,以确保不会再发生这种情况,因为我会生成数千种各种字符集的PDF格式。
这些是我安装的字体:
ttf-arphic-bkai00mp ttf-arphic-bsmi00lp ttf-arphic-gbsn00lp ttf-arphic-gbsn00lp ttf-arphic-gkai00mp ttf-arphic-ukai ttf-arphic-uming ttf-kochi-gothic ttf-kochi-mincho ttf- BAEKMUK
我建议你逐个安装/卸载它们,看看你需要哪一个。关于一篇非常好的Debian文章的参考:all Chinese fonts in Debian