1

我正在尝试在 BIRT 的 PDF 报告上打印针叶提取物。相反,它显示的是针桃提取物,因此在 PDF 中缺少叶樱。这是一个字体问题,类似于这个人的问题。但是,我们已经在使用无衬线字体。那个人的解决方案是字体有些不同。

有谁知道在 Linux 上下文中用于这种事情的正确字体?

4

2 回答 2

7

问题

这个字体问题不是由于 serif / sans serif 字体本身,而是由于字体没有覆盖文本中的字符。未渲​​染的字符指的是“樱花叶”,是汉文(中日韩统一表意文字)的一部分:

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 代码页,包括这个包含这两个字符的代码页。

现代 Linux 安装应该有支持的字体。如果你的没有,那么肯定是没有安装中文功能的。使用Ubuntu 管理语言支持功能解决此问题的示例。键入以下内容以发现匹配的字体:

xlsfonts | grep gb
xlsfonts | grep big5
xlsfonts | grep han
xlsfonts | grep ming
xlsfonts | grep song
xlsfonts | grep kai
  1. 下载适用于 Linux 的中文/亚洲字体

  2. 在 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"/>
    
  3. 在 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 中,显着影响其大小,同时确保所有客户都能正确阅读文档。

    这些是 Adob​​e 编码,涵盖了大部分/所有更广泛的 GB10380 字符集,而不是较旧的 GB2312 集(或 EUC-CN),这对您来说太窄了。上面的例子来自 BIRT 论坛,但是一个关于 Adob​​e 已经弃用 UCS2 的小警告——你可以用“UTF16”替换字符串中的“UCS2”。

    使用 Adob​​e 编码的原因:Adobe 被认为是跨平台编码广泛 CJK 字符的标准。历史上很少有系统直接支持 GB10380 字符集。 此外,许多打印机都支持 Adob​​e 编码和字体——这是一个重要因素。 默认 Linux 字符集/编码可能不支持您的需求,但您可以尝试参考可用的 Linux 编码:

    • 可用的字符集(编码): locale -ccharsets (或 Gnome 版本的字符映射程序)

    • 可用的 Linux 语言环境: locale -a

    • 当前的 Linux 语言环境: locale
    • 当前默认字符集: locale charset
于 2013-07-15T08:00:52.427 回答
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 文章:Debian 中的所有中文字体

于 2013-07-17T14:51:55.613 回答