在iTextSharp中重用字体对象

本文关键字:字体 对象 iTextSharp | 更新日期: 2023-09-27 17:54:27

我在尝试定义一个iTextSharp Font对象时遇到了麻烦,我可以在整个类中重用。

我的第一个尝试是使用FontFactory。在创建PdfPCell对象的两个私有方法中使用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
                   };
    }

这样做的结果是两个方法都不打印单元格文本。

我不认为我真的明白发生了什么,当我创建一个字体对象,我的目标是能够定义一些常见的字体和基本属性(大小,粗体),然后我可以在整个类中重用,然而,从我的使用看来,字体对象不能以这种方式持久

在iTextSharp中重用字体对象

真奇怪。它们可以,也应该被分享。你试图在WInAnsiEncoding中绘制所有字符(主要是Unicode的前256个字符)。

啊!我怀疑你可能遇到了对齐问题。

垂直对齐的有效设置:

Element.ALIGN_TOP
Element.ALIGN_MIDDLE
Element.ALIGN_BOTTOM

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

PS:我相信你甚至可以在文档中重用Font和BaseFont对象,尽管我自己还没有尝试过。