ABCPDF - рассчитать место, необходимое для текста, прежде чем рисовать его на странице PDF

Я надеюсь определить, поместится ли фрагмент текста внизу страницы, прежде чем я нарисую его на странице и проверю его положение по оси y.

Кто-нибудь знает, возможно ли это с ABCPDF?


person BennySparra    schedule 04.11.2011    source источник


Ответы (4)


Насколько я помню, когда я работал с PDF (например... 6-7 лет назад с ABCPDF), мы использовали выделенное время с методами Graphics.MeasureString.
Вы можете взглянуть на это на MSDN

person cyberzed    schedule 04.11.2011

По моему опыту, лучший способ справиться с этим — не беспокоиться о том, подойдет ли он, пытаясь измерить.

  1. Установите прямоугольник, в который вы пишете, так, чтобы он охватывал весь путь от вашего текущего положения до нижней части окна мультимедиа.
  2. Напишите текст в прямоугольнике, а затем проверьте, не обрезался ли текст. Если он был усечен, то удалите объект, который вы только что написали. Если нет, то все в порядке, и вы можете найти объем написанного вами текста.
  3. Если он не подходит, перейдите на следующую страницу или создайте ее, установите прямоугольник на всю страницу и повторите попытку ввода текста.
  4. Если это усекается, то у вас проблемы, потому что ваш текст никогда не поместится на одной странице без уменьшения размера шрифта, межстрочного интервала или чего-то еще.

Это не является непреодолимым, потому что вы можете связывать текст на страницах, но это другой вопрос.

person Mike Edgar    schedule 01.12.2011

Если Graphics.Measurestring не работает для вас, другой вариант — буквально измерить размер определенных шрифтов, чтобы вы знали, сколько букв помещается в строку, а затем могли определить, сколько строк у вас будет в данном прямоугольнике, и размер прямоугольник соответственно, используя что-то вроде yVal = lineCount * 5.

Если я правильно помню, по какой-то причине я не мог использовать функцию измерения строки, поэтому мне пришлось сделать это неудобным способом, но в моей ситуации, когда у меня было несколько ящиков разного размера, это сработало очень хорошо.

person CSharpened    schedule 23.11.2011

Да, ABCPDF сообщит вам эту информацию: yourPdfDocInstance.AddHtml() вернет 0 (и не добавит никакого текста), если текст не может быть добавлен в текущий прямоугольник.

person Steve    schedule 16.12.2011