Printing 在写入FlowDocument后但在自动剪切之前发送原始打印机代码

Printing 在写入FlowDocument后但在自动剪切之前发送原始打印机代码,printing,xps,Printing,Xps,好处:我正在我的应用程序中构建一个FlowDocument并将其发送到Star Micronics TSP100热敏收据打印机,通过直接将ESC代码发送到打印机,我也可以打印条形码 坏处:它会在FlowDocument之后,条形码还没来得及打印之前自动剪切纸张 问题是:有没有更好的方法打印FlowDocument,这样它就不会告诉打印机打印完成了?或者让它的某个部分触发一个事件处理程序,这样我就可以在它告诉打印机它已经完成之前压缩我的条形码命令 这就是我现在的处境: 这个流程文档被称为doc,这

好处:我正在我的应用程序中构建一个FlowDocument并将其发送到Star Micronics TSP100热敏收据打印机,通过直接将ESC代码发送到打印机,我也可以打印条形码

坏处:它会在FlowDocument之后,条形码还没来得及打印之前自动剪切纸张

问题是:有没有更好的方法打印FlowDocument,这样它就不会告诉打印机打印完成了?或者让它的某个部分触发一个事件处理程序,这样我就可以在它告诉打印机它已经完成之前压缩我的条形码命令

这就是我现在的处境:

这个流程文档被称为doc,这是很有创意的

FlowDocument doc
当然,我会在流程文档中添加一大堆内容。然后,我拿起打印机打印流程文档:

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的配置工具中尝试了一些关于页面结束检测的设置,但到目前为止,我所成功做的只是关闭所有剪切,或关闭结尾处的显式剪切纸张命令。我不能只关掉第一个开关

在发送原始转义码之前,应等待打印机处理完FlowDocument打印作业。这可以通过轮询或检查来完成

看起来您需要在打印机属性中禁用页面和文档剪切,然后手动发布剪切。如果我禁用所有内容,手动剪切也将被禁用。如果启用手动剪切,也会启用文档/页面剪切:-但是但是我正在等待流程文档完成。我的问题是在呈现内容之后,但在FlowDocument打印发布剪纸之前,我的问题就到了关键点-/流程文档完成后,作业可能不会打印。打印作业被后台打印、发送到打印机并由打印机处理。如果在发送转义码时文档在后台打印程序中,它将过早剪切。我已在调试器中运行了它。FlowDocument已打印了几秒钟,并在我进入发送原始代码的代码之前进行了剪切。如果打印机在发送原始代码以执行剪切之前进行了剪切,打印机驱动程序必须向打印机发送剪切命令。有没有一种方法可以在Star Micronics打印机驱动程序中禁用剪切功能?我见过的代码中没有。我知道有,因为有一个配置工具,可以让你在GUI中设置,但它并没有记录在他们的API中。我可以换成另一个类似的品牌爱普生吗?如果我知道我有一个可行的解决方案;我们只是出于历史原因才使用星光微光技术,这一点现在还没有定论。让一家公司每年赚1万美元,如果你说这能满足他们的需要,他们就会更换收据打印机-D