本次使用的打印机是Gprinter GP-9134T

 

实现打印的主要代码就是

PrintDocument printDocument = new PrintDocument();
//设置边距
printDocument.PrinterSettings.DefaultPageSettings.Margins = new Margins(0,0,0,0);
//纸张大小
printDocument.DefaultPageSettings.PaperSize = new PaperSize("A4", 178, 52);
//绑定打印事件
printDocument.PrintPage += printDocument_PrintPage;
//打印
void printDocument_PrintPage(object sender, PrintPageEventArgs e)
{
    Graphics g = e.Graphics;
    g.PageScale = 0.18f;//缩小比例
    Bitmap bitmap = new Bitmap(445, 260);

    pDraw.DrawToBitmap(bitmap, new Rectangle(0, 0, bitmap.Width, bitmap.Height));

    e.Graphics.DrawImage(bitmap, (int)(3 / g.PageScale), 0, bitmap.Width, bitmap.Height);
    e.Graphics.DrawImage(bitmap, (int)(98 / g.PageScale), 0, bitmap.Width, bitmap.Height);
}

在点击按钮时,执行Print()

printDocument.Print();

分析

如果要实现双排打印,打印出不同的内容

我们需要清楚一点就是,每执行printDocument.Print()打印机都会打印一次,如果打印纸是单排的,则打印一张,如果打印纸是双排的,则打印两张


现在有两种方法

第一种,用两个Panel,当点击打印时,更改两个Pabel上字段的值,然后执行Print()方法

第二种,打印前将要打印的所有内容保存为图片,再执行Print(),执行printDocument_PrintPage()里,更改需要打印的图片

第一种方法,也实现过但是觉得太麻烦了,还要做第二种吧

实现

我们需要先新建一个临时的文件夹,存放图片

定义一个变量来存储打印的次数,比如打印第一张时,num++,则打印一次,执行两次num++,因为是双排打印

打印时只需将临时文件夹里的图片打印出来即可

保存图片代码

//临时目录
TempPath = DateTime.Now.ToString("yyyyMMddHHmmss");

int count = int.Parse(tbNum.Text);
int loopI = int.Parse(lbNewFidld.Text);

for (int i = 0; i < count;i++)//将控件图片保存在临时目录中
{
    lbNewFidld.Text = loopI.ToString();

    DrawToBitmap(pDraw, Application.StartupPath + "\\Temp\\" + TempPath, i.ToString() + ".bmp");

    loopI++;
}

num = 0;

for (int i = 0; i < count / 2 + 1; i++)
{
    printDocument.Print();
}

打印实现

string fileName = Application.StartupPath + "\\Temp\\" + TempPath + "\\" + num.ToString() + ".bmp";
if (File.Exists(fileName))
{
    bitmap = (Bitmap)Image.FromFile(fileName);
    e.Graphics.DrawImage(bitmap, (int)(3 / g.PageScale), 0, bitmap.Width, bitmap.Height);
    num++;
}

fileName = Application.StartupPath + "\\Temp\\" + TempPath + "\\" + num.ToString() + ".bmp";
if (File.Exists(fileName))
{
    bitmap = (Bitmap)Image.FromFile(fileName);
    e.Graphics.DrawImage(bitmap, (int)(98 / g.PageScale), 0, bitmap.Width, bitmap.Height);
    num++;
}

 

这里涉及到另一个知识点,WinForm运行时调整控件大小和位置,请看我的另一篇博文

WinForm运行时模仿窗体设计调整控件大小和位置

实现这个功能,就可以在Panel编辑字段了

 

【WinForm】打印机编辑打印内容并实现双排打印

效果

【WinForm】打印机编辑打印内容并实现双排打印

相关文章:

  • 2021-06-24
  • 2022-12-23
  • 2022-12-23
  • 2022-01-02
  • 2021-11-21
  • 2022-02-07
猜你喜欢
  • 2022-01-19
  • 2021-12-15
  • 2021-10-19
  • 2021-09-05
  • 2021-11-28
  • 2021-11-24
相关资源
相似解决方案