#c# #fonts #itextsharp
#c# #шрифты #itext
Вопрос:
У меня возникли проблемы при попытке определить объект шрифта iTextSharp, который я мог бы повторно использовать во всем классе.
Моей первой попыткой было использовать FontFactory.Метод GetFont в 2 частных методах, которые создают объекты PdfPCell:
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
};
}
Результатом этого является то, что ни один из методов не печатает текст ячейки.
Я не думаю, что я действительно понимаю, что происходит, когда я создаю объект font, моя цель — иметь возможность определить несколько распространенных шрифтов и базовых свойств (размер, жирный шрифт), которые я затем могу повторно использовать во всем моем классе, однако из моего использования видно, что объект font не может быть сохранен таким образом.
Ответ №1:
Как странно. Они могут и ДОЛЖНЫ быть общими. Все ли символы, которые вы пытаетесь нарисовать, в WinAnsiEncoding (в основном, первые 256 символов Unicode).
Ах! Я подозреваю, что вы можете столкнуться с проблемой выравнивания.
Допустимые настройки для выравнивания по вертикали:
Element.ALIGN_TOP
Element.ALIGN_MIDDLE
Element.ALIGN_BOTTOM
Element.ALIGN_CENTER
используется строго для выравнивания по горизонтали. Я не уверен, что из-за этого ваш текст исчезнет, но на это, безусловно, стоит обратить внимание.
PS: Я полагаю, вы даже можете повторно использовать объекты Font и BaseFont в документах, хотя я сам этого не пробовал.