c#打印没有位图的POS收据

时间:2017-09-18 11:09:56

标签: c# printing point-of-sale thermal-printer

我正在使用C#Windows窗体开发销售点应用程序。现在我正处于一个我必须为客户打印Receipt的舞台上。为此我正在使用热敏打印机。我在附有面板图像上绘制收据。首先,我尝试使用位图打印它,但是当我在热敏打印机上打印时,它会变得淡淡。该代码如下:

Bitmap bp = new Bitmap(Panel1.Width, Panel1.Height);
        Panel1.DrawToBitmap(bp, new Rectangle(0, 0, Panel1.Width, Panel1.Height));
        e.Graphics.DrawImage(bp, 0, 0);
        PageSetupDialog psd = new PageSetupDialog();
        psd.Document = printDocument1; 

现在我想要任何其他程序,我可以创建这样一个好看的收据。提前完成。enter image description here

1 个答案:

答案 0 :(得分:0)

有两种方法可以做到这一点,一种是复杂的,也就是非一般的,例如一次硬编码就很难改变而不再建立项目

第一种方式

通过这种方式,您必须覆盖onDraw()函数进行打印,这样您就必须计算每个字符串的位置和大小,这些字符串在收到时要打印,非常复杂且非常棘手,每次更改都需要更改所有字符串。再次计算

第二种方式

您必须使用HTML创建收据,CSS非常简单高效以及通用版,以后您只需更改HTML模板,您的应用程序将采用您的新收据,而无需再次构建应用程序 所以你需要做的是

创建Html代码,使值字段保留一些可替换的字符组合,即

<h3>Total Bill : %bill%</h3>

在您的程序中,您将读取该文件并将%bill%替换为实际值

完成此过程后,您将最终获得HTML收据代码 然后像这样创建一个WebBrowser实例

WebBrowser browser = new WebBrowser();
 browser.DocumentCompleted +=new WebBrowserDocumentCompletedEventHandler(WebBrowser_DocumentCompleted);
 browser.DocumentText = "your generated html code";

之后创建一个像这样的WebBrowser_DocumentCompleted事件

public void WebBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
  WebBrowser wb = (WebBrowser)sender;
  //set here your thermal printer by default if it is not already
  wb.Print(); 
}

你完成了!