我将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中嵌入字体,以便显示中文字符。
答案 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;