在iTextSharp中重用字体对象

时间:2011-05-04 01:41:52

标签: c# fonts itextsharp

我无法尝试定义一个可以在整个课程中重复使用的iTextSharp Font对象。

我的第一次尝试是在2个创建PdfPCell对象的私有方法中使用FontFactory.GetFont方法:

FontFactory.GetFont("helvetica", 8)

问题在于只有一种方法正确打印字体,另一种方法不会打印单元格的内部文本。

接下来,我尝试在表示字体的类中创建一个静态字段:

private static Font _standardCellFont;

public static PdfPCell CreateTableHeaderCell(string cellText, int colspan = 1)
    {
        var innerCellText = new Phrase(cellText, PdfSupport._standardCellFont);
        innerCellText.Font.Color = BaseColor.WHITE;

        return new PdfPCell(innerCellText)
                       {
                           Colspan = colspan,
                           PaddingLeft = 5,
                           PaddingRight = 5,
                           FixedHeight = 10,
                           BackgroundColor = BaseColor.BLACK,
                           VerticalAlignment = Element.ALIGN_CENTER
                       };
    }

public static PdfPCell CreateTableCell(string cellText, int colspan = 1, int rowspan = 1, bool bold = false, float minHeight = 0)
    {
        var cellInnerText = 
            bold ? 
            new Phrase(cellText, FontFactory.GetFont("helvetica", 8, Font.BOLD)) :
            new Phrase(cellText, PdfSupport._standardCellFont);

        return new PdfPCell(cellInnerText)
                   {
                       Border = Rectangle.NO_BORDER,
                       Colspan = colspan,
                       Rowspan = rowspan,
                       PaddingTop = 1,
                       PaddingBottom = 1,
                       PaddingLeft = 5,
                       PaddingRight = 5,
                       MinimumHeight = minHeight,
                       VerticalAlignment = Element.ALIGN_CENTER
                   };
    }

结果是这两种方法都不打印单元格文本。

我不认为我真的理解在创建字体对象时发生了什么,我的目标是能够定义一些常用字体和基本属性(大小,粗体),然后我可以在整个我重复使用class,但是根据我的用法,似乎不能以这种方式持久保存字体对象。

1 个答案:

答案 0 :(得分:0)

有点奇怪。他们可以,也应该分享。您尝试在WInAnsiEncoding中绘制的字符(主要是Unicode的前256个字符)。

啊!我怀疑你可能遇到了一个ALIGNMENT问题。

VerticalAlignment的有效设置:

Element.ALIGN_TOP
Element.ALIGN_MIDDLE
Element.ALIGN_BOTTOM

Element.ALIGN_CENTER严格用于水平对齐。我不确定这会让你的文字消失,但它肯定值得研究。

PS:我相信您甚至可以在文档中重复使用Font和BaseFont对象,但我自己没有尝试过。