为iTextSharp增加CID-keyed 字体(简称CIDFont)支持,让你在没有中文(CJK)TrueType字体(.TTF,.TTC)环境下一样完美显示中文(CJK)
2005-09-24 10:16
801 查看
CID-keyed 字体(简称CIDFont)。这种字体是Adobe公司为大字符集语言设计的,其中包含了一象形文字,由字符ID(CID)进行索引。
为使这种文字有意义,Adobe提供了一套CMap文件,从CIDFont文件中产生的PS字体名词由CIDFont和CMap共同组成,中间用两个短横线相连,举例来说,由CIDFont`Munhwa-Regular'生成,使用CMap`UniKS-UCS2-H'的字体就叫做:
Munhwa-Regular--UniKS-UCS2-H
Java版本的iText为了实现对CJK字体的支持需要以下两个Jar包:
http://prdownloads.sourceforge.net/itextpdf/iTextAsian.jar
http://prdownloads.sourceforge.net/itextpdf/iTextAsianCmaps.jar
可是iTextSharp如何利用这两个包的资源呢?
比如,我们如何成功执行下面这条语句:
BaseFont bf = BaseFont.CreateFont("STSong-Light","UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);
经过分析iTextSharp的源代码,可以发现,如果要在iTextSharp中使用CIDFont(上面两个包中的资源),需要做如下工作(具体查看CJKFont.cs的"internal CJKFont(string fontName, string enc, bool emb)"方法):
1.LoadProperties,先将加载cjkfonts.properties,cjkencodings.properties属性
private static void LoadProperties()
不知道大家有没有注意,上面三个方法(函数)都是从Embeded Resource(嵌入资源)里加载的,而iTextSharp的资源文件里并没有上面两个Jar包中的资源(只有一些AFM的字体资源),那我们接下来要做的事情就是把CIDFont和CMAP文件嵌入到iTextSharp,但是该放在那个目录呢,自然是RESOURCE_PATH常量所指的地方了,看下RESOURCE_PATH的定义(在BaseFont.cs):
/** The path to the font resources. */
public const string RESOURCE_PATH = "iTextSharp.text.pdf.fonts.";
下面该怎么做,也许不用我说了吧(稍微提醒下,这些文件需以资源嵌入的方式加入iTextSharp?
下面附上简单的利用代码:
1using System;
2using iTextSharp.text;
3using iTextSharp.text.pdf;
4using System.IO;
5
6namespace cjk
7
为使这种文字有意义,Adobe提供了一套CMap文件,从CIDFont文件中产生的PS字体名词由CIDFont和CMap共同组成,中间用两个短横线相连,举例来说,由CIDFont`Munhwa-Regular'生成,使用CMap`UniKS-UCS2-H'的字体就叫做:
Munhwa-Regular--UniKS-UCS2-H
Java版本的iText为了实现对CJK字体的支持需要以下两个Jar包:
http://prdownloads.sourceforge.net/itextpdf/iTextAsian.jar
http://prdownloads.sourceforge.net/itextpdf/iTextAsianCmaps.jar
可是iTextSharp如何利用这两个包的资源呢?
比如,我们如何成功执行下面这条语句:
BaseFont bf = BaseFont.CreateFont("STSong-Light","UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);
经过分析iTextSharp的源代码,可以发现,如果要在iTextSharp中使用CIDFont(上面两个包中的资源),需要做如下工作(具体查看CJKFont.cs的"internal CJKFont(string fontName, string enc, bool emb)"方法):
1.LoadProperties,先将加载cjkfonts.properties,cjkencodings.properties属性
private static void LoadProperties()
不知道大家有没有注意,上面三个方法(函数)都是从Embeded Resource(嵌入资源)里加载的,而iTextSharp的资源文件里并没有上面两个Jar包中的资源(只有一些AFM的字体资源),那我们接下来要做的事情就是把CIDFont和CMAP文件嵌入到iTextSharp,但是该放在那个目录呢,自然是RESOURCE_PATH常量所指的地方了,看下RESOURCE_PATH的定义(在BaseFont.cs):
/** The path to the font resources. */
public const string RESOURCE_PATH = "iTextSharp.text.pdf.fonts.";
下面该怎么做,也许不用我说了吧(稍微提醒下,这些文件需以资源嵌入的方式加入iTextSharp?
下面附上简单的利用代码:
1using System;
2using iTextSharp.text;
3using iTextSharp.text.pdf;
4using System.IO;
5
6namespace cjk
7
相关文章推荐
- Netbeans7.2完美中文+Consolas字体显示配置笔记
- ubuntu下qt4.8.6运行ui界面不显示中文,原因是qtconfig默认的字体不支持中文
- 【已解决】基于Eclipse的Android开发环境ADT中,中文显示字体很小,很难看
- 解决基于Eclipse的Android开发环境ADT中文显示字体太小
- 桌面支持--不能显示中文字体,系统已调成中文 而且不能打字
- FreeType(字体渲染引擎):支持多种字体格式(TTF,TTC等)
- 基于Eclipse的Android开发环境ADT中,中文显示字体很小,很难看
- ITEXT-PDF彩色字体显示-支持中文
- 基于Eclipse的Android开发环境ADT中,中文显示字体很小,很难看
- 让OGRE支持中文TTF字体
- 基于Eclipse的Android开发环境ADT中,中文显示字体很小,很难看
- 让OGRE支持中文TTF字体
- Ubuntu下安装latex (支持中文CJK环境)
- 让OGRE支持中文(二) ----支持TTF字体了
- 让Courier New字体完美显示中文
- 嵌入式Qt方案中文显示系列:Qte中的字体支持和使
- ubuntu英文环境下中文字体显示很难看的解决方案(基于ubuntu12.04)
- Netbeans7.0完美中文+Consolas字体显示配置(亲测可用)
- Qt4.7支持中文显示及制作QT支持的字体文件
- QT中文字体显示以及字体大小不能改变的问题