xslt fo不显示中文或泰文字体

时间:2016-02-05 11:56:14

标签: c# xml xslt xslt-1.0 xsl-fo

我将XSLT转换为带有中文字符的PDF。我正在使用Fonet.dll和csharp。 我在控制小组的区域语言中添加了中文,即ZH和ZHT。

我按照代码示例生成pdf

XSLT如下

<?xml version="1.0" encoding="gb2312"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:fo="http://www.w3.org/1999/XSL/Format"  >
  <xsl:template match="/" >

    <fo:root xml:lang="en"
        xmlns:fo="http://www.w3.org/1999/XSL/Format" >
      <fo:layout-master-set>
        <fo:simple-page-master page-height="350mm"
                               page-width="271mm"
                               master-name="PageMaster">
          <fo:region-body />
        </fo:simple-page-master>
      </fo:layout-master-set>
      <fo:page-sequence master-reference="PageMaster">
        <fo:flow flow-name="xsl-region-body" >

          <fo:block  font-family="MingLiU">
             hello-  您好
          </fo:block>
          <fo:block font-family="MS Mincho"
            >カニ入りスープなしの麺をください。</fo:block>
        </fo:flow>
      </fo:page-sequence>
    </fo:root> 
  </xsl:template>
</xsl:stylesheet>

中文字符根本没有出现 我都将编码设置为encoding =“gb2312”,但它没有任何区别。

我是否可以在XSLT中嵌入字体,以便显示中文字符。

2 个答案:

答案 0 :(得分:0)

可能你的输出没有使用正确的编码。 您可以使用

设置输出编码
<xsl:output encoding="gb2312" />

答案 1 :(得分:0)

这可能是字体配置的问题,而不是字符编码。

如果您要使用的字体得到有效支持(网站声明FO.NET“支持TrueType和TrueType风格的OpenType字体”),您必须告诉格式化程序它们在哪里(如果格式化程序不自动查找对于它们在默认系统字体文件夹中)以及如何使用它们:引用它们,将整个字体嵌入PDF中,或者只嵌入所需的子集。

我没有使用FO.NET的直接经验,但根据这个documentation page about fonts你需要在你的代码中使用这样的东西(你可能想要嵌入/子集中文字体):

FonetDriver driver = FonetDriver.Make();
driver.Renderer = RendererEngine.PDF;

// Font embedding/linking is set via PdfRendererOptions class
PdfRendererOptions options = new PdfRendererOptions();

// Use FontType enumeration to specify either Link, Embed or Subset
//options.FontType = FontType.Link;
options.FontType = FontType.Embed;
//options.FontType = FontType.Subset;

driver.Options = options;