好:我正在我的应用程序中构建一个FlowDocument并将其发送到Star Micronics TSP100热敏收据打印机,我也可以通过直接将ESC代码发送到打印机来打印条形码
错误:在条形码有机会打印之前,它会在FlowDocument之后自动剪切纸张。
问题:是否有更好的方法来打印FlowDocument,因此它不会告诉打印机它已完成打印?或者让它的某些部分触发一个事件处理程序,这样我就可以在它告诉打印机它完成之前挤压我的条形码命令?
这是我现在的位置:
流媒体文档被创造性地称为“doc”。
FlowDocument doc
然后,当然,我将一大堆东西添加到FlowDocument中。然后我抓住打印机并打印FlowDocument:
string printerName = "Star TSP100 Cutter (TSP143)";
LocalPrintServer local = new LocalPrintServer();
PrintQueue rcptpq = local.GetPrintQueue(printerName);
Xps.XpsDocumentWriter xpsdw = PrintQueue.CreateXpsDocumentWriter(rcptpq);
IDocumentPaginatorSource dps = doc;
如果这一切都没有错误(错误处理没有复制 - 这就是我正在逐步完成的),我写出收据:
// print MOST of the receipt
xpsdw.Write(dps.DocumentPaginator);
打印机自动切换到此处。我不想要它。我希望它在条形码之后剪切。
// print the bar code
RawPrinterHelper.SendStringToPrinter(printerName,"\x1b\x62\x2\x2\x30" + "MyUPC123\n");
// Cut the paper
RawPrinterHelper.SendStringToPrinter(printerName,"\x1b\x64\x02");
(RawPrinterHelper来自Star Micronics SDK示例,它的作用非常自我解释,至少我的评论描述了所使用的特定代码。)
我在TSP100的配置工具中尝试了一些关于“页面结束检测”的设置,但到目前为止,我所做的就是关闭所有剪切,或者在结束时关闭显式的“剪纸”命令。我不能只关掉第一次切割。
答案 0 :(得分:0)
您应该等到打印机完成处理FlowDocument打印作业后再发送原始转义码。这可以通过轮询PrintQueue.IsPrinting或查看PrintQueue.QueueStatus来完成。