Как я могу напечатать на следующей странице переполненную строку? - PullRequest
0 голосов
/ 11 мая 2018

Я пытаюсь напечатать длинный список. Сначала я измерил строку, и благодаря этому я предотвращаю переполнение с левой стороны страницы, но я не смог сделать это до конца страницы.Это не проходит на следующей странице.Как мне это сделать ?Коды:

    private void button27_Click(object sender, EventArgs e)
    {
        listele();
        printDialog1.Document = printDocument1;
        if (printDialog1.ShowDialog() == DialogResult.OK)
        {
            printDocument1.Print();
        }
    }

    private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
    {

        Font printFont = new Font("Arial", 10);
        Graphics gf = e.Graphics;
        SizeF sf = gf.MeasureString(textBox1.Text,printFont, 320);
        gf.DrawString(textBox1.Text, printFont, Brushes.Black,new RectangleF(new Point(60, 60), sf),StringFormat.GenericTypographic);

    }

Я добавил скриншот, чтобы лучше понять.Спасибо SS1

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

Использование Graphics для простой распечатки текста - не лучший вариант. Как вы поняли, будет много вещей, с которыми вам придется иметь дело. Выберите лучший инструмент для вашей работы. Для этого есть множество сторонних инструментов, но если вы предпочитаете использовать встроенные инструменты, попробуйте отчеты RLDC.

Из вашей панели инструментов поместите Report и ReportViewer в форму и сделайте их скрытыми. Кроме того, вы можете создавать их в коде, а не добавлять их в пользовательский интерфейс.

Далее, пройдите через строки в вашем TextBox (или, лучше, в источнике этих строк) и введите их в DataTable с одним столбцом. Затем присвойте DataTable свойству DataSource Report. Если источником линий в вашем TextBox является объект IEnumerable, такой как List<>, то вам не нужен вышеуказанный шаг, и вы можете назначить его непосредственно свойству DataSource Report.

Наконец, визуализируйте Report в ReportViewer и распечатайте его.

Вот пошаговое руководство по : печать локального отчета без предварительного просмотра .

0 голосов
/ 11 мая 2018

Событие PrintPage возникает для печати одной страницы . Вам нужно измерить ваш текст / макет страницы. Если вы измеряете и на этой странице больше, чем уместится, вам нужно установить для свойства PrintPageEventArgs.HasMorePages значение true, что вызовет событие PrintPage снова.

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

Вот ответ StackOverflow , который показывает, как работать с несколькими страницами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...