【问题标题】:Printing on roll paper在卷纸上打印
【发布时间】:2011-05-20 21:42:24
【问题描述】:

我在 Winforms 中使用 C#。我正在尝试在纸卷上打印账单。纸的宽度是 3 英寸,但纸的长度是动态的(它是卷纸)。长度取决于列表中有多少项目。例如。在一次购买中,如果有 100 件商品售出,那么它会很长,而对于单个购买的商品,它的长度会很短。

当我打印报告时,在结束作业后,打印机弹出的最后一页比我需要的多。它会弹出与 A4 尺寸一样长的纸张。我想打印所需的行,然后停止打印。 我使用一卷纸,而不是 A4 或 A3 和 Epson LQ-300 + II 打印机。

更具体地说,打印始终以页面大小为单位。如果我将页面设置为 3 英寸 x 8 英寸,那么我总是会得到一个 8 英寸长的打印输出。如果我要打印一张 9 英寸的钞票,我最终会打印出 16 英寸的纸币,浪费了 7 英寸的纸张。如何在最后一页只打印需要的长度的情况下打印?

代码如下:

private void printDoc_PrintPage(Object sender, PrintPageEventArgs e)
        {
            Font printFont = new Font("Courier New", 12);
            int y = 15;
            e.Graphics.DrawString("a Line", printFont, Brushes.Black, 0, y); y = y + 20;
            e.Graphics.DrawString(" Line", printFont, Brushes.Black, 0, y); y = y + 25;
            e.Graphics.DrawString(" Line", printFont, Brushes.Black, 0, y); y = y + 35;
            e.Graphics.DrawString(" Line", printFont, Brushes.Black, 0, y); y = y + 45;
        }

【问题讨论】:

  • 您的问题是什么?您应该能够继续打印,直到完成。然后你就完了。这就是卷纸的优势。
  • +1,继续画,直到你完成并完成一个声明来剪纸。我以前用 GDI 做这个,没有使用水晶报表的经验

标签: c# .net printing crystal-reports gdi


【解决方案1】:

您是否尝试过使用只有“一行”长的页面?

省略上下边框,可以不间断打印。

现在添加一点(这样页面可以被撕掉)并弹出它。

试试这个:

            PaperSize pkCustomSize1 = new PaperSize("First custom size", 100, 200);

            printDoc.DefaultPageSettings.PaperSize = pkCustomSize1

见: http://msdn.microsoft.com/en-us/library/system.drawing.printing.pagesettings.papersize.aspx

【讨论】:

  • 鉴于限制,这似乎是最合乎逻辑的答案。
  • 我们如何定义单行纸?,我在打印机设置中只看到标准尺寸。
  • 在 vb.net 中是否有任何替代选项而不将高度指定为一行?如果不是,那么它们在销售点终端中使用什么类型的编码来打印收据,并且每张账单的宽度和高度也是固定的?
  • 伙计们,我也在为此苦苦挣扎。上面的那一行在哪里,我看到你把高度设置为200那一行怎么样。
【解决方案2】:

您还可以即时调整纸张尺寸。每页一行的工作量更少,但我想如果有人有理由这样做,这会产生更好的打印预览:

printdoc.DefaultPageSettings.PaperSize.Height += lineheight;

【讨论】:

  • 这种编码对我不起作用。在哪种情况下我应该指定这个编码?..我在打印页面事件中使用..
  • 你会想要在画每条线时这样做。并且您希望从接受的答案建议的自定义单行纸张尺寸开始。标准纸张尺寸的高度不可写。
【解决方案3】:

您可以通过以下方式定义自定义纸张尺寸并在报告中使用它。

打开打印机文件夹(从控制面板)。

从文件菜单中打开服务器属性。它将打开打印机和服务器属性对话框。

选择检查创建新表单

指定页面宽度高度。我建议你把身高定为 3 英寸。

现在点击保存表单按钮。

您的自定义页面已准备就绪。

在报告和打印机属性中将此纸张设置为默认纸张尺寸。

现在你可以走了。

【讨论】:

  • 应该至少指定您使用的操作系统。
【解决方案4】:

您也可以使用打印预览选项来完成此过程。

// This is for the print preview event
 private void printPreviewDialog1_Load(object sender, EventArgs e)
 {
     int j = 0;
     z = 185;

     while (j < dataGridView1.Rows.Count)
     {                 
         j += 1;
         z += 30;
     }

     z += 60;

     PaperSize pkCustomSize1 = new PaperSize("First custom size", 350, z);

     printDocument1.DefaultPageSettings.PaperSize = pkCustomSize1;
 }

 // This is the loop for generating print Document
 private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
 {
     int i = 0; //For Gridview Row Count
     int sno = 1; //For Grid Serial Number

     e.Graphics.DrawString(
         "HEADING", 
         new Font("Calibri", 20, FontStyle.Bold), 
         Brushes.Black, 
         new Point(100, 5));

     e.Graphics.DrawString(
         "Address", 
         new Font("Calibri", 12, FontStyle.Bold), 
         Brushes.Black, 
         new Point(75, 35));

    int y = 185; //For Grid y axis start to print 

    while (i < dataGridView1.Rows.Count)
    {
        e.Graphics.DrawString(
            sno.ToString(), 
            new Font("Calibri", 10, FontStyle.Bold), 
            Brushes.Black, 
            new Point(10, y)); //For Serial Number

        e.Graphics.DrawString(
            dataGridView1.Rows[i].Cells[1].FormattedValue.ToString(), 
            new Font("Calibri", 10, FontStyle.Bold), 
            Brushes.Black, 
            new Point(240, y));

        //This is for Trim content to next line
        Graphics df1 = e.Graphics;
        SizeF ef1 = df1.MeasureString(
            dataGridView1.Rows[i].Cells[0].FormattedValue.ToString(),
            new Font(new FontFamily("Calibri"), 12F, FontStyle.Bold),
            200); //160

        df1.DrawString(
            dataGridView1.Rows[i].Cells[0].FormattedValue.ToString(),
            new Font(new FontFamily("Calibri"), 12F, FontStyle.Bold), 
            Brushes.Black,
            new RectangleF(new PointF(60.0F, y), ef1), //350.0
            StringFormat.GenericTypographic);

        i += 1;
        sno += 1;
        y += 30;
    }

    e.Graphics.DrawString(
        "------------------------------------------------------------------------------------",
        new Font("Calibri", 10, FontStyle.Bold), 
        Brushes.Black, 
        new Point(0, y));

    e.Graphics.DrawString(
        "Total Amount-:" + TotalAmnt_txt.Text, 
        new Font("Calibri", 10, FontStyle.Bold), 
        Brushes.Black, 
        new Point(150, y+=20));

    e.Graphics.DrawString(
        "------------------------------------------------------------------------------------", 
        new Font("Calibri", 10, FontStyle.Bold), 
        Brushes.Black, 
        new Point(0, y+=20));

    e.Graphics.DrawString(
        "***Care For You ****", 
        new Font("Calibri", 10, FontStyle.Bold), 
        Brushes.Black, 
        new Point(150, y += 20));

    i = 0;
    sno = 1;
}

【讨论】:

    【解决方案5】:

    我正在使用 VKP80II,我所做的是将 pagesettings.papersize 设置为:

    PaperSize PaperRoll= new PaperSize("Paper Roll", 300, 0);
    

    它会自动打印所需的确切长度,而无需我实际指定长度

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-29
      • 2012-01-21
      相关资源
      最近更新 更多