Печать в полном масштабе на C#

В этом примере показано, как вы можете печатать в полном масштабе, поэтому объекты, нарисованные на экране, имеют одинаковый размер при печати. Обратите внимание, что ваш экран и принтер, вероятно, не откалиброваны точно, так что результат не будет идеально соответствовать. Однако это должно быть довольно близко.

Пример Рисование и перемещение сегментов линии в C# показывает, как вы можете рисовать и перемещать строки на экране. Этот пример аналогичен, но он добавляет меню «Файл» с командами «Предварительный просмотр и печать».

Этот пример управляет его сегментами строк в том же виде, что и предыдущий пример. Однако это делает одно изменение кода чертежа. Вместо того, чтобы обработчик события Paint рисовал линии напрямую, эта версия перемещает код чертежа в новый метод DrawLines> Следующий код показывает идею.

// Нарисуем линии.
private void picCanvas_Paint(object sender, PaintEventArgs e)
{
    DrawLines(e.Graphics);
}

// Нарисуем линии.
private void DrawLines(Graphics gr)
{
    ...
}

Теперь программа может использовать один и тот же метод рисования для обеспечения предварительного просмотра или печати.

На самом деле интересной частью программы является следующий обработчик событий PrintPage, который генерирует команды печати для предварительного просмотра или распечатки.

// Печать строк.
private void pdocLines_PrintPage(object sender, PrintPageEventArgs e)
{
    // Получить разрешение экрана.
    float dpix, dpiy;
    using (Graphics gr = this.CreateGraphics())
    {
        dpix = gr.DpiX;
        dpiy = gr.DpiY;
    }

    // Сделать масштаб страницы на принтере
    // разрешение до сотых дюйма.
    e.Graphics.ScaleTransform(100f / dpix, 100f / dpiy);

    // Нарисуем линии на странице.
    DrawLines(e.Graphics);

    // Были сделаны.
    e.HasMorePages = false;
}

Обычно координаты экрана измеряются в пикселях, а координаты принтера измеряются в сотых долях дюйма. Для печати в правильном масштабе программа должна преобразовать из координаты экрана в координаты принтера.

Для этого сначала создается новый объект Graphics на экране. Поскольку for (this) находится на экране, его метод CreateGraphics возвращает объект, представляющий экран. Затем код использует свойства этого объекта DpiX и DpiY, чтобы получить количество точек (пикселей) на дюйм на экране. (Обычно это 96 точек на дюйм.)

Далее код дает печать Graphics объекту масштабного преобразования для преобразования от точек на экране до сотых долей дюйма. Например, масштабный коэффициент в направлении X делит на dpix для преобразования из точек (пикселей) в дюймы. Затем умножая на 100 преобразований от дюймов до сотых дюймов.

После того, как он устанавливает масштабное преобразование объекта Graphics, код просто вызывает DrawLines, как и раньше, и распечатка рисуется в масштабе, соответствующем экрану.

Обратите внимание, что преобразование шкалы также относится к толщине линии. В примере используются ручки, такие как Pens.Blue и Pens.Black для рисования его строк. Ручки запаса имеют толщину 1, поэтому, когда они печатаются, линии имеют толщину приблизительно 1/96 дюйма дюйма.

Источник: http://csharphelper.com/blog/2015/10/print-at-full-scale-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector