Мне обычно нравится иметь код, который вы можете просто набрать, но, к сожалению, ваш код слишком специфичен для домена, чтобы дать прямой ответ (много Me.*
, о которых мы должны догадаться), но я все еще могу Вы получите небольшой рефакторинг кода.
Чтобы сделать то, что вы хотите, вы должны измерить строку, которую вы рисуете, а затем нарисовать прямоугольник с этими размерами. В спецификации PDF нет понятия «цвет фона» для текста, и любая реализация, которая делает его похожим, просто рисует прямоугольники для вас. (Да, вы можете выделить текст, но это аннотация, которая отличается.)
Итак, сначала я собираюсь вывести вещи в переменные, чтобы мы могли использовать их повторно и упростить их настройку:
''//Text to measure and draw
Dim myText As String = UCase(String.Format("CONTROLLED DOCUMENT – THIS COPY IS THE LATEST REVISION AS OF {0}", Date.Now.ToString("ddMMMyyyy")))
''//Font size to measure and draw with
Dim TextFontSize As Integer = 8
''//Original X,Y positions that we were drawing the text at
Dim TextX As Single = 10
Dim TextY As Single = rect.Height - 15
Далее нам нужно вычислить ширину и высоту. Первое легко, но второе требует, чтобы мы сначала получили текст «Восхождение и спуск», а затем вычислили разницу.
''//Calculate the width
Dim TextWidth As Single = watermarkFont.GetWidthPoint(myText, TextFontSize)
''//Calculate the ascent and decent
Dim TextAscent As Single = watermarkFont.GetAscentPoint(myText, TextFontSize)
Dim TextDescent As Single = watermarkFont.GetDescentPoint(myText, TextFontSize)
''//The height is the difference between the two
Dim TextHeight As Single = TextAscent - TextDescent
(ПРИМЕЧАНИЕ. Я не уверен, что GetWidthPoint()
, GetAscentPoint()
и GetDescentPoint()
работают с многострочным текстом как требуется.)
Тогда вы, вероятно, захотите добавить отступ между полем и текстом:
''//Amount of padding around the text when drawing the box
Dim TextPadding As Single = 2
Наконец, где-то перед настройкой и рисованием текста вы хотите сначала нарисовать прямоугольник:
''//Set a background color
.SetColorFill(BaseColor.YELLOW)
''//Create a rectangle
.Rectangle(TextX - TextPadding, TextY - TextPadding, TextWidth + (TextPadding * 2), TextHeight + (TextPadding * 2))
''//Fill it
.Fill()