在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
};
}
这样做的结果是两个方法都不打印单元格文本。
我不认为我真的明白发生了什么,当我创建一个字体对象,我的目标是能够定义一些常见的字体和基本属性(大小,粗体),然后我可以在整个类中重用,然而,从我的使用看来,字体对象不能以这种方式持久
真奇怪。它们可以,也应该被分享。你试图在WInAnsiEncoding中绘制所有字符(主要是Unicode的前256个字符)。
啊!我怀疑你可能遇到了对齐问题。
垂直对齐的有效设置:
Element.ALIGN_TOP
Element.ALIGN_MIDDLE
Element.ALIGN_BOTTOM
Element.ALIGN_CENTER
严格用于水平对齐。我不确定这会不会让你的文本消失,但这确实值得研究。
PS:我相信你甚至可以在文档中重用Font和BaseFont对象,尽管我自己还没有尝试过。