使用System.Drawing.Font对象作为Itextsharp Basefont

时间:2013-12-11 07:43:06

标签: c# fonts drawing itextsharp

我正在尝试使用ITEXTSHARP将文本写入PDF。 目前我使用Basefont,但字体数量有限。有什么方法可以使用Normal System.Drawing.Fonts和Itextsharp?

var font = BaseFont.CreateFont(BaseFont.TIMES_BOLD, BaseFont.WINANSI, BaseFont.EMBEDDED);
var overContent = stamper.GetOverContent(index);
overContent.SetFontAndSize(font, fontSize);

1 个答案:

答案 0 :(得分:3)

首先需要使用FontFactory注册字体,以获取任何System.Drawing.Font的基本字体。这样的东西就足够了:

    string fontsFolder = string.Format(CultureInfo.InvariantCulture, "{0}\\Fonts", Environment.GetEnvironmentVariable("SystemRoot"));
    FontFactory.RegisterDirectory(fontsFolder);
    BaseFont myBaseFont = FontFactory.GetFont(mySysDrawFont.OriginalFontName, mySysDrawFont.Size, ConvertFontStyle(mySysDrawFont.Style)).BaseFont;

    private static int ConvertFontStyle(FontStyle fontStyle)
    {
        switch (fontStyle)
        {
            case FontStyle.Regular:
                return Font.NORMAL;

            case FontStyle.Bold:
                return Font.BOLD;

            case FontStyle.Italic:
                return Font.ITALIC;

            case FontStyle.Underline:
                return Font.UNDERLINE;

            case FontStyle.Strikeout:
                return Font.STRIKETHRU;

            default:
                return Font.UNDEFINED;
        }
    }

请记住,您应该只调用 RegisterDirectory 函数一次,而不是每次都这样,所以上面的方法只是一个例子。