我无法尝试定义一个可以在整个课程中重复使用的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,但是根据我的用法,似乎不能以这种方式持久保存字体对象。
答案 0 :(得分:0)
啊!我怀疑你可能遇到了一个ALIGNMENT问题。
VerticalAlignment的有效设置:
Element.ALIGN_TOP
Element.ALIGN_MIDDLE
Element.ALIGN_BOTTOM
Element.ALIGN_CENTER
严格用于水平对齐。我不确定这会让你的文字消失,但它肯定值得研究。
PS:我相信您甚至可以在文档中重复使用Font和BaseFont对象,但我自己没有尝试过。