Ваш код смешивает уровни API.
Когда вы вызываете PdfContentByte
методы напрямую, вы работаете на самом низком уровне API, записывая инструкции непосредственно в поток содержимого страницы.
Где вы звоните ColumnText.ShowTextAligned
, с другой стороны, вы на среднем уровне API. На этом уровне классы iText (например, ColumnText
) сами создают все необходимые инструкции в основном потоке контента страницы; фактически ваши прямые письменные инструкции мешают выполнению инструкций, написанных ColumnText
, и приводят к неверным последовательностям инструкций.
Вы действительно должны оставаться на одном уровне API за раз, пока не будете точно знать, что делаете. Я предлагаю вам использовать средний уровень, а не низкий уровень.
В этом случае вы объединяете BaseFont
, размер шрифта и цвет текста в объект Font
, добавляете этот шрифт к объекту Phrase
, а затем позволяете iText выполнять всю работу:
var bf = BaseFont.CreateFont(BaseFont.HELVETICA_BOLD, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
Font font = new Font(bf, 15, Font.NORMAL, BaseColor.RED);
ColumnText.ShowTextAligned(pdfContentByte, Element.ALIGN_LEFT, new Phrase(ProjNr, font), 60, 130, 0);