Cамоучитель по VB.NET

       

Многостраничный вывод



Процесс многостраничной печати основан на небольшой хитрости: если процедура обработки события Pri ntPage задает свойству HasMorePages объекта Pri ntPageEventArgs значение True, то объект PrintDocument узнает о наличии дополнительных страниц для печати и автоматически инициирует заново событие PagePri n't.

Проблемы, возникающие при многостраничной печати, имеют мало общего с самой печатью. Они присущи любому сложному выводу на графической поверхности: программа должна помнить обо всем. Предположим, вы хотите написать небольшую программу для вывода содержимого текстового поля или текстового файла. В псевдокоде все выглядит просто.

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

Однако проверка возможности размещения новой строки на странице не имеет ничего общего с печатью; в ней используются различные метрики, вычисляемые на основании ширины и высоты текстовой строки. В свою очередь, эти параметры зависят от семейства и размера используемого шрифта. К счастью, вы можете положиться на такие методы, как MeasureStri ng; эти методы используют метрики, связанные с текущим контекстом устройства.



Содержание раздела