ABCPDF - вычислить пространство, необходимое для текста, перед его рисованием на странице PDF - PullRequest
3 голосов
/ 04 ноября 2011

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

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

Ответы [ 4 ]

2 голосов
/ 01 декабря 2011

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

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

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

2 голосов
/ 05 ноября 2011

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

0 голосов
/ 16 декабря 2011

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

0 голосов
/ 23 ноября 2011

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

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

...