Печать на принтере - PullRequest
       2

Печать на принтере

0 голосов
/ 20 ноября 2018

Я использую этот код для печати набора строк из расширенного текстового поля:

private void printBtn_Click(object sender, EventArgs e)
    {
        PrintDocument p = new PrintDocument();
        p.OriginAtMargins = true;
        Margins pMargins = new Margins(100, 100, 100, 100);
        p.DefaultPageSettings.Margins = pMargins;

        p.PrintPage += delegate (object sender1, PrintPageEventArgs e1)
        {
            e1.Graphics.DrawString(summaryBox.Text, new Font("Times New Roman", 12), new SolidBrush(Color.Black), new RectangleF(0, 0, p.DefaultPageSettings.PrintableArea.Width, p.DefaultPageSettings.PrintableArea.Height));
        };
        try
        {
            p.Print();
            this.Close();
        }
        catch (Exception ex)
        {
            throw new Exception("Error During Printing", ex);
        }
    }

Однако длинные строки обрезаются и не выполняются автоматически.Строки обрезаются вправо, и после заполнения первой страницы вторая страница не печатается, а оставшееся содержимое просто игнорируется.Проблемы с настройкой принтера или с расширенным текстовым полем или с обоими?Как я могу убедиться, что длинные строки переносятся и печатаются вторые или третьи страницы, если содержимое слишком длинное?

1 Ответ

0 голосов
/ 20 ноября 2018

Вам нужно использовать PrintPageEventArgs.MarginBounds , чтобы получить область печати на странице печати. ​​

Теперь ваш e1 является параметром типа PrintPageEventArgs.и вы получите MarginBounds как e1.MarginBounds.

Таким образом, ваш код будет.

p.PrintPage += delegate (object sender1, PrintPageEventArgs e1)
{
    e1.Graphics.DrawString(summaryBox.Text, new Font("Times New Roman", 12), new SolidBrush(Color.Black), new RectangleF(0, 0, e1.MarginBounds.Width, e1.MarginBounds.Height));
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...