简体   繁体   English

使用PrintDocument打印到收据打印机不会打印所有内容

[英]Printing to receipt printer with PrintDocument does not print all content

I'm trying to print a receipt to printer with the following code. 我正在尝试使用以下代码将收据打印到打印机。 The problem is that the receipt is not completely printed. 问题是收据没有完全打印。 I think it is printing just one page but I don't how to set the page numbers prior to print. 我认为它只打印一页,但是在打印之前我不怎么设置页码。

public void print()
{
    pdoc = new PrintDocument();
    PaperSize psize = new PaperSize("Custom", 450, 820);
    pdoc.DefaultPageSettings.PaperSize = psize;
    pdoc.PrintPage += new PrintPageEventHandler(pdoc_PrintPage);
    pdoc.Print();
}

void pdoc_PrintPage(object sender, PrintPageEventArgs e)
{
    Graphics graphics = e.Graphics;
    Font font = new Font("Arial", 10);
    var brush = new SolidBrush(Color.Black);
    float fontHeight = font.GetHeight();
    int startX = 5;
    int startY = 35;
    int Offset = 40;
    graphics.DrawString("             DIGITAL STORE               ", font, brush, startX, startY + Offset);
    Offset = Offset + 20;
    graphics.DrawString("           ITEMS TO DELIVER             ", font, brush, startX, startY + Offset);
    Offset = Offset + 20;
    string linea3 = string.Format("{0} Ticket#: {1}", DateTime.Now.ToString(), data[1]);
    graphics.DrawString(linea3, font, brush, startX, startY + Offset);
    Offset = Offset + 20;
    string linea4 = string.Format("NB#: {0}", data[2]);
    graphics.DrawString(linea4, font, brush, startX, startY + Offset);
    Offset = Offset + 20;
    graphics.DrawString("Item ID      Weigth     Price     Type", font, brush, startX, startY + Offset);
    Offset = Offset + 20;
    graphics.DrawString("----------------------------------------", font, brush, startX, startY + Offset);
    Offset = Offset + 20;

    var cant = (data.Length - 12) / 6;

    var pos = 12;
    for (var i = 0; i < cant; i++)
    {
        var linea7 = string.Format("{0} {1} {2} {3}", data[pos++], data[pos++], data[pos++], data[pos++]);
        graphics.DrawString(linea7, font, brush, startX, startY + Offset);
        Offset = Offset + 20;
        graphics.DrawString(data[pos++], font, brush, startX, startY + Offset);
        Offset = Offset + 20;
        graphics.DrawString(data[pos++], font, brush, startX, startY + Offset);
        Offset = Offset + 20;
        if (i != cant - 1)
            Offset = Offset + 20;
    }

    Offset = Offset + 20;
    string linea5 = string.Format("{0}: {1}", "Stock".PadRight(15), data[4]);
    graphics.DrawString(linea5, font, brush, startX, startY + Offset);
    Offset = Offset + 20;
    string linea6 = string.Format("{0}: {1}", "Total peso".PadRight(15), data[5]);
    graphics.DrawString(linea6, font, brush, startX, startY + Offset);
    Offset = Offset + 20;
    string linea71 = string.Format("{0}: {1}", "Total TAR1".PadRight(15), data[6]);
    graphics.DrawString(linea71, font, brush, startX, startY + Offset);
    Offset = Offset + 20;
    string linea8 = string.Format("{0}: {1}", "Total TAR2".PadRight(15), data[7]);
    graphics.DrawString(linea8, font, brush, startX, startY + Offset);
    Offset = Offset + 20;
    string linea9 = string.Format("{0}: {1} = {2}", "Total Vol".PadRight(15), data[8], data[9]);
    graphics.DrawString(linea9, font, brush, startX, startY + Offset);
    Offset = Offset + 20;
    string linea10 = string.Format("Items retirados: {0}", data[10]);
    graphics.DrawString(linea10, font, brush, startX, startY + Offset);
    Offset = Offset + 20;
    string linea11 = string.Format("Usuario: {0}", data[11]);
    graphics.DrawString(linea11, font, brush, startX, startY + Offset);
    Offset = Offset + 60;
    graphics.DrawString("----------------------------------------", font, brush, startX, startY + Offset);
    Offset = Offset + 40;
    string linea12 = string.Format("{0}", data[3].Replace("|", " "));
    graphics.DrawString(linea12, font, brush, startX, startY + Offset);
    Offset = Offset + 40;
    graphics.DrawString("            SIGNATUE           ", font, brush, startX, startY + Offset);
    Offset = Offset + 40;
    graphics.DrawString("*******THANKS FOR WORK WITH US********", font, brush, startX, startY + Offset);
    Offset = Offset + 10;
    if (data[0] == "R")
        graphics.DrawString("**********************************", font, brush, startX, startY + Offset);
    graphics.DrawString("a", font, brush, startX, startY + Offset);
    e.HasMorePages = false;
}

Read this article on MSDN: How to: Print a Multi-Page Text File in Windows Forms . 阅读有关MSDN的文章: 如何:在Windows窗体中打印多页文本文件
Since your task is very similar to printing of a text file, I believe this should help. 由于您的任务与打印文本文件非常相似,因此我相信这会有所帮助。

Another option is you may change the printer's Paper size in Layout > Printer Preferences. 另一个选项是您可以在布局>打印机首选项中更改打印机的纸张尺寸。 Select 'User Defined Paper Size' to create a new size of paper length as per you required. 选择“用户定义的纸张尺寸”以根据需要创建新的纸张长度尺寸。 The default length size is similar to the A4 size. 默认长度大小与A4大小相似。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM