Отправляйте необработанные коды принтера после написания FlowDocument, но перед автоматической обрезкой

Хорошее: я создаю 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 взят из образца SDK Star Micronics, и то, что он делает, говорит само за себя, по крайней мере, с моими комментариями, описывающими конкретные используемые коды.)

Я пробовал некоторые настройки в инструменте настройки TSP100 в отношении «Обнаружения конца страницы», но пока все, что мне удалось сделать, это отключить все обрезки или отключить явную команду «вырезать бумагу» в конце. Я не могу просто отключить первую резку.


person Andrew Stollak    schedule 16.01.2014    source источник
comment
Похоже, вам нужно отключить обрезки страницы и документа в свойствах принтера, а затем выполнить обрезку вручную.   -  person Jon    schedule 16.01.2014
comment
Если я отключу все, отключится и ручная резка. Если я включу ручную обрезку, это также позволит вырезать документ / страницу. :-(   -  person Andrew Stollak    schedule 21.01.2014


Ответы (1)


Вы должны дождаться, пока принтер не закончит обработку задания печати FlowDocument, прежде чем отправлять необработанные escape-коды. Это можно сделать, опросив PrintQueue.IsPrinting или отметив PrintQueue.QueueStatus.

person Craig Lebakken    schedule 16.01.2014
comment
Но ... но ... Я я жду завершения FlowDocument. Моя проблема возникает после рендеринга содержимого, но до того, как печать FlowDocument выдает обрезку бумаги. : - / - person Andrew Stollak; 21.01.2014
comment
По завершении FlowDocument задание может не быть напечатано. Задание на печать помещается в буфер, отправляется на принтер и обрабатывается принтером. Если документ находится в диспетчере очереди печати, когда вы отправляете escape-коды, он будет обрезан слишком рано. - person Craig Lebakken; 22.01.2014
comment
Я запустил его в отладчике - FlowDocument был напечатан в течение нескольких секунд и вырезан, прежде чем я вошел в код, который отправляет необработанные коды. - person Andrew Stollak; 22.01.2014
comment
Если принтер выполняет резку до того, как вы отправите необработанные коды для выполнения резки, драйвер принтера должен отправить на принтер команду резки. Есть ли способ отключить резку в драйвере принтера Star Micronics? - person Craig Lebakken; 22.01.2014
comment
Не в коде, который я видел. Я знаю, что есть is, потому что есть инструмент конфигурации, который позволяет вам установить это в графическом интерфейсе, но он нигде не задокументирован в их API. Я мог бы переключиться на другой аналогичный бренд (Epson?), Если бы знал, что у меня есть решение, которое будет работать; мы используем Star Micronics только по историческим причинам, которые сейчас не обсуждаются. (Заработайте компании 10 тысяч долларов на местоположение в год, и они поменяют принтеры чеков, если вы скажете, что они получат то, что они хотят! :-D) - person Andrew Stollak; 28.01.2014