xslt fo 不显示中文或泰文字体
xslt fo does not show chinese or thai fonts
我正在将 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 中嵌入字体,以便显示汉字。
可能您的输出没有使用正确的编码。
您可以使用
设置输出编码
<xsl:output encoding="gb2312" />
这可能是字体配置的问题,而不是字符编码的问题。
前提是你要使用的字体是有效支持的(网站上写着FO.NET "supports TrueType and TrueType flavoured OpenType fonts"),你得告诉格式化器它们在哪里(如果格式化器没有自动查找对于它们在默认系统字体文件夹中)以及如何使用它们:要么引用它们,将整个字体嵌入 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;
我正在将 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 中嵌入字体,以便显示汉字。
可能您的输出没有使用正确的编码。 您可以使用
设置输出编码<xsl:output encoding="gb2312" />
这可能是字体配置的问题,而不是字符编码的问题。
前提是你要使用的字体是有效支持的(网站上写着FO.NET "supports TrueType and TrueType flavoured OpenType fonts"),你得告诉格式化器它们在哪里(如果格式化器没有自动查找对于它们在默认系统字体文件夹中)以及如何使用它们:要么引用它们,将整个字体嵌入 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;