2012-07-10 2 views
5

Potrzebuję wysłać zawartość do drukarki w C# .NET w taki sam sposób, jak robi to polecenie PRINT.Co Notepad robi inaczej pod maską niż polecenie PRINT?

Mam drukarkę termiczną Godex z dołączonym oprogramowaniem QLabel. Teraz ma opcję zapisania etykiety jako polecenia, które można przekazać do drukarki za pomocą polecenia wiersza polecenia: PRINT. Plik wygląda następująco:

^Q80,3 
^W100 
^H10 
^P1 
^S3 
^AD 
^C1 
^R2 
~Q+0 
^O0 
^D0 
^E35 
~R200 
^L 
Dy2-me-dd 
Th:m:s 
AH,0,0,1,1,0,0,X 
AH,744,0,1,1,0,0,X 
AH,746,560,1,1,0,0,X 
AH,0,550,1,1,0,0,X 
AG,160,208,1,1,0,0, 
AA,234,283,1,1,0,0,Haloo 
E 

To działa, gdy robię coś takiego:

net use LPT2 \\localhost\godexUsbPrinter /yes 
print /D:LPT2 label.cmd 

I drukuje moją wytwórnię ładnie.

Teraz, jeśli otworzę to w notatniku i wydrukuję, po prostu wydrukuje mi ten tekst.

Zastanawiam się, co robi komenda PRINT pod maską i jak mogę programować mój program oparty na C# do replikacji zachowania? Ponieważ kiedy wdrażam logikę drukowania, po prostu drukuje mi zwykły tekst, tak jak robi to notatnik.

Wiem, że mógłbym wywołać komendę PRINT z Process.Start z C#, ale muszę przez cały czas zastępować pewną wartość zastępczą w szablonie etykiety. Mógłbym utworzyć tymczasowy plik na dysku i wydrukować go, ale wolałbym uniknąć takiego scenariusza.

+0

Domyślam się, że przekłada^Q i takie na odpowiednie znaki sterujące –

+0

print nie robi nic pod maską w tym względzie, to jest różnica. Notatnik stara się wyświetlać wszystkie znaki w pliku, ale prawdopodobnie usuwa niektóre niedrukowalne znaki. –

Odpowiedz

4

Szczerze mówiąc, tytuł pytania jest niewłaściwy. PRINT w ogóle nie robi spektrum, po prostu wypłukuje wszystkie dane wejściowe do drukarki. To Notatnik, który za pośrednictwem systemu drukowania Windows przesyła różne polecenia dotyczące stronicowania i zakończenia linii, a także, w końcu, dane, które chcesz wydrukować. Wyświetlany kod to surowe dane drukarki, więc musisz wysłać je "surowo", a nie jako tekst. Więc technicznie jest to duplikat this question.

Jak to zrobić, wyjaśniono here. Używa P/Invokes do winspool.Drv.

+0

Dziękujemy za wyjaśnienia. To działa. Prawdopodobnie powinienem zmienić tytuł pytania? –

+0

@JanisVeinbergs Próbowałem trochę to wyjaśnić. :) – CodeCaster