PrintPreviewDialog показывает только 1 страницу с меньшим количеством элементов, чем при печати - PullRequest
0 голосов
/ 02 сентября 2018

Я хочу просмотреть 100 пунктов в PrintPreviewDialog. Для этого я собрал String, используя Stringbuilder, а затем установил размер шрифта и запустил PrintPreviewDialog. При этом программа работает нормально, но не все 100 элементов отображаются в PrintPreviewDialog, она показывает только 32 элемента и 1 страницу. Пожалуйста, скажите мне, как показать все элементы на 1 странице или на нескольких страницах.

    for (int i = 0; i < 100; i++)
    {
        Item item = new Item()
        {
            Code = i.ToString(),
            Name = "name",
            UnitPrice = "10",
            Quantity = "2",
            SubTotal = "1"
        };
        list.Add(item);
    }

    const int FIRST_COL_PAD = 20;
    const int SECOND_COL_PAD = 7;
    const int THIRD_COL_PAD = 20;

    var sb = new StringBuilder();
    sb.AppendLine("Start of receipt");
    sb.AppendLine("================");

    foreach (var item in list)
    {
        sb.Append(item.Code.PadRight(FIRST_COL_PAD));

        var breakDown = int.Parse(item.UnitPrice) > 0 ? item.UnitPrice + "x" + 2 : string.Empty;
        sb.Append(breakDown.PadRight(SECOND_COL_PAD));

        sb.AppendLine(string.Format("{0:0.00} A", item.SubTotal).PadLeft(THIRD_COL_PAD));
    }

    sb.AppendLine("================");
    printText = new PrintText(sb.ToString(), new Font("Monospace Please...", 20));

    System.Windows.Forms.PrintDialog pd = new System.Windows.Forms.PrintDialog();
    pdoc = new PrintDocument();
    PrinterSettings ps = new PrinterSettings();
pd.Document = pdoc;
 pdoc.PrintPage += new PrintPageEventHandler(pdoc_PrintPage);

            DialogResult result = pd.ShowDialog();
            if (result == DialogResult.OK)
            {
                PrintPreviewDialog pp = new PrintPreviewDialog();
                pp.Document = pdoc;
                result = pp.ShowDialog();
                if (result == DialogResult.OK)
                {
                    pdoc.Print();
                }
            }

Событие:

 void pdoc_PrintPage(object sender, PrintPageEventArgs e)
        {
            Graphics graphics = e.Graphics;
            var layoutArea = new SizeF(widht, 0);
            SizeF stringSize = graphics.MeasureString(printText.Text, printText.Font, layoutArea, printText.StringFormat);

            RectangleF rectf = new RectangleF(new PointF(), new SizeF(widht, stringSize.Height));
            graphics.DrawString(printText.Text, printText.Font, System.Drawing.Brushes.Black, rectf, printText.StringFormat);
}

Выход: enter image description here

1 Ответ

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