吵吵   2019-07-18  阅读:9,758

在Delphi时代,不知道还有人记得Pascal语言不,我们做条码打印,直接就是调用Canvas来画就好了。

到了WPF年代,打印采用的是DocumentPage,打印出来的其实已经是XPS文档了。

var printDialog = new PrintDialog();

printDialog.PrintQueue = selectedPrinter;
if (printDialog.ShowDialog() == true)
{
MessageBox.Show(printDialog.PrintableAreaHeight.ToString());
Size pageSize = new Size(App.LS.BPColWidth, App.LS.BPColHeight);
BarPrintPaginator bar = new BarPrintPaginator(list,pageSize);
printDialog.PrintDocument(bar, “打印条码”);
}

在斑马系列的打印机中,比如博主用的斑马条码打印机ZDesigner GK888t (EPL),如果用XPS文档来打印的话,就没有办法解决分页的问题。

你只打印一个条码,它能够在第一个标签上打印出来正确的内容,但是却要吐出出A4纸那么大小的标签之后才能停下来。

等于打印机吐出10行标签纸,只有第一行上是有内容的,后面都是白吐。

尝试用DocumentPaginator的PageSize来控制,结果发现也没有用,没有办法控制打印页的大小,还是当A4那么大去打印。

一开始,由于项目急着上线,我只能用delphi来封装一个Dll来实现条码标签的打印。

后来觉得不是个事,在网上继续找找资料,才发现原来斑马打印机不支持WPF的XPS文档打印,但是支持GDI呀,其实Delphi用的也是GDI。

于是改代码:

1、添加windows.Forms的引用,等于要把原来winform开发的那一套sdk引用进来,因为GDI的打印是在原来winform里面的。

2、using System.Drawing.Printing 嗯,wpf的打印命名空间是System.Printing还是有区别的。

3、用GDI慢慢的画要打印的内容并打印:

PrintDocument printDocument = new PrintDocument();
printDocument.PrinterSettings.PrinterName = App.LS.BPName;
printDocument.PrintPage+=new PrintPageEventHandler(PrintPage);
printDocument.Print();

好了,终于解决了斑马条码打印机的问题了,麻烦的是引用了winform之后,一个MessageBox.Show()都不知道是哪个命名空间里面的了。

吵吵微信朋友圈,请付款实名加入:

吵吵 吵吵

发表评论

电子邮件地址不会被公开。 必填项已用*标注